Marmorikuulat-marble-glass

Reaktiivisista laajennuksista on Javassa useampia kirjastototeutuksia. Reactive Streams sisältää rajapinnat, jotka on tarkoitettu erilaisten reaktiivisten kirjastojen yhteistoimintaan. ReactFX on reaktiivisten laajennusten toteutus JavaFX-käyttöliittymäkirjastolle. Ehkä merkittävin on kuitenkin Netflixiltä lähtöisin oleva RxJava, joka perustuu Microsoftin alkuperäiseen Rx.NET-kirjastoon. RxJava on myös se kirjasto, mihin tämä kirjoitus keskittyy. Tässä esitellään RxJavan ohjelmointirajapintaa ja sen peruskäyttöä. Esimerkkinä käytetään JavaBean-määrittelyn mukaisen luokan sovittamista Rx:ään. Lue lisää

Dokumentointi-Bitwise-blog

Erilaisissa projekteissa tulee poikkeuksetta vastaan tilanne, jossa projektin aikana opittuja asioita pitäisi dokumentoida. Dokumentti voi olla tarkoitettu itselle muistiinpanoksi (”näin aloitat uuden kirjaston tekemisen”), projektin muille/tuleville jäsenille hyödyksi (”kannattaa käyttää tässä kirjastoa X tai muuta vastaavaa”) tai tiedoksi jopa laajemmalle joukolle (”kun olet rakentamassa palvelua A, muista ottaa huomioon nämä asiat”). Dokumentaatio voi koskea projektin yleisiä käytäntöjä tai sitten esimerkiksi tuotettua koodia. Lue lisää

ReactiveUI on reaktiivisia laajennuksia (reactive extensions, Rx) käyttävä kirjasto .NET ympäristöjen UI-kehitykseen (Xamarin.iOS, Xamarin.Android, Xamarin.Mac, Xamarin Forms, WPF, Windows Forms, Windows Phone 8, Windows Store ja Universal Windows Platform). Kirjasto tarjoaa reaktiivisen mallin käyttöliittymien ja käyttöliittymämallien (ViewModel) ohjelmointiin. Lisäksi kirjastossa on aputyökaluja, jotta reaktiivinen lähestymistapa toimisi nykyisten UI-kirjastojen kanssa ja käsin kirjoitettava boilerplate-ohjelmakoodi vähenisi. Tässä tutustutaan ReactiveUI-kirjastoon C#- ja WPF-ympäristössä. Taustatiedoiksi riitävät kevyt WPF- ja RX-tuntemus. Lue lisää

Laadukas ohjelmistokehitys vaatii järjestelmällisyyttä, pikkutarkkuutta ja huolellisuutta. Potentiaalisia bugeja voi olla millä tahansa koodirivillä, ja nykyaikaisissa isommissa ohjelmistoissa on helposti satoja tuhansia tai jopa miljoonia rivejä koodia. Yksikin bugi voi aiheuttaa ohjelman kaatumisen, tietojen katoamisen, tietovuodon tai minkä tahansa muun ei-toivotun toiminnallisuuden. Erittäin epäonnisessa tapauksessa ohjelman väärä toiminta voi johtaa esimerkiksi potilaan kuolemaan (esim. Therac-25) tai lentokoneen putoamiseen (esim. 2015 Seville Airbus A400M Atlas crash). Lue lisää

Uusia ohjelmointikieliä tulee nykyään tasaiseen tahtiin. Valtaosa niistä ei tuo mitään mullistavaa uutta pöydälle. Hiljattain Mozillan suojista pinnalle noussut Rust on kuitenkin kerännyt mielenkiintoa varsin paljon. Vaikka Rust ei tuo mukanaan mitään mullistavaa uutuutta ominaisuuksien puolesta, kerää se monia nykyaikaisia ominaisuuksia varsin toimivaksi kokonaisuudeksi. Mikä erityisesti tekee tästä kielestä mielenkiintoisen on sen käyttökohde. Nykysuuntauksesta poiketen, Rust on virtuaalikoneeton tehokas järjestelmätason kieli, joka pyrkii haastamaan C:n ja C++:n valta-asemaa. Lue lisää

