{"id":1020,"date":"2021-04-13T21:12:26","date_gmt":"2021-04-13T18:12:26","guid":{"rendered":"http:\/\/esanu.name\/vitalie\/?p=1020"},"modified":"2021-04-13T21:12:26","modified_gmt":"2021-04-13T18:12:26","slug":"cum-am-creat-reteaua-sociala-audio-ascult-eu-in-10-zile","status":"publish","type":"post","link":"http:\/\/esanu.name\/vitalie\/?p=1020","title":{"rendered":"Cum am creat re\u021beaua social\u0103 audio Ascult.Eu \u00een 10 zile"},"content":{"rendered":"<figure id=\"attachment_1021\" aria-describedby=\"caption-attachment-1021\" style=\"width: 615px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-1021\" src=\"http:\/\/esanu.name\/vitalie\/wp-content\/uploads\/2021\/04\/Store_Feature-1024x500.png\" alt=\"\" width=\"625\" height=\"305\" \/><figcaption id=\"caption-attachment-1021\" class=\"wp-caption-text\">Audio Social Network<\/figcaption><\/figure>\n<p>Am o dragoste aparte pentru a crea produse pentru consumatori, pe de alt\u0103 parte ur\u0103sc s\u0103 fac soft pentru enterprise.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/spambully.com\">SpamBully<\/a>, <a href=\"http:\/\/codegoo.com\">Camera Genius<\/a>, <a href=\"https:\/\/www.privesc.eu\">Privesc.Eu<\/a>, <a href=\"https:\/\/diacritice.ai\">diacritice.ai<\/a>, <a href=\"https:\/\/invat.online\">Invat.Online<\/a>, sunt doar cateva din produsele care au avut succes. Evident c\u0103 multe din proiectele mele au avut e\u0219ec, dar asta nu m\u0103 opre\u0219te s\u0103 revin la ele, peste ani, din nou.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Unul din proiectele care am investit foarte mult timp \u0219i bani a fost <a href=\"https:\/\/evisoft.com\">Joketastic<\/a>, o re\u021bea social\u0103 audio pentru bancuri. L-am creat prin 2012. Chiar am fost \u0219i \u00een Sillicon Valley \u0219i am pitch-uit investitori. P\u00e2n\u0103 la urm\u0103 l-am \u00eenchis. Concluzia c\u0103 re\u021belele audio \u00eenc\u0103 nu sunt \u00een\u021belese, poate \u00een viitor. Radu Chivriga \u00eemi aducea aminte cu orice ocazie s\u0103 revin la el \u0219i s\u0103-l refac.<\/p>\n<p>Un alt caz l-am avut \u00een martie 2020, c\u00e2nd a \u00eenceput pandemia \u0219i oamenii erau for\u021ba\u021bi s\u0103 stea acas\u0103, \u00eens\u0103 mul\u021bi doreau s\u0103 comunice. Astfel pe platforma <a href=\"http:\/\/privesc.eu\">privesc.eu<\/a> am construit ni\u0219te beciuri virtuale unde lumea vorbea \u00eentre ei. Mare mi-a fost mirarea c\u0103 acele beciuri virtuale durau p\u00e2n\u0103 la 5 ore de discu\u021bii aprinse, iar o mul\u021bime de oameni ascultau online, dar nu participau la discu\u021bii.<\/p>\n<p>Aceste 2 cazuri din trecutul meu nu-mi d\u0103deau pace, p\u00e2n\u0103 \u00een momentul c\u00e2nd am aflat de <a href=\"https:\/\/www.joinclubhouse.com\">Clubhouse<\/a> la sf\u00e2r\u0219itul anului 2020, iar prin ianuarie am reu\u0219it s\u0103-mi fac \u0219i un cont pentru a m\u0103 convinge c\u0103 anume a\u0219a lumea se comport\u0103 cum intuiam eu. M-a convins c\u0103 timpul a venit \u0219i pentru re\u021belele sociale audio.<\/p>\n<p>\u00centr-o s\u00e2mb\u0103t\u0103, \u00eentr-o or\u0103, am f\u0103cut un app iOS care lucra pe <a href=\"http:\/\/agora.io\">agora.io<\/a>. Le-am dat aplica\u021bia lui Alex M\u00e2nza \u0219i Radu Chivriga \u0219i am avut o discu\u021bie de vreo or\u0103 la care m-am convis c\u0103 plaforma audio lucreaz\u0103 superb.<\/p>\n<p>Deci, m-am hot\u0103r\u00e2t s\u0103 fac iar o re\u021bea social\u0103 audio, din simplu motiv c\u0103 acest segment abia acum se descoper\u0103 \u0219i se poate face foarte multe inova\u021bii. M-am pus \u00een regim de sprint\/maraton \u0219i am hot\u0103r\u00e2t s\u0103 construiesc <a href=\"https:\/\/ascult.eu\">Ascult.Eu<\/a>.<\/p>\n<p>Not\u0103: Mai departe urmeaz\u0103 \u00eenjur\u0103turi tehnologice \ud83d\ude00<\/p>\n<p>Am \u00eenceput cu backendul. Este f\u0103cut pe <a href=\"http:\/\/asp.net\">asp.net<\/a> core 5, \u0219i hostat pe <a href=\"https:\/\/azure.microsoft.com\/en-us\/\">windows azure<\/a>, \u00een instance pe linux. Baza de date nerela\u021bional\u0103 este hostat\u0103 pe <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/cosmos-db\/\">Cosmos DB<\/a>, probabil cea mai rapid\u0103 baza de date din lume \u0219i autoscalabil\u0103.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>C\u00e2nd ai mai multe webservere de obice se folose\u0219te un serviciu\/server de cache comun, aici am folosit <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/cache\/\">Redis<\/a>, un microservice din Azure.<\/p>\n<p>Pentru comunicarea realtime \u00eentre utilizatori \u0219i server, adic\u0103 ridicarea m\u00e2nii, microfon activ, intrarea \u0219i ie\u0219rile din room am folosit <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/signalr-service\/\">SignalR<\/a>, tot de la Azure.<\/p>\n<p>Visual Studio 2019, \u0219i template-urile mi-au permis s\u0103 fac Api pentru backend \u00een 2 zile, inclusiv testarea rapid\u0103 prin <a href=\"https:\/\/swagger.io\">swagger<\/a> \u0219i <a href=\"https:\/\/www.postman.com\">postman<\/a>.<\/p>\n<p>Set\u0103rile administrative au durat vreo or\u0103. Domen-ul, configurarea <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/cdn\/\">CDN-ului \u00een Azure<\/a>, <a href=\"https:\/\/www.cloudflare.com\">Cloudflare<\/a> pentru cache, cump\u0103rarea de <a href=\"https:\/\/workspace.google.com\/products\/gmail\/\">email hosting la Google<\/a> \u0219i setarea MX-urilor. Nimic complicat.<\/p>\n<p>De luni, am \u00eenceput s\u0103 fac aplica\u021bia pe iOS. Am ales special iOS, pentru c\u0103 tocmai terminasem versiunea la iOS pentru <a href=\"http:\/\/privesc.eu\">privesc.eu<\/a> pe o tehnologie mai nou\u0103 de a scrie UI\/UX care se nume\u0219te <a href=\"https:\/\/developer.apple.com\/tutorials\/swiftui\">SwiftUI<\/a>.<span class=\"Apple-converted-space\">\u00a0 <\/span>Off, c\u00e2t de mult am a\u0219teptat eu a\u0219a tehnologie s\u0103 apar\u0103, p\u00e2n\u0103 la ea programatorii aveau un co\u0219mar s\u0103 scrie UI pentru aplica\u021bii.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Timp de 7 zile am transpus Api din backend \u00een UI. Unele func\u021bionalit\u0103\u021bi cum ar fi evenimente \u0219i comunit\u0103\u021bi sunt implementate \u00een aplica\u021bie \u00eens\u0103 ascunse, pentru moment. Dup\u0103 7 zile am pus aplica\u021bia pe <a href=\"https:\/\/testflight.apple.com\">TestFlight<\/a>, un serviciu de testare de la Apple care \u00ee\u021bi permite s\u0103 distribui aplica\u021bia ta f\u0103r\u0103 a fi publicat\u0103 \u00een App Store. Peste 80 de oameni au desc\u0103rcat aplica\u021bia \u0219i am f\u0103cut primele teste, au fost unele crash-uri, dar din fericire <a href=\"https:\/\/firebase.google.com\/products\/crashlytics\">Firebase Crashlytics<\/a> le-a colectat pe toate \u0219i am g\u0103sit imediat codul unde se petrecea crash-ul. Era unul banal.<\/p>\n<p>Push notific\u0103rile le trimit prin <a href=\"https:\/\/firebase.google.com\">Firebase<\/a> de la Google.<\/p>\n<p>10 zile, a durat de la scrierea primului cod p\u00e2n\u0103 la testarea unui room cu to\u021bi prietenii mei care au venit s\u0103 se joace cu aplica\u021bia. Mul\u021bumesc lor, am inspirat \u00eenc\u0103 o doz\u0103 de entuziasm \u0219i am pornit la drum s\u0103 fac Android-ul.<\/p>\n<p>Android-ul a durat ceva mai mult, \u00eel cunosc mai pu\u021bin, dar \u0219i tehologiile lor sunt cumva \u00een urma iOS-ului. Am folost <a href=\"https:\/\/developer.android.com\/jetpack\/compose\">Jetpack Compose<\/a> pentru a crea UI, e cumva similar cu SwiftUI de la iOS. Jetpack Compose e \u00eenc\u0103 \u00een Alpha versiune, practic zilnic fac update, nimic documenta\u021bie. Cinstit s\u0103 v\u0103 spun, dac\u0103 Google nu avea aceast\u0103 tehnologie nici nu m\u0103 apucam de Android.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Jetpack Compose \u0219i SwiftUI, practic m-au f\u0103cut s\u0103 fiu de 10x mai rapid dec\u00e2t alte frameworkuri UI.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Peste 14 zile de programare \u00een Kotlin, deja \u00eencepusem s\u0103 m\u0103 consum, <a href=\"https:\/\/www.agora.io\/en\">Agora.IO<\/a> \u0219i WebRTC nu prea vroiau s\u0103 lucreze, \u00een plus era \u0219i mai greu de testat pentru de fiecare dat\u0103 trebuie s\u0103 porne\u0219ti cel pu\u021bin 2 telefoane pentru a testa audio. Aproape dupa 3 s\u0103pt\u0103m\u00e2ni am reu\u0219it s\u0103 fac \u0219i android-ul s\u0103 mearg\u0103, \u0219i \u00eens\u0103 nu sunt sigur c\u0103 merge totul ok.<\/p>\n<p>Audio, c\u0103lu\u021bul din spatele la <a href=\"https:\/\/ascult.eu\">Ascult.Eu<\/a>, e f\u0103cut pe serviciu de voice chat de la Agora.io, adic\u0103 acela\u0219 serviciu care st\u0103 \u00een spatele \u0219i la Clubhouse. Spre deosebire de clubhouse, eu am f\u0103cut o ajustare. Doar cei care vorbesc, se aud pe serviciul agora.io, pentru care se pl\u0103te\u0219te per minute per user, iar conversa\u021bia se face restream pe un server hostat pe <a href=\"https:\/\/www.digitalocean.com\">digital ocean<\/a> <a href=\"https:\/\/antmedia.io\">Ant Media<\/a>. De acolo streamul audio merge spre ascult\u0103tori. Aceast mi-a permis, dup\u0103 calculele mele s\u0103 am cheltuieli de 25x &#8211; 30x mai mici dec\u00e2t ce de la clubhouse, tradeof e c\u0103 ascult\u0103torii aud cu \u00eent\u00e2rziere de 2 secunde ce vorbesc speakerii.<\/p>\n<p>Pe l\u00e2ng\u0103 Clubhouse, au mai ap\u0103rut \u0219i al\u021bi juc\u0103tori ca <a href=\"https:\/\/twitter.com\/twitterspaces\">Twitter Spaces<\/a>, Telegram audio, Stereo, probabil vor ap\u0103rea \u0219i mai multe. Ascult.Eu se orienteaz\u0103 mai mult pe persoane identificabile, cu nume real \u0219i fotografii reale, probabil voi face enforcement ca s\u0103 pui selfie. Asta nu e un moft, dar consider c\u0103 \u00een comunicare audio, to\u021bi participan\u021bii trebuie s\u0103 fie identifica\u021bi, f\u0103r\u0103 anonimi, f\u0103r\u0103 trolli. Oamenii, room-urile, evenimentele comunit\u0103\u021bile sunt restric\u021bionate dup\u0103 limbile de comunicare.<\/p>\n<p>Topul celor celebrit\u0103\u021bilor se face simplu. Cei vobesc \u00een fa\u021ba la c\u00e2tor mai mul\u021bi oameni acela are mai multe ore\/aten\u021bie \u0219i respectiv se ridic\u0103 \u00een top. Followerii sunt doar un proxy pentru a genera ore\/aten\u021bie.<\/p>\n<p>Dup\u0103 aceste zile, \u00een care lucram c\u00e2te 14 ore pe zi, am devenit foarte extenuat. Mi-a trebuit \u00eenc\u0103 o s\u0103pt\u0103m\u00e2n\u0103 s\u0103 nu fac nimic pentru ami reveni. Deci, nu v\u0103 prea recomand un a\u0219a sprin\/marathon.<\/p>\n<p>Discu\u021biile din camerele pe <a href=\"http:\/\/ascult.eu\">ascult.eu<\/a> au fost foarte utile. Am cules o mul\u021bime de idei. Le mul\u021bumesc tuturor pentru aport,\u00a0le voi implementa c\u00e2t de cur\u00e2nd posibil.<\/p>\n<p>Dac\u0103 ave\u021bi idei, sunte\u021bi bineveni\u021bi \u00a0s\u0103 facem \u00eempreun\u0103 viitorul radioului.\t\t<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Am o dragoste aparte pentru a crea produse pentru consumatori, pe de alt\u0103 parte ur\u0103sc s\u0103 fac soft pentru enterprise.\u00a0 SpamBully, Camera Genius, Privesc.Eu, diacritice.ai, Invat.Online, sunt doar cateva din produsele care au avut succes. Evident c\u0103 multe din proiectele mele au avut e\u0219ec, dar asta nu m\u0103 opre\u0219te s\u0103 revin la ele, peste ani, &#8230; <a title=\"Cum am creat re\u021beaua social\u0103 audio Ascult.Eu \u00een 10 zile\" class=\"read-more\" href=\"http:\/\/esanu.name\/vitalie\/?p=1020\" aria-label=\"More on Cum am creat re\u021beaua social\u0103 audio Ascult.Eu \u00een 10 zile\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1020","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/posts\/1020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1020"}],"version-history":[{"count":0,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=\/wp\/v2\/posts\/1020\/revisions"}],"wp:attachment":[{"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1020"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/esanu.name\/vitalie\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}