Apple

Siri așteaptă întrebarea.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9 Comments

Gossip app screenshot

Gossip captură

Nu sunt bârfitor, însă mulți/multe sunt ;)
Discutând cu partenerul meu despre noi idei de aplicații, am ajuns la una. Una despre bârfe. Gossip.

Ideea este simplă, să simulăm virtual procesul de bârfe din lumea reală.
Adică, spui cuiva niște informații, uneori dubioase sau intenționat greșite, cu eticheta “Numai să nu spui nimănui!” și bârfa pleacă în lume.

Aplicația e simplă de tot:

  1. Indici numărul tău de telefon, primești un SMS cu codul de activare.
  2. Inviți câțiva din cei mai buni prieteni/prietene să ți se alăture.
  3. Scrii mesaje pe care toți prietenii tăi le văd.
  4. Atenție! Dacă cineva răspunde la un mesaj de al tău, răspunsul lui și mesajul tău este văzut și de prietenii prietenului. Așa se propagă bârfa ;)
  5. Toți cei pe care i-ai invitat și au instalat aplicația, automat îți devin prieteni.

Șmecheria este că nu există nickname-uri, nume sau fotografii de profil. Între utilizatori diferă doar culoarea de fundal a mesajelor.
Culoare se schimbă odată la fiecare 24 de ore. Totul e anonim, până când decizi tu să-ți dezvălui identitatea în vreun mesaj.

Gossip se poate descărca de pe App Store.

PS1: Știind cum lucrează clasa politică la noi în țară, le-aș recomanda și lor această aplicație :)
PS2: Aplicația iOS și partea de server a fost făcută de 10 oameni-zile.

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.