Aloittaessasi uudessa projektissa tulee usein jo ensimetreillä vastaan tyypillinen ongelma: arvokasta työaikaa tuhlaantuu kehitysympäristön pystyttämiseen. Sama tilanne on edessä esimerkiksi uuden koneen kanssa. Jos hyvin käy, on tarvittavat ohjelmistot versioineen ja konfiguraatioineen dokumentoitu jonnekin. Hyvässä lykyssä tämä dokumentaatio on myös ajan tasalla. Silti tarvittavien ohjelmistojen etsimiseen, asentamiseen ja konfigurointiin saattaa mennä yllättävän paljon aikaa. Huonoimmassa tilanteessa, eli dokumentaation puuttuessa kokonaan, pitää vielä lisäksi ensimmäisenä selvittää tarvittavat ohjelmistot esimerkiksi työkavereita haastattelemalla tai yrityksen ja erehdyksen kautta. Lue lisää

Tässä kirjoitussarjassa käsittelen C++:aan liittyvää tietoutta, joka mielestäni kuuluu ammattimaisen C++-ohjelmoijan yleissivistykseen. Näin pystyy hyödyntämään kielen ominaisuuksia ylläpidettävän, luettavan ja vähän virheitä sisältävän ohjelmiston tuottamiseen, sekä pystyy lukemaan ja ylläpitämään näihin ominaisuuksiin pyrkivää C++-koodia. Käsittelen kielen ominaisuuksia, standardikirjaston osia sekä idiomeja ja muita sääntöjä ja käsitteitä.

Osan tietoudesta luulen olevan laajastikin tunnettua C++-ohjelmoijien keskuudessa; osa voi olla vieraampaa, mutta kaikista näistä tekniikoista on niin paljon etua, että ne mielestäni kuuluvat C++-ohjelmoijan sivistykseen. Lue lisää

Jo esikoulussa lapsille opetetaan, kuinka yhteiselo muiden kanssa on välillä hankalaa – varsinkin, kun tapellaan samoista leluista. Samalla kantapään kautta opitaan, että kannattaa olla joko itsekäs tai, vastapuolen koosta riippuen, antaa suosiolla lelu sitä pyytävälle. Lopputuloksena on, että pienimmät ja heikoimmat sortuvat elon tiellä ja jäävät aina ilman leluja, ellei täti tai setä ole auttamassa. Fiksuimmat tosin huomasivat, että yhdessäkin on mahdollista leikkiä samalla lelulla. Lue lisää

Reaktiiviset laajennukset (Reactive Extensions, rx) ovat kirjastoperhe asynkroniseen ohjelmointiin. Siitä on kirjastototeutuksia käytännössä kaikille kielille ja alustoille, esimerkiksi JavaScript, Java, C#, C++ ja Swift. Rx:n voi toteuttaa mille tahansa kielelle, mutta sen helppo käyttö edellyttää kieleltä tukea lambdoille ja korkeamman kertaluvun funktioille. Tässä käsitellään ohjelmointikieliagnostisesti rx:n käsitteitä ja toimintaa.

Rx laajentaa tarkkailijasuunnittelumallin yksittäisistä toisistaan irrallisista tapahtumista tapahtumasekvenssiksi. Tämä sekvenssi voi olla loogisesti loputon, keskeytyä virheeseen tai päättyä. Lue lisää

Responsiivisuus on termi, joka on viime vuosien aikana noussut erilaisten web-sivustojen ja -sovellusten toteutuksen avainsanaksi. Erityisesti webin voimakkaasti lisääntynyt käyttö mobiililaitteilla on korostanut sitä aiempaa enemmän. Käyttöliittymäsuunnittelun kannalta yleisenä määritelmänä responsiivisuudelle voidaan pitää sivuston mukautumista käytetylle päätelaitteelle. Käytännössä responsiivisuuteen liittyy kuitenkin useita eri näkökulmia ja lähtökohtia, joista responsiivisuutta voidaan lähestyä.

Responsiivisuuden pohjana on sivun rakenne, jonka tulee mukautua eri kokoisten laitteiden näytöille. Lue lisää