Näkyvyyden lisääminen

Haluan kertoa muille mitä teen, millä työkaluilla ja samalla ajattelin löytää mahdollisuuden oppia tekemisen kautta. Motivaattoriksi valitsin tiedon julkaisemisen ja hyvien tiedonmurusten edelleen jakamisen.

Työpaikalla pidetty tiivis somevaikuttamisen kurssi antoi alkusysäyksen. Tajusin kuinka ammatilliset someprofiilini LinkedInissä ja Twitterissä viistivät pohjamutia. LinkedInissä olin sentään käynyt lukemassa kaverien postauksia ja joskus jakanut niitä, silti tulokset olivat … vähemmän mairittelevia.

Kehityksen seurantaa varten nappasin talteen maata viistävät tilastolukemat molemmista.

LinkedIn, 49/100 SSI

2018_09_20_LinkedIn_SSI

Twitter näytti ehkä kauniimmalta, koska olin postannut yhden hyvän työkaverin twiitin.

2018_09_20_twitter_statistics
Näistä lukemista pääsee mukavasti ponnistamaan ylöspäin. Lukuja tärkeämpänä pidän oman osaamiseni kehittymistä ja tiedon jakamista.

Mainokset

Microsoftin TechDays 2018

Miten tulevaisuuden sovelluskehityksessä hyödynnetään nykyisin käytössä olevia työkaluja? 

Maaliskuussa järjestetyssä TechDays 2018 -tapahtumassa tarjottiin vastauksia erityisesti tähän kysymykseen. Tilaisuudessa kuulin vakiintuneista kirjastoista ja niiden seuraavien versioiden herkullisista sisällöistä. Uusimmissa päristimistä löytyy herkullisia mahdollisuuksia ja lastentauteja, alpha-kuumetta.

Tilaisuus tuntui rehelliseltä menolta, asiantuntijalta asiantuntijalle. Kolme  teemaa nousi ylitse muiden: Tekoäly, tietoturva ja pilvipalvelut.

Jyväskylä1-1024x693

KONEÄLYN KÄYTTÄMINEN

Tekoäly nostettiin esiin kahdesta suunnasta: machine learning eli tilastotieteellinen data-analytiikka ja AI.

Machine learning on jo nyt todellisuutta, kun valmiilla työkalulla pystyy helposti analysoimaan kerättyä dataa ja sovittamaan sitä erilaisiin laskentamalleihin. Esimerkkiesityksessä arvioitiin paljonko maksaisi Ruotsissa 150 m2 asunto tietyllä alueella, kun tiedetään suurempien ja pienempien asuntojen arvo. Näytti helppokäyttöiseltä tilastotieteilijän työkalulta.

Toiselta suunnalta nousee AI. Se käsittelee tietokoneen mahdollisuutta oppia ja tunnistaa erilaisia malleja, kuten kuvien sisältöä, puhetta, vastata yksinkertaisiin kysymyksiin tai ryhmitellä tietoa. Jep, nämä kulkevat nimelläCognitive services. AI-demot näyttivät samalta mitä mikkisofta mainostaa aina. Kuvien tunnistaminen on jo tehty, siis kuvan hymyilyn aste, muut tunteet, sukupuoli, ikä, silmien väri ym. tulevat suoraan analytiikan jsonista, jos sellaista kaipaa.

Se on selvää, että kerättävän datan määrä kasvaa jatkuvasti. Tiedemiehet toivat meille tera- ja petabyten lisäksi exabyten, zettabyten ja yottabyten. Ihmiset eivät pysty käsittelemään näin valtavia datamääriä. Tekoälyn laskentavoima tarjoaa ratkaisua vastausten louhintaan.

Yksi keynote-puhuja kertoi visionsa tulevaisuudesta, jolloin suurin osa sovelluskehittäjistä tulee kirjoittamaan tekoälyyn liittyvää koodia, kymmenen vuoden kuluttua. Muut kuulemma putoavat markkinoilta. Turhauttavaa kuulla pelolla markkinoivia puheita, koska innovaatiot syntyvät kuitenkin innostuksesta ja parhaat kokemukset ovat seurausta positiivisesta tunnelmasta.

Periaatteessa ymmärrän trendin, erikoistutaan syvemmän osaamisen puolelle ja käytetään mahdollisimman paljon valmiita työkalupaketteja. Toisaalta löytyy paljon työpaikkoja, jotka painottuvat alakohtaiseen osaamiseen, mutta eivät vaadi syvällistä teknistä taitoa.

TIETOTURVAKATSAUS

Asiantuntijat Paula Januszkiewicz ja Sami Laiho pitivät jäätävän hyvät esitykset tietoturvasta. Januszkiewiczin kertoi, että heidän yrityksensä käyttämät kräkkäystyökalut ovat kaikkien saatavilla. Laiho puolestaan listasi yksinkertaisia keinoja, joilla pystytään nostamaan oman tietokoneen tietoturvan tasoa.

Molempien esityksistä kävi ilmi, että hakkerit ovat ryhdistäytyneet. Yritysten palvelinten hakkerointi tapahtuu paljon ammattimaisemmin kuin aiemmin. Heikoin lenkki voi löytyä useasta paikasta, joko inhimillisestä piirteestä tai laiskuudesta luoda yrityksen verkosta ja jokaisesta koneesta tietoturvallinen.

Tietoturvaan liittyvä liiketoiminta tulee selkeästi lisääntymään. Tämä on  ymmärrettävää, koska järjestelmät käyttävät vain muutamaa alustaa ja alustoihin liittyvää tietoa saa helposti netistä. Ymmärryksen kasvaessa tietoa voi käyttää monella tavoin.

Jyväskylä2-1024x529

PALVELUITA PILVEN KAUTTA

Microsoft mainostaa vahvasti palveluitaan sellaisilta tulokulmilta, joita ei löydy kilpailijoilta. Sain kuulla hehkutusta aika paljon parin päivän aikana. Valitettavasti en istunut kuuntelemassa niitä puheita, joissa kritisoitiin Azurea.

Microsoftin palvelut hyppäävät pilveen. Office-perhe pyörii siellä jo. Suurin osa uusista tekniikoista tuntuu tulevan pilvipalveluina. Tekoälypalvelut löytyvät pilvestä. Perinteiset web-softat voi heittää pilveen. Microsoft tarjoaa migraatiotyökalun ja migraation onnistumisen arvioimistyökalun, kun mennään perinteisestä arkkitehtuurista pilveen. Uusia lähtöjäkin esiteltiin, ihan alpha-kamaa ja toivottiin kontribuutiota julkisiin repoihin.

Meille kerrottiin useamman kerran kuinka kannattaa määritellä palvelut pilveen, siten etteivät ne kerrytä turhaan laskutusta. Ruuhkahuippujen aikaan palvelut voidaan skaalata ylöspäin useammalle koneelle, jolla saadaan lisää suorituskykyä palvelemaan pyyntöjä, mutta myös lisää kustannuksia. Kuormitushuipun jälkeen palvelut voidaan skaalata alaspäin, jolloin säästetään kustannuksista.Toki kannattaa myös miettiä miten toteuttaa sovelluksensa pilvessä: virtuaalikoneissa, suoraan palveluina tms. Siis sivuttiin tavanomaista PaaSiin ja SaaSiin liittyvää pohdintaa.

PILVEEN DEVAAMINEN

Pilveen menemisen helppous tuli myös vastaan useampaan kertaan. Tosin pilveen mentäessä ylläpitäjä jää vähän hämäräksi. Periaatteessa devaaja voi tehdä kaiken. Hän päräyttää monitoroinnit pystyyn softan kehityksen oheessa, saa vikatilanteissa viestejä ja normaalitilanteessa analysoi palvelun laadun. Erinomaista tietoa sovelluskehitystä ajatellen, mutta miten ajankäyttö?

Perinteisesti kehittäjät tekevät softan ja ylläpitotiimi jää monitoroimaan sovelluksen vasteaikoja sekä lokeja. DevOps-osaajat tietenkin tunkkaavat monitoroinnit kuntoon ja pistävät CI-putken paikoilleen. Kannattaako pitää erilliset DevOps-kaverit vai tekeekö kehittäjä kaiken? Microsoft tarjosi selkeästi DevOps-tekijöille luentosarjansa, joten toistaiseksi koodaaja pidetään Visual Studion äärellä.

Pilveen siirtymistä helpotetaan. Maakohtaisia rajoitteisiin yritetään vastata luomalla paljon uusia palvelinten sijainteja kartalle. Palvelut tuodaan helposti pilvestä käytettäviksi. Tekemistä yritetään selkeästi siirtää pilveä kohti.

Vanhana koodaajana seison kahden maailman välissä. Ymmärrän täysin vanhat toimijat, jotka haluavat pitää kaikki langat käsissään. He pystyttävät palvelinsaleja, ja on paljon tapauksia, joissa oma palvelinsali on ainoa vaihtoehto. Sen sijaan moni startup, kotiprojekti ja verkkosivuprojekti siirtyy sulavasti pilveen.

TUNNELMAT TAPAHTUMAN JÄLKEEN

Jyväskylä3-1024x751

Tapahtuman aikana tunsin hermoratani sähköistetyksi. Uusia ihania asioita tulee, vanhat ja toimivat tekniikat pyörivät iloisesti pilven nurkalla. Tehokasta, edullista ja kätevää.

Uskon useiden projektien muuttuvan sisällöltään herkullisemmiksi. Pelkkien verkkosivujen tai yksinkertaisten palvelujen tekijät tulevat vähenemään digitalisaation ensimmäisen aallon jälkeen. Työpaikallammekin selvitetään asiakkaan mahdollisuutta viedä palvelunsa pilveen tai tehdä hybridiratkaisu. Mielestäni lisäarvon tuottaminen on tärkeämpää. Miten kerättyä dataa pystytään hyödyntämään ja jatkojalostamaan tekoälyn avulla?

Omalta osaltani luon paremman huomisen koodaamalla.

Olen koodaaja.


Ensijulkaisu tapahtui Goforen blogissa.

Kuinka ujutan lokituksen JavaScriptin nuolifunktioon

Sain eteeni JavaScript frontin, joka on toteutettu ES6 + React Redux Forms -pinolla. Huomasin kaipaavani pientä lokitusta, eli perinteistä console.log(myProperty) -settiä, jotta näen toimiiko koodi siten, kuin aiempi kehittäjä sen tarkoitti.

Löysin seuraavanlaisen funktion, olen vähän yksinkertaistanut sitä esimerkin vuoksi:

const UiComponent = (locale) => (
  <CustomComponent locale="locale">
    {childern}
  </CustomCompnent>
);

Halusin tietää locale:n arvon kun se annetaan komponentille. No, omassa ongelmassani kyse oli eri sisällöstä, mutta locale toimii paremmin esimerkkinä.

Yritin itse ensin kirjoittaa koodin oikein, onnistumatta. JavaScriptille kun ei ole näppärää editoria, joka osaa kertoa miltä funktion pitäisi näyttää. Puhumattakaan VS Codesta, jota käytän.

Onneksi työkaverini osasi kertoa ratkaisun. Se kesti alle minuutin.

Ensimmäiseksi kirjoitetaan nuolen jälkeen return, että funktio palauttaa sen mitä haluat => return( ja ympäröidään koko paketti kaarisuluilla. Tadaa!

Laitoin vielä sisälle console.log:n jotta sain näkymään annetun parametrin arvon.

const UiComponent = (locale) => {
  console.log(locale);
  return (
    <CustomComponent locale="locale">
      {childern}
    </CustomCompnent> 
  );
}

Löydettyäni bugin perinteisen console.log-arvon avulla sain korjattua ongelman.

Nuolifunktioista voi lukea lisää vaikka Wes Bos:lta

 

SOLID-periatteet

OLYMPUS DIGITAL CAMERAOhjelmiston suunnittelemiseen löytyy useita arkkitehtuuriperiaatteita. Esittelen tässä lyhyesti SOLID-periaatteet. Ne vastaavat olio-ohjelmoinnin haasteisiin.

Ohjelmointiperiaatteet tulevat ajankohtaisiksi, kun samaan sovellukseen kirjoittaa vähän enemmän koodia tai koodia kirjoittaa useampi henkilö. Ymmärrettävyyden ja perusvirheiden välttämiseksi apuun kiiruhtavat arkkitehtuuriperiaatteet. Sehän on hassu sanahirviö.

SOLID-periaatteet tulevat usein vastaan luokkia kirjoittaessa. Avaan lyhyesti nuo viisi periaatetta. Wikipediasta voi lukea ensihätään kattavamman selostuksen ja sieltä löytyvät alkuperäiset lähteet, jos haluat uppoutua syvemmälle.

  • S, Single responsibility principle, muistuttaa yhden luokan vastaavan vain yhdestä asiasta. Esimerkiksi yksi luokka vastaa tiedon järjestämisestä oikeaan järjestykseen. Jos siihen livahtaa toinen vastuu, kuten erilaisen tiedon vertailu tai tiedon lähettäminen rajapinnan läpi, niin jokaista vastuualuetta varten kirjoitetaan erillinen luokka.
  • O, Open/closed principle, avoimen / suljetun luokan periaate. Luokan pitää olla avoin toimintojen ja ominaisuuksien laajentamiselle. Riippuen periaatteen tulkitsemisesta, periaate on aikanaan tarkoittanut abstrakin perusluokan perimistä toteuttavalle luokalle. Peritty luokka voi aina lisätä metodeja ja propertyjä ja siten olla vanhempana toimiva luokka on avoin laajentamiselle. Toisaalta vanhempana toimiva luokka on suljettu, koska sitä ei voi muuttaa.Myöhemmin samaa periaate haluttiin rajata toimimaan rajapintojen, eikä perinnän kautta. Hyvin määritellyt rajapinnat ovat suljettuja, mutta luokan toimintaa voi laajentaa uusilla toiminnoilla tai lisäämällä siihen toisen rajapinnan.
  • L, Liskov substitution principle (LSP), Liskovin korvattavuuden periaate määrittelee, että samaa alatyyppiä olevat oliot voivat korvata toisensa toteuttavassa koodissa. Perintähierarkiaa ajatellen tämä on nykyään itsestään selvää. Jos tytöt ja pojat ovat molemmat lapsia, niin lapsi-olioita sisältävät lista voi sisältää kumman molemman tyyppisiä olioita. Siis poika-olion voi korvata tyttö-oliolla, kun halutaan käyttää oliota lapsi-luokan kautta.
  • I, Interface segregation principle, rajapintojen hajoittamisperiaate kertoo, että yhden yleisen rajapinnan sijaan kannattaa luoda useita hyvin määriteltyjä rajapintoja. Näin ollen luokka tulee sisältämään vain metodeja, joita se käyttää, kun se voi toteuttaa hyvin määritellyn rajapinnan. Yleiset rajapinnat sisältävät turhia metodeja.
  • D, Dependency inversion principle, riippuvuuden kääntämisen periaate kutkuttelee olioiden perimistä. Vanhempana toimivan luokan ei pitäisi riippua lapsiluokkien toteutuksesta, vaan rajapinnoista. Abstraktioiden ei pitäisi riippua yksityiskohdista. Yksityiskohtien pitäisi riippua abstraktioista.Käytännössä suoran perimisen sijaan luokka sisältää propertyjä, joiden tyyppi on rajapinta. Esimerkiksi lapset-lista on kokoelma olioista, jotka toteuttavat ILapsi-rajapinnan. Tyttö ja Poika -oliot eivät peri suoraan lapsi-luokkaa, vaan ne toteuttavat ILapsi-rajapinnan.

Ihania periaatteita.

Miksi? Luettavan, ylläpidettävän ja testattavan koodin kirjoittamiseksi. Koodi on luettavampaa, kun koodin rakenne tulee samojen periaatteiden kautta. Ylläpidettävyys helpottuu, kun luokkien keskenäinen riippuvuus vähenee. Rajapinnat taas auttavat testattavan koodin kirjoittamista.

Riippumatta siitä, haluatko kirjoittaa testejä tai et, niin SOLID helpottaa kehittäjän elämää. Ennen kaikkea muiden kehittäjien elämää. Koodi kirjoitetaan muita kehittäjiä varten, kääntäjä osaa pyöräyttää siitä ohjelman koodin ulkoasusta riippumatta.

Keskitä vertikaalisesti kolmella koodirivillä

Työkaveri vihjasi törkeän mainion sivun, jossa kerrotaan miten UI-elementin voi keskittää vertikaalisesti kolmella koodirivillä. Taikasana on CSS.

.element {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
}

Saman voi kirjoittaa myös mixininä.

/* Mixin */
@mixin vertical-align($position: relative) {
  position: $position;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
}

.element p {
  @include vertical-align();
}

Elementti voi sijoittua pikseleiden väliin, jolloin elementin reunat voivat näyttää sumuisilta tai pehmeiltä. Määrittelemällä keskittämisen parin lisämääreen avulla ongelma ratkeaa.

.parent-element {
  -webkit-transform-style: preserve-3d;
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
}

.element {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
}

Korjauksen voi tehdä myös perspectiven avulla (ratkaisua ehdotti alkuperäisessä postissa roydukkey):

.element {
  position: relative;
  top: 50%;
  transform: perspective(1px) translateY(-50%);
}

Nauti keskittämisestä!

Underscore js – JavaScriptin muistilista

Frontin tekeminen ja JavaScript? Underscorejs ratkaisee huolesi tarjoamalla pikaisia vastauksia tyypillisiin ongelmiin. Tavallisesti ongelmiin liittyvät vastaukset joutuu kaivamaan API:sta tai StackOverflowsta, mutta JavaScriptin puolella ratkaisukokoelma helpottaa elämää.

Näyttökuva 2017-03-26 kello 15.58.37

Underscoren kautta löytää hyviä esimerkkejä tyypillisiin funktiokutsuihin. Positiivisena puolena voi mainita funktiot. Jos osaat funktionaalista ohjelmointia, JavaScriptin opetteleminen tätä kautta käy helposti. Mikäli et vielä ymmärrä funktioita, niin esimerkkien avulla opit lisää.

Osaamistasi saat lisättyä codewarsin kautta, kuten kerroin aiemmin.

Riemullista JavaScriptailua!

Code Wars, mahdollisuus oppia

Tutustuin codewarsiin työkaverini suosituksesta yhtenä syksyisenä päivänä. Hän löysi koodiharjoitussivuston, jossa editoria ja testejä voi ajaa selaimen kautta. Toisin kuin exersim.io tai vastaavissa palveluissa, codewarsilla harjoitteleminen onnistuu ilman kehitysympäristöä.

Harjoitusten tekeminen codewarsissa käy helposti. Harjoitusta kutsutaan nimellä kata.

codewars_kata
Kata eli harjoitus codewars.com:ssa.

 

Harjoituksen tehtävänanto selviää ruudun vasemmalta puolelta. Koodi kirjoitetaan oikeassa yläkulmassa näkyvään koodinäkymään. Kirjoitettu koodi ajetaan ”paikallisia” testejä vastaan Run Examples -painikkeella. Ne löytyvät Example Tests -otsikon alta. Näitä testejä voi myös muokata omien mieltymysten mukaan.

Lopullinen testi ratkaisulle tehdään ajamalla koodi Attempt-painikkeella. Ratkaisun toimivuus testataan yksikkötesteillä, joita ei näytetä käyttäjälle. Vain testien tulos näytetään. Toisinaan testien nimestä voi päätellä mikä testi epäonnistui. Järjestelmä sallii myös satunnaistettujen testien ajamisen, jolloin tehtävän luojan ei tarvitse kirjoittaa kaikkia testitapauksia käsin.

Ratkaistuasi tehtävän, saat vaikeusasteen mukaan tietyn määrän pisteitä. Helpoimmat testit saa ratkaistua muutamassa minuutissa, vaikeampien ratkaiseminen kestää tunteja.

Ratkaistuasi tehtävän, näet muiden vastaukset ja näistä oppii. Vastauksista voi merkata omasta mielestä parhaan ja nokkelan vastauksen. Vastauksista näkee kuinka paljon ohjelmoijien ongelmanratkaisukyky ja API-tuntemus vaihtelee.

codewars_stats
Stats-sivu kertoo mistä olet saanut pisteitä.

 

Olen kerännyt suurimman osan pisteistäni tekemällä harjoituksia. Pisteiden hankkimiseen käytetyt kielet näkyvät oikeasta laidasta ja prosenttiosuus kertoo kuinka paljon pisteitä on kerätty ennen seuraavaa tasoa.

Pisteet päivittyvät muutaman tunnin välein, kun palvelin ajaa ajastetusti pisteiden päivistyskriptit. Itsekin ihmettelin aluksi miksi pisteet päivittyvät viiveellä.

Jos teet vain harjoituksia, pisteillä ei ole merkitystä. Halutessasi voit kirjoittaa harjoituksia muiden ratkaistavaksi tai kääntää niitä kieleltä toiselle. Tällöin korkeampi pistemäärä sallii kevyemmän validointiprosessin ennen kuin kirjoittamasi harjoitus julkaistaan.

Yhteisöllisyyttä yritetään lisätä klaanien avulla. Käyttäjän tiedoissa voi antaa itselleen klaanin. Se on vain merkkijono. Kaikki jotka kirjoittavat saman merkkijonon, tulevat samaan klaaniin.

codewars_klaanit
Klaanit

 

Klaanijärjestelmä ei ehkä ole täydellinen, koska vaihdettuani klaanin, näen edelleen kaikki vanhan klaanini jäsenet.

Codewars on ehdottomasti paras palvelu ohjelmointiharjoitusten tekemiseen. Sen avulla voi ylläpitää kielen osaamista tai opetella uutta kieltä. Toki harjoitusten avulla oppii erityisesti kielen käyttöä, ei niihin liittyvien frameworkkien käyttöä.

Suosittelen kokeilemaan codewarsia, sen avulla voit löytää palon vanhaan rakkaaseen kieleen tai kehittää osaamistasi nykyisen kielen kanssa.