dwyl / learn-phoenix-framework

phoenix framework logo

Opi käyttämään Phoenix Frameworkia tohave fun rakentaa reaaliaikaisia web/mobiilisovelluksia
jotka ovat nopeita ”loppukäyttäjille”, luotettavia,skaalautuvia, ylläpidettäviä ja (helposti) laajennettavia!

Miksi?

Web-/mobiilisovellusten kehittäjinä meidän on hyödynnettävä muiden (todella älykkäiden) ihmisten tekemää työtä
sen sijaan, että rakentaisimme jatkuvasti asioita ”tyhjästä” koko ajan;siksi käytämme sovellusten rakentamiseen kehyksiä!

See: ”Top 10 Reasons Why Phoenix” (alempana tällä sivulla!)

Valittavanasi on monia viitekehyksiä (muutama ”suosittu” on mainittu alla kohdassa ”Kysymykset”).
Mutta jos menisimme sen mukaan, mikä on ”suosittua”, ratsastaisimme edelleen hevosilla (ja kärryillä) kaikkialla, eikä edistystä tapahtuisi.

Huomautus: kaikki Elixiriä koskevat ”Miksi”-syyt pätevät myös Phoenixiin!
tarkista ne: https://github.com/dwyl/learn-elixir#why

Mitä?

Websovelluskehys ilman kompromisseja!

Kehittäjän ilo

Missä tahansa teknologiaprojektissa suurin ”rajoitus” on ihmiset. ”Yrittäjällä”/”perustajalla” tai ”tuoteomistajalla” voi olla kaikki maailman hyvät ideat, jos he eivät pysty muuttamaan ideaa todellisuudeksi,se on merkityksetöntä.

(Pitäisikö minun välittää vertailuarvoista?

On selvää, että sinun pitäisi ajaa omat vertailuarvosi omalla laitteistollasi/pilvelläsi ja tehdä tietoon perustuvia päätöksiä sovelluksesi/tuotteesi vaatimusten perusteella, mutta …. kun luimme tilastot siitä, kuinka monta samanaikaista käyttäjää Phoenix-sovellus pystyy käsittelemään (suorilla WebSocket-yhteyksillä), olimme ällikällä lyötyjä!Se tarkoittaa, että voimme rakentaa reaaliaikaisen sovelluksemme (sovelluksemme) 90 % pienemmillä resursseilla.

Suorituskyvyn kohokohdat

  • Huomattavasti alhaisemmat viiveet ja pyyntöjen vasteajat kuin mikään muu! (kiitos Erlangin kevyiden prosessien ja erittäin tehokkaan verkon/viestinkäsittelyn)
  • 4x enemmän pyyntöjä sekunnissa kuin vastaavassa Node.js (Express.js) sovelluksessa.
  • 9x enemmän läpäisykykyä kuin Python 2.7:ään perustuvassa sovelluksessa. (estäminen on todella syvältä!)
  • 10x – 100x enemmän käsiteltyjä pyyntöjä kuin Ruby-on-Rails (riippuen sovelluksen tyypistä!)
  • Samanlainen suorituskyky kuin Go yhdellä palvelimella,mutta paljon yksinkertaisempi usean palvelimen samanaikaisuusmalli,joten horisontaalinen skaalautuminen useiden datakeskusten yli(”saatavuusvyöhykkeet”) on paljon helpompaa! (Erlang hallinnoi resursseja useille palvelimille/prosessoreille yhtenä sovelluksen ”laivueena” ja delegoi pyyntöjä/käsittelyä niille klustereiden/vyöhykkeiden välillä!)

Kaikki tämä tarkoittaa, että käytät huomattavasti vähemmän rahaa laitteistoon/pilvi-infrastruktuuriin, joten sovelluksesi/yrityksesi voi saada kilpailuetua kustannuksissa.

Jos olet onnekkaassa asemassa ja harkitset käyttäväsi jotakin paljon parempaa seuraavaan projektiisi, älä katso pidemmälle kuin Phoenixia!
Lue lisää: http://www.phoenixframework.org

Kuka?

Monet ihmiset/tiimit/yritykset käyttävät jo Erlang/Elixiriä ja Phoenixia ja näkevät ilmiömäisiä tuloksia!
Muun muassa: Adobe, BBC, Spotify, Pinterest, Discord (Gamer Chat App),Groupon (Fave), Lonely Planet, Brightcove, Slack …
See: https://github.com/doomspork/elixir-companies

Kenen pitäisi oppia Phoenix?

  • Henkilöt, jotka haluavat helpon tavan rakentaa sovelluksen, jossa on kaikki nykyaikaiset mukavuudet ”generaattoreista”,sisäänrakennettu tietokantarajapinta (”ORM”) ja ensiluokkainen WebSockets ”reaaliaikaiseksi” ja samalla legendaarinen luotettavuus.
  • Ryhmät, jotka tarvitsevat kehittäjien tuottavuutta tai Ruby-on-Railsia tai Djangoa,mutta haluavat vähemmän ”taikuutta” (eli haluavat ymmärtää, miten kaikki toimii!).
  • Yritykset, jotka haluavat kuluttaa 90 % vähemmän sekä kehittäjä- että infrastruktuurikustannuksiin, jotta voit palvella enemmän ihmisiä vähemmillä resursseilla.

Kenen EI pitäisi opetella Phoenixia?

  • Kuka tahansa, jonka on käytettävä ”suosituinta” kehystä tai kieltä (mistä tahansa syystä).
  • Yritykset, joilla on jo paljon vanhaa Java/PHP:tä/jotain muuta ja jotka eivät voi investoida aikaa jonkin uuden oppimiseen/käyttöön.
  • Kehittäjät, jotka haluavat ”työsuhdeturvaa” vikakorjaamalla epäluotettavaa koodia.

Miten?

Oletukset / ennakkoedellytykset?

Elixir

Ei voi rakentaa Phoenix-sovellusta tuntematta Elixiriä.
Jos olet uusi Elixirissä, ”tähditä” (kirjanmerkki) this repo(jotta voit palata siihen huomenna)
ja mene sitten osoitteeseen:github.com/dwyl/learn-elixiropettele Elixiriä kunnes sinusta tuntuu, että ymmärrät syntaksin,tule sitten takaisin ja opettele Phoenix!

Kohtaisesti sinun kannattaa keskittyä oppimaan Elixirin ”perusteet”:

  • datatyypit
  • atomit
  • mallien täsmäytys
  • kartat
  • funktiomäärittelyt
  • moduulit

Node.js

Phoenix käyttää Node.js:ää kokoamaanassetteja, kuten JavaScript- ja CSS-tiedostoja (Webpackin avulla).
Varmista vain, että sinulla on Node.js asennettuna. https://nodejs.org
Sinun ei tarvitse tuntea Nodea käyttääksesi Phoenixia.

Asennus

Jos olet jo oppinut jonkin verran Elixiriä ja asentanut Node.js:n, ensimmäinen askel Phoenixin käyttöönotossa on asennus!

Phoenixin dokumentaatio on uskomatonta, joten suosittelemme seuraamaan virallisia phoenixin asennusohjeita!

Sinun täytyy myös asentaa PostgreSQL, edellä linkitetyssä Phoenixin asennusoppaassa on tutoriaali siitä, miten se tehdään, mutta voit myös tutustua learn-postgresql repoomme ohjeiden saamiseksi ja nostaa ongelman, jos sinulla on ongelmia!

Vaikka JavaScriptin perusymmärrys voi joskus olla hyödyllistä, sinun ei tarvitse osata käyttää Nodea käyttääksesi Phoenixia.

Jos olet utelias, miksi he valitsivat Brunch.ion ”vaihtoehtojen” sijaan,
lyhyt vastaus on: Yksinkertaisuus & Nopeus!ks: http://brunch.io/docs/why-brunch
Huomautus: Phoenix v1.4 (julkaisematon tätä kirjoitettaessa)käyttää WebPackia asset-kokoamiseen,ks: CHANGELOG.md

Seuraava?

Tutustu ”Up and Running” (viralliseen) oppaaseen:https://hexdocs.pm/phoenix/up_and_running.html#contentup-and-running

Käytännön esimerkkejä?

Kun olet asentanut phoenixin ja noudattanut virallista ”up and running” -opasta,
palaa takaisin ja kokeile näitä aloittelijoille sopivia esimerkkejä:

  • Laskuri (reaaliaikainen jaettu laskuri Phoenix LiveView’n avulla):https://github.com/dwyl/phoenix-liveview-counter-tutorial
  • Todo List (vaiheittainen opetusohjelma, jossa näytetään, miten rakennetaan täysin toimiva TodoMVC-klooni):https://github.com/dwyl/phoenix-todo-list-tutorial
  • Chat (reaaliaikainen UI/UX WebSocketsin avulla):https://github.com/dwyl/phoenix-chat-example
  • Encryption (tietoturva):https://github.com/dwyl/phoenix-ecto-encryption-example
  • Append-only Log (miten tallennat sovelluksen tiedot):https://github.com/dwyl/phoenix-ecto-append-only-log-example

Book?

Suosittelemme, että ihmiset ostavat (tai lainaavat)@chrismccordin kirjan: ”Programming Phoenix”
katso: https://pragprog.com/book/phoenix14/programming-phoenix-1-4
phoenix-kirja-screenshot
Kirjoittajat ovat yksitellen vaikuttavia ja yhdessä he kattavat Phoenixin ymmärrettävästi niin kuin kukaan muu ei voi!Chris loi Phoenixin, José loi Elixirin ja Bruce on erittäin kokenut tekninen kirjoittaja, jolla on monia menestyksekkäitä kirjoja!
(eli: kirja on itsestään selvä valinta Phoenixin oppimiseen!)

Video Intro by José Valim (Elixirin luoja)

Jose Valim - Phoenix a web framework for the new web
https://youtu.be/MD3P7Qan3pw

ElixirConf 2016 -ElixirConf 2016 -esittelyvideo. Keynote by José Valim
https://youtu.be/srtMWzyqdp8

Resurssit

  • Elixir vs Ruby Showdown – Phoenix vs Rails: https://littlelines.com/blog/2014/07/08/elixir-vs-ruby-showdown-phoenix-vs-rails
  • Benchmark: https://github.com/mroth/phoenix-showdown

Top 10 syytä, miksi Phoenix

”Phoenix tarjoaa Ruby-on-Railsin tuottavuuden
Erlangin samanaikaisuuden ja vikasietoisuuden.”

  1. Kaikkien näiden (fantastisten) teknisten etujen lisäksi meitä viehättää Phoenixissa Suuri yhteisö ihmisiä ympäri maailmaa, jotka ovat innoissaan Phoenixin tekemisestähämmästyttävä työkalu web-sovellusten rakentamiseen!”.
    Hyvinvoivat ihmiset, jotka

  • auttavat sinua, kun jäät jumiin, selittävät kärsivällisesti asioita
  • vastaavat kysymyksiin (sekä ”noob” että ”edistyneille”) ja
  • keskustelevat avoimesti (sinun) parannusideoistasi.ks: https://elixirforum.com/t/phoenix-v1-3-0-rc-0-released/3947

  1. Phoenix käyttää Elixir-ohjelmointikieltä, mikä tarkoittaa, että sovelluksesi käännetään ja ajetaan Erlangin virtuaalikoneella ”BEAM”.
    Erlang on taistelussa testattu erittäin vikasietoinen VM, jota käyttävät monet tietoliikenneyritykset

  2. WebSockets (”kanavat”) on sisäänrakennettu kehykseen, mikä tarkoittaa, että ”reaaliaikaista” viestintää ja vuorovaikutusta sisältävien sovellusten rakentaminen on paljon helpompaa kuin käytännöllisesti katsoen millään muulla kehyksellä/alustalla!(ei tarvita mitään kolmannen osapuolen magic moduulia! kaikki tarvitsemasi asiat ovat jo valmiiksi valmiina, jotta voit palvella miljoonia ihmisiä!).
    katso: http://www.phoenixframework.org/docs/channels

  3. helppo asynkronisuus, koska kaikki ohjelmointi Phoenixissa (Elixirissä) on funktionaalista!Tämä tarkoittaa, että on todella helppoa abstrahoida hyödyllisiä toiminnallisuuksia, kuten pyyntöjen autentikointia, kirjaamista ja käsittelyä ”piplineiksi”, jotka ovat helposti ihmisen luettavissa! (ei tarvita kolmannen osapuolen async moduulia! ei hallinnoitavia ”lupauksia”, ”generaattoreita” tai ”observables”!!)

  4. Turvallisuus & Resilience Mindset on default.Salaus (SSL) on helppoa Phoenix/Elixirissä ja sekä SQL-injektion lieventäminen,Cross-site Scripting (XSS)ja CSRF-suojaus ovat sisäänrakennettuja (aktivoitu default:llä), joten ”aloittelevalle” ohjelmoijalle on käytännöllisesti katsoen mahdotonta ottaa käyttöön tämäntyyppisiä tietoturva-virheitä.

  5. Tarkkaa koodia ei voi aliarvioida! Voimme kirjoittaa paljon vähemmän rivejä kuin vastaavassa Node.js/Java/Rails/Go-sovelluksessa, mikä tarkoittaa, että kehittäjät ovat tuottavampia ja ylläpidettävää koodia on vähemmän!

  6. Testattavuus kaikkien ohjainten funktionaalisen ohjelmoinnin ansiosta!

  7. helppo käyttöönotto: http://www.phoenixframework.org/docs/heroku

  8. Nolla downtime Käyttöönotto on ilmaista! (jälleen Erlangin ansiosta). Erlang hallitsee ”elävien/aktiivisten” käyttäjien siirtymisen sovelluksesi vanhasta versiosta uuteen versioon ilman, että he edes huomaavat, että sitä päivitettiin/päivitettiin!!!

  9. Sovelluksesi sisäänrakennettu valvonta/hallinta Erlangin valvojien kautta tarkoittaa, että tiedät tarkalleen, miten sovelluksesi toimii, mitkä osat ovat kaatuneet/käynnistyneet uudelleen ja miksi! Tämä on ominaisuus, josta maksamme (paljon) muissa kehyksissä ja täällä se on ilmainen!!!

Keksitkö toisen syyn, miksi Phoenixin käyttö on mahtavaa?!
Jaa ajatuksesi tässä ketjussa:https://github.com/dwyl/learn-phoenix-framework/issues/13

Kysymyksiä?

Pitääkö minun opetella Elixir ennen Phoenixin kokeilemista/käyttöä?

Kyllä. ks: https://github.com/dwyl/learn-elixir

Pitääkö minun osata Erlangia käyttääkseni Elixir & Phoenixia…?

Ei. Voit aloittaa Elixirin opettelun/käytön jo tänään ja kutsua Erlangin funktioita tarvittaessa,
mutta sinun ei tarvitse osata Erlangiabefore voit käyttää Phoenixia!

Mutta Phoenix ei ole ”valtavirta” … Pitäisikö minun/meidän käyttää sitä…?

On monia web-sovelluskehyksiä, joista voit/voimme valita:https://en.wikipedia.org/wiki/Comparison_of_web_frameworks
Miksi kukaan siis valitsisi kehyksen, joka on kirjoitettu ohjelmointikielellä, joka ei ole ”valtavirtaa”…?

Miksi emme enää käytä Hapi.js:ää…?

Tämä on väärää tietoa. Käytämme edelleen Hapi.js:ää useissa projekteissa, joissa se on tarkoituksenmukaista.
Tämä sisältää useita asiakasprojekteja ja sisäisiä dwyl-sovelluksia/työkaluja.

Päädyimme käyttämään Phoenixia uusissa projekteissamme näistä yksinkertaisista syistä:

  • Elixir on mukavampi kieli kuin JavaScript.#LessIsMore #LessButBetter #SmallIsBeautiful #SyntaxMatters
  • JS voi olla funktionaalinen, kun taas Elixir on (aina) funktionaalinen!Erottelu tekee eron!
    ”Funktionaalisella” ohjelmoinnilla,ohjelmia on paljon helpompi miettiä kirjoittaessasi/ylläpitäessäsi niitä!
  • Elixir käyttää Erlang VM:ää, joka on paljon tehokkaampi/tehokkaampi kuin ”V8”
  • Ellixir skaalautuu paljon helpommin moniytimiseen monipalvelin-monitietokeskuskäyttöön kuin Node.js
    (tai melkein mitä tahansa muuta!!)

Uusia projektejamme varten tarvitsemme monen datakeskuksen vikasietoisuutta!
saamme sen ”ilmaiseksi” käyttämällä Erlang -> Elixir -> Phoenixia!!!

Meidän mielestämme Hapi.js on edelleen ”paras” Node.js-kehys ja tulemme continue käyttämään ja suosittelemaan sitä
ihmisille, jotka tarvitsevat yksinkertaisia sovelluksia, jotka skaalautuvat ja joita on helppo ylläpitää.
katso: https://github.com/dwyl/learn-hapi

Myös käytämme edelleen JavaScriptiä kaikissa AWS Lambda -mikropalveluissamme,se ei tule muuttumaan.
Ne ovat yksinkertaisia, tehokkaita ja skaalautuvat todella hyvin!
ks: https://github.com/dwyl/learn-aws-lambda

Mitä ”vikaa” on Railsin tai Djangon käytössä?

Alkuperäiset ”tuottavat” web-kehykset olivat ”Ruby-on-Rails” ja ”Django” (python) vuonna 2005!
(Käytimme molempia ”matkallamme” jonkin aikaa ja voimme puhua kummankin eduista.)

Railsin tai Djangon käytössä ei ole ”mitään väärää”.
Meistä molemmille kehyksille on edelleen paljon käyttötapauksia.
Me vain tiedämme, että on (paljon) helpompaa rakentaa ”reaaliaikaista”
Phoenixilla, koska ”Channels” (WebSockets) on sisäänrakennettu,
ja Elixir/Erlang rinnakkaisuus on aivan eri juttu!
Erlang (ja siten Phoenix) voi käsitellä miljoonia samanaikaisia käyttäjiä yhdellä palvelimella,
kun taas Rails/Django palvelin voi käsitellä vain muutamia tuhansia (parhaimmillaan!)
jos sovelluksesi palvelee vain muutamaa tuhatta ihmistä kerralla, niin olet kunnossa!!

Me rakastamme sitä, että Erlang käyttää ”kevyitä pitkäikäisiä” prosesseja,
mikä tarkoittaa, että voimme liittää miljoonia (IoT)-laitteita …IoT:lle Erlang on (kiistatta) vastaus!
Yksinkertaisempiin web-sovelluksiin, joissa odotetaan vain muutamaa käyttäjää päivässä, Rails/Django ovat edelleen käyttökelpoisia.

Mutta miksi tehdä kompromisseja, jos ei ole pakko?
Jos voit saada Teslan Ford Focuksen ”hinnalla”,miksi et saisi!!!?
Miksi tyytyä hyvään, kun voi helposti saada/käyttää parasta?

Mutta GitHub käyttää silti Railsia … Varmasti GitHub on ”skaalautuva”?

Kyllä, GitHub käyttää edelleen Railsia web-sovellukseensa/sivustoonsa.
Mutta kysy keneltä tahansa GitHubin ydintiimistä, valitsisivatko he (jos heille annettaisiin mahdollisuus aloittaa alusta)Railsin
rakentaakseen GitHubin vuonna 2017, ja katso, kuinka moni heistä sanoo ”kyllä, tietenkin”(naama suorana…)!

Also, GitHub tekee paljon asioita skaalautuakseen Railsilla taustalla.
Ja monet heidän uudemmista (asiakaspuolen) ominaisuuksistaan on kirjoitettu JavaScriptillä!ks. esim: https://github.com/github

Lopputulos on: mikä tahansa voidaan saada skaalautumaan ”DevOpsin” avulla,
mutta Phoenix saadaan skaalautumaan defaultMikäli Erlang (keksittiin) skaalautumaan!

Miksi EI SAA käyttää Go:ta?

”On olemassa kahdenlaisia ohjelmointikieliä – niitä, joita kukaan ei käytä, ja niitä, joista kaikki valittavat” ~ Bjarne Stroustrup(creator of C++)

Go on erittäin suosittu. Suurelta osin siksi, että Google ”sponsoroi” sitä.
Sen oli tarkoitus yksinkertaistaa (korvata) C++ ja Java Googlen sisällä …
ja suurimmaksi osaksi se on onnistunut!

Me todella pidämme Go:sta. Se oli meidän ”numero kaksi” valinta, kun päätimme, mikä ohjelmointikieli
(Elixirin jälkeen) meidän ”post JS stack”…Päätös käyttää elixir minkään else sijasta oli helppo:

  • Elixir on funktionaalinen (paljon yksinkertaisempi lukea/kirjoittaa/ylläpitää/laajentaa)
  • Elixir-funktiot koostuvat todella tyylikkäästi ”pistokkeiksi”/”putkistoiksi”
  • Tieto on muuttumatonta, mikä tekee sovelluksen tilasta ennakoitavissa olevan (ei arvailua!).)
  • Tyypit ovat dynaamisia ja johdettuja (niitä ei tarvitse julistaa manuaalisesti)mutta on olemassa sääntöjä, jotka yksinkertaistavat asioita ja kääntäjä tarkistaa ne antamalla asianmukaisen varoituksen.
  • Erlang tekee hajautetuista sovelluksista paljon helpompia ja suunnitelmamme on rakentaaIoT-järjestelmiä, jotka tarkoittavat monien (miljoonien) laitteiden liittämistä toisiinsa pysyvillä yhteyksillä, Erlang on luotu tätä varten!
  • Phoenix sisältää monia hyödyllisiä asioita out-of-the box, mukaan lukien useita tietoturvaominaisuuksia, joita useimmat ihmiset eivät edes ajattele.

Lisälukemista:

  • Miksi Go ei ole hyvä: http://yager.io/programming/go.html
  • Go Web Frameworks: https://medium.com/code-zen/why-i-don-t-use-go-web-frameworks-1087e1facfa4
  • Miksi kaikki vihaavat Go:ta: https://npf.io/2014/10/why-everyone-hates-go/(click-bait title, some valid points…)
  • Discussion: https://www.reddit.com/r/elixir/comments/3c8yfz/how_does_go_compare_to_elixir

(`help wanted` laajentaa tätä vastausta…)

Miksi EI käytä Scala + Play Frameworkia sen sijaan…?

Jos olet jo tottunut kirjoittamaan Java:ta tai ottamaan käyttöön JVM:ää,Play Framework on erinomainen valinta: https://www.playframework.com
Scala on hyvä ohjelmointikieli ja kaikkien pitäisi opetella sitä!https://www.scala-lang.org/what-is-scala.html

Olemme käyttäneet Playta muutaman kerran (ennen kuin otimme käyttöön Node.js:n)ja pidimme siitä todella paljon!
Mutta Scala on ”keittiöallas” (multi-paradigma)ohjelmointikieli, jonka avulla ihmiset voivat käyttää ”kaikkea Javaa” …
Meistä Scalan ”Java-yhteensopivuus” tarkoittaa, että on ”liian helppoa” sallia monimutkaisuus koodipohjaan. Erityisesti ”OOP-mutaatio” …

Miksi me (DWYL) emme enää käytä ”Playta” uusissa projekteissa?Ensinnäkin, siirryimme Hapi.js:ään (Node.js) muutama vuosi sitten, koska se oli ”kevyempi” ja mahdollisti pienten ohjelmien kirjoittamisen, jotka käyttivät vain muutaman megan RAM-muistia (kun Play-sovelluksemme vaativat paljon resursseja)..!Oletko koskaan kokeillut ajaa Scala-sovellusta ”perus” kannettavalla tietokoneella, kuten Chromebookilla…?)

Yhteenveto ”syistä” Phoenixille Playn sijasta:

  • Väitämme, että Playlla/Scalalla on edelleen paljon päteviä käyttötapauksia.
  • Elixir on paljon yksinkertaisempi kuin Scala.
  • Erlang VM on paljon parempi samanaikaisuudessa kuin JVM.
  • Me rakastamme sitä, että kaikki data on muuttumatonta Elixirissä.
  • Me rakastamme sitä, kuinka vähän resursseja tarvitaan Phoenix-sovelluksen pyörittämiseen(esim Raspberry Pi:llä!!!).)

Olemme vain sitä mieltä, että meidän projektissamme Erlangin samanaikaisuusmalli toimii paremmin ja funktionaalista koodia, joka muuttaa muuttumattomia tietoja, on helpompi testata ja ylläpitää.

Jos sinulla on todisteita siitä, että ”Scala on yksinkertaisempi ”haluaisimme kuulla sinusta!
Kerro meille: https://github.com/dwyl/learn-phoenix-web-development/issues

Miksi et käyttäisi Haskellia?

Jos pidät funktionaalisesta ohjelmoinnista (FP) niin paljon, miksi et käyttäisi Haskellia?

Kysy lisää: https://github.com/dwyl/learn-phoenix-framework/issues

Vastaa

Sähköpostiosoitettasi ei julkaista.