Snapchat

Antud kirjatüki eesmärk on kirjeldada, kui tehnoloogiliselt kohutav asi Snapchat on. Erinevalt suuremast rahvamassist ma tegelikult Snapchati ei kasuta ning teenusega mul otseselt suurt ka kogemust pole, kuid võime teha vahet toimival ja katkisel asjal on mul siiski olemas, eriti just programmeerija vaatepunktist, mis muudab asja eriti hinge kriipivaks. Kusjuures ei hakka ma kritiseerima Snapchati üldist kontseptsiooni, sest tehku kes iganes, mida ta selle teenusega tahab, vead ennast ise ei paranda.

Äpp

Olen proovinud ainult Androidi äppi, seega muud ei oska kommenteerida, aga ega ei tahaks rohkem proovida ka.

  1. Kust ma siin need sõbrad lisan? Kuidas peaks uus kasutaja teadma, et kasutajanime pidi sõbra lisamiseks peab kõigepealt seda otsima ja siis saab imekombel lisada. Arendaja arvates on kindlasti tegemist geniaalse lahendusega, mis tabab kaks kärbest ühe hoobiga: otsimine ja lisamine. Samas on täiesti mööda vaadatud minu jaoks kasutatava programmi/äpi kasutajaliidese rusikareeglist: kui kasutajaliides on mingil moel segane, kasutuskõlbmatu, keeruline või misiganes, siis leidub kasutaja, kes selle tõttu jätab kasutamata, mis omakorda tähendab kasutajaliidese läbikukkumist.
  2. Miks ei saa sisse lülitada tagumist välku, kui eksisteerib võimalus kastutada ekraani esimese välguna (mis on küll suhteliselt mõttetu üritus)? Lihtsalt laiskus.
  3. Feedi värskendamine võtab liiga kaua aega. Miks peab kuluma 5 minutit selleks, et “värskendada” Feedi, kui mitte midagi pole muutunud? Ega tegelikult ei peagi, sest 21. sajandil on internetiühendus piisavalt kiire, aga mis teha kui äpp ise pole. Kui asja täpsemalt vaadelda, siis samal ajal kui kõikvõimas Snapchat Feedi värskendab, tegelikult Android näitab otse ära, et mingit võrguliiklust ei toimu. Väga efektiivne lähenemine.
  4. Snapi saatmine on meeletult aeganõudev. Või kui aus olla, siis võib see võtta ühest sekundist ühe igavikuni. Täpsed samad põhjused nagu eelmise punkti puhul. Ahjaa, kui Snapchati serverid liiga koormatud, ega siis see ka kasutaja süü pole. Kusagil mujal on ikka midagi viltu.
  5. Saatsin Snapi… või kas ikka saatsin? ehk vahest mõni Snap lihtsalt kaobki ära, st ütleb küll, et on kenasti Sent, aga värskendad ja tegelikult ei saadetud mitte vähematki. Kasutajat lihtsalt vaikselt petetakse.
  6. Retry – oih! kadunud ta ongi ehk veelgi põnevam olukord, kus Snapi ei õnnestunud saata (üllatus-üllatus) ning Retry nupule vajutamisel kaob lihtsalt su saadetu otse su silmade all. See on juba kasutajale näkku naermine.
  7. Joonistamise jõnks – kui tahan pildile peale joonistada ja panen sõrme maha, siis kogu pilt kuidagi nagu nihkub, mis teed selle joonistamise värgi üldiselt üpris keeruliseks. Aga ilmselt olen ma ainuke, kellel nii palju probleeme ikka tekib…

Süsteem

See peatükk on küll mõnevõrra keerulisema sisuga ning asjatundmatule inimesele arusaamatu, kuid ma ei saa seda kirjutamata jätta, kuna tegemist on praktiliselt õudusunenäoga, mis toimub kapoti all kasutajale märkamatult.

  1. Kogu API on “salajane”. API ehk Application Programming Interface on siis liides, mille kaudu Snapchati äpp serveriga suhtleb. Sõna salajane on jutumärkides, sest tegelikult on ainuke selle teenuse kasutamiseks ettenähtud vahend ametlik rakendus. Kuid nagu alati on kogu skeem väga detailselt läbi uuritud, seega on avalikult teada, kuidas kõik tegelikult toimib: http://gibsonsec.org/snapchat/fulldisclosure/. Snapchat lihtsalt üritab asja turvalisena hoida selle läbi, et pole teada kuidas kõik toimib (inglisekeelse terminiga Security through obscurity), kuid mõttetu üritus, asju tuleb õigesti teha, mitte vigu üritada varjata ja teha nägu, et kõik on ikka korras.
  2. Kõik on jube turvaline, krüpto ja puha. Tuleks kohe ära mainida, et kasutusel on vähemalt kolm erinevat krüpteerimise meetodit, mis igaüks erineb mingi aspekti poolest teistest. Milleks on selline asi vajalik? Ega ei olegi, aga Snapchat üritab vist andmete turvalisust tagada sellega, et lihtsalt kogu asi segasem oleks. Tegelikult üks korralik krüpto on parem kui kolm vigast läbisegi kokku lapitud krüptot.
    Tavaliste Snapide puhul kasutatakse AES algoritmi, mille puhul informatsiooni krüpteerimiseks ja dekrüpteerimiseks kasutatakse üht sama võtit ehk parooli. Oh seda rõõmu, sest kõik andmed on nii turvatud ühe ja sama võtmega: M02cnQ51Ji97vwT4. Praktikas tähendab see seda, et vahet pole, kas üldse kasutada krüptot või mitte, andmed on igal juhul kõrvalistele isikutele loetavad.
    Storyde puhul kasutatakse teist varianti AES-ist ning kõik on palju turvalisem: ei kasutata sama võtit kõige puhul. Tõepoolest, krüptovõti saadetakse koos Storyga! Ehk tegelikult võib kõrvaline isik teada saada ka selle ning ikka sisu lugeda. Luua illusioon turvalisusest on halvem kui selle puudumine.
  3. Andmete hoiustamine. Info saatmise turvalisus on üks aspekt, aga seda infot tuleb hoida kuskil serveris, kus sellega võib toimuda mida iganes ning seda vaadata kes iganes. Või on siis kasutusel krüpto? Eelmise punkti järgi hinnates: vaevalt küll.
  4. Uue kasutaja registreerimiseks tehakse kaks päringut: üks registreerimiseks… ja teine kasutajanime seostamiseks kasutajaga. Kas tõesti oli kõiki andmeid korraga nii raske saata?
  5. Kasutaja sünnipäev. Kasutaja registreerimisel (mitte kasutajanime seostamisel) saadetakse ka kasutaja sünnikuupäev kujul YYYY-MM-DD (Y, M, D on vastavalt numbrid, mis kuuluvad aasta, kuu ja päeva juurde) ning vanus. Oot, miks vanus kui me teame täpset sünnikuupäeva? Tere tulemast Snapchati võlude maailma.  API-s on vähemalt funktsioon kasutaja sünnipäeva muutmiseks (kuigi äpist seda vist teha ei saagi), aga väikese erinevusega, kujul 0000-MM-DD (aastat märgib lihtsalt nullide rida). Mingil maagilisel kombel siin pole enam aasta tähtis (sünnipäev on ju igal aastal), ometigi registreerimisel oli. Tegelikult ma ei saa siiani aru, miks sünnikuupäeva üldse tarvis on.
    EDIT: Oli sünnipäev ja sain teada miks: sulle saadetud Snapide ikoon lihtsalt kingipaki paelaga. Tõesti meeletu erinevus.
  6. Opened! Kui API-t uurida siis selgub väga põnev asjaolu. Nimelt võib ühte ja sama sulle saadetud Snapi serverist alla laadida kuitahes mitu korda, peaasi et varasemalt avatud pole. Aga vaadatuks märkimine on täiesti eraldi asi, mis tähendab, et Snapi võib alla laadida ja tehniliselt ka vaadata, ilma, et peaks serverile teada andma, et asja on üldse vaadatud. Kena tõesti.
  7. Updating feature settings ehk kui kasutaja lülitab seadetes sisse mõne asja Additional Services alt, siis saadetakse antud info ka serverisse. Miks sellisele tühjale tähjale on tarvis võrguliikust kasutada kui vajalike asjade saatmisega ei saa hakkamagi?
  8. Last but not least ehk Find friends. Ehk siis see vapustav võimalus sõpru lisada oma kontaktiraamatu põhjal, aga kapoti all peitub midagi hoopis põnevamat. See toimib tegelikult väga lihtsalt: Snapchati serverisse tehakse päring, mis sisaldab kõiki telefoninumbreid su telefonis ja tagasi tuleb nimekiri neist, kes on ka Snapchatis. Tore jah? On küll, sest see päritavate telefoninumbrite arv võib olla üsna hiiglaslik ja võib sisaldada kelle iganes telefoninumbreid. Nimelt seda toredat võimalust on ära kasutatud ning 26 tunniga on võimalik pärida serverist kõikide võimalike USA telefoninumbrite kohta, kas nad kasutavad Snapchati ehk teada saada kõik USA Snapchati kasutajad vastavate telefoninumbritega (vastav uudisteartikkel: http://www.newyorker.com/online/blogs/elements/2014/01/the-attack-on-snapchat.html). Ja selline asi tehtigi tegelikult ära ning sisuliselt kogu nimekiri tehti avalikuks. Kõige tipuks oli selles ka muidugi Snapchati tegevjuhi kasutajanimi koos telefoninumbriga. Paras kah.

Tegelikult oleks siinkohal veel rohkelt, mida välja tuua, aga, kes seda kõike lugeda viitsiks.

Firma

Lisaks kohutavale äpile ja täiesti katastroofilisele süsteemile võib vaadata ka firmat ennast, aga mis firma see üldse olla saab.

  1. Snapchatil on töötajaid küll (allikate kohaselt 21 kuni ~30), aga isegi selline inimeste hulk ei suuda teha korralikku toodet. Võin surmkindlalt väita, et on üksikarendajaid, kes suudavad ka toimivama rakenduse ja parema süsteemi kokku panna, kui see rahvahulk, kes praegu Snapchatis tegutseb. Mida nad üldse teevad? Pole ju midagi enam arendada.
  2. Lipp lipi peal, lapp lapi peal. Vaadates kogu süsteemi äärmiselt kaootilist ülesehitust ja toimimist võib küll väita, et selle on valmist teinud paljud erinevad inimesed, kes igaüks on oma asja nokitsenud ja siis selle kuidagi teenuse külge ka putitanud. Igal pool API-s leiduvad ebakõlad, mis ei eksisteeriks, kui see oleks korralikult läbi mõeldud ja arendatud.
  3. Kus on kasum? Snapchat ei teeni ju sisuliselt sentigi: miski ei ole tasuline ning reklaame ega muud sarnast ka pole. Huvitav, kust tuleb palk ning kelle raha eest serverid töötavad…
  4. Kui palju me ikka väärt oleme? Snapchati on tahtnud ära osta Facebook 3 miljardi dollariga ning hiljem ka Google juba 4 miljardi dollariga, aga mõlemad pakkumised lükati tagasi. Kui väärtuslikuks nad ennast siis peavad, et nad ei taha vahetada nii kehva firmat ja toodet nii suure raha vastu. Päris kindlalt suudab Google asju paremini teha.
    Mõtle, kui sul oleks purgitäis sitta ja keegi pakuks sulle selle eest miljon eurot, kas sa võtaks pakkumise vastu ja saaks ratsa rikkaks või hoopis ütleks pakkujale otse näkku “Mina oma sitta selle raha eest ei müü!” lootuses, et ehk mõni loll pakub veel rohkem?

Kokkuvõtteks

Jätan igaühe enda otsustada, millisele arvamusele ta jääb, kuid minu jaoks on lihtsalt täiesti arusaamatu ja hoomamatu kui vigaselt on ühte lihtsat kontseptsiooni võimalik teostada. Tõenäoliselt on antud valdkonnas Snapchati puhul küll tegemist maailmaklassiga, mida lähemate aastakümnete jooksul saab olema raske ületada. Ja aitäh, et viitsisid antud šedöövrit üldse lugeda.

Harjutusi kõrgematest sfääridest

Kuidas leida kõige väiksem kaugus kahe Maa punkti vahel eeldusel, et Maa on kera?

Siinkohal põhjendamata teame, et neid punkte ühendav joon asub ringil, mille raadius on samas ka Maa raadius. Siis piisab meil teada nende punktide vahelist nurka maa keskpunkti suhtes ning me saamegi leida selle kaare pikkuse, mis neid ühendab. Seega tuleb leida vastab nurk:

Nagu tüüpiliselt on meil nende punktide laiuskraadid () ja pikkuskraadid (). Olgu need punktid siis kirjeldatud vastavalt nurkadega ja . Selle nurga leidmiseks saab kasutada vektorite skalaarkorrutist, seega leiame nende kahe punkti vektorid Maa keskpunktist. Maa raadiust pole hetkel tarvis arvestada, sest see ei muuda vektoritevahelist nurka.

x-telg läbigu Maa koordinaate 0°N 0°E ja 0°N 180°E. y-telg 0°N 90°E ja 0°N 90°W. z-telg 90°N 0°E ja 90°S o°E. Maa keskpunkt on koordinaatteljestiku punktis (0, 0, 0). Olles paika pannud teljestiku saame nüüd leida meie kahe punkti vektorite koordinaadid selles teljestikus. z-koordinaat on lihtne leida: . Vastav paralleeljoon on raadiusega , mis tähendab, et x-koordinaat on ning y-koordinaat .

Meie kaks punkti oleks selles teljestikus seega vektorid Maa keskpunktist:

Nende pikkused:

Nüüd nende vahelise nurga juurde:

, kus on vektoritevaheline nurk, mida me otsisime.

Nüüd saamegi kirja panna nende punktide vahelise lühima kauguse mööda Maa pinda, mis on vektoritevaheline kaar raadiusega R (Maa raadius), kui antud nurk on radiaanides:

Selle abil võimegi leida, et lühim kaugus Tartu ja Haapsalu vahel on 194.87km. Vot nii härra Reemann.

Kes siiani viitsis läbi lugeda võib end kiita, sest loo moraal on, et vektor on väga võimas asi.

The shooting room paradox

Kujutame ette järgnevat mängu. Üks inimene siseneb ruumi. Nüüd veeretatakse kahte täringut, kui mõlemal tuli 6 silma, siis ruumis olija lastakse maha ja mäng lõpeb. Kui mitte, siis see inimene lahkub ja asemele tuleb 9 uut inimest. Veeretatakse kahte täringut ning jällegi, kui mõlemal tuli 6, kõik 9 lastakse maha, kui mitte, siis mäng jätkub.

Iga kord tuleb ruumi 10 korda rohkem inimesi, st. 9, 90, 900, jne. Mäng käib edasi seni, kui veeretatakse mõlemal täringul 6, mis kunagi peab juhtuma. Eeldame, et meil on lõputult inimesi ja lõputu ruum.

Kui sind tuuakse sinna ruumi, kui mures peaksid sa olema? Mitte eriti – tõenäosus surma saada sõltub vaid täringutest, seega hukkamise tõenäosus on 1/36.

Hiljem su sõber saab teada, et sa sisenesid sinna ruumi, kui mures peaks ta olema? Väga – statistiliselt 90% inimestest, kes ruumi sisenesid, ka surid.

Kust selline erinevus?