Kun ilmenee tarve tehdä muutoksia toimivaan koodiin esimerkiksi suorituskyvyn tai refaktoroinnin merkeissä, usein ensimmäinen ajatus on hypätä suoraan muokkaamaan olemassa olevaa koodia. Tavoite on suorituskykyisemmän tai helpommin ylläpidettävän koodin lisäksi luonnollisesti säilyttää toimivuus. Usein toimivuuden toteaminen on kirjoitettujen testien ja mahdollisesti käyttäjätestauksen varassa. Testikattavuus on harvoin täydellinen ja refaktorointia vailla oleva koodi voi olla lähtökohtaisesti huonosti testattu. Mitä kriittisempi ominaisuus, sitä tärkeämpää on varmistaa, että uudistettu toteutus antaa toiminnallisuudeltaan samat tulokset kuin alkuperäinen. Lue lisää

SLN-file_toolbox_Bitwise_blog

TL;DR

Tools for SLN file helpottaa Visual Studion solution-tiedostojen mergeämistä. git_config_slntools säätää gitin asetukset niin, että sitä voi käyttää git difftool– ja git mergetool -komentojen kanssa.

Itse asia

Oletko sinäkin kyllästynyt ratkaisutiedostojen yhdistämiseen (merging solution files)? Pomppivatko projektien kansiohierarkiaan liittyvät rivit ympäri tiedostoa, samaten koontiversiomääritykset (build configurations), ja onko perinteisellä yhdistämistyökalulla käytännössä mahdotonta selvittää, mitä tiedostolle on oikeastaan tapahtunut? Tuloksena on vain vahinkoa koontiversiomäärityksille tai projekteja, jotka pomppivat takaisin vanhaan ratkaisukansioonsa tai ratkaisun päätasolle. Lue lisää

User-interface-ScalaFx

Vaikka IT-alalla on siirrytty paljon web-käyttöliittymiin ja -järjestelmiin, on työpöytäsovelluksilla vielä paikkansa. Käyttöliittymien kehittämiseksi on muutamia varteenotettavia alustoja, muun muassa WPF ja Qt. JVM-puolella avuksi löytyvät Swing, SWT ja JavaFx. Halusin selvittää, löytyisikö minun mieluisimmalle kielelleni, Scalalle, riittävän hyvää vaihtoehtoa.

ScalaFx on DSL-wrapperi JavaFx:lle Scalalla. JavaFx on varsin valmis alusta, ja ScalaFx:ääkin on kehitetty vuodesta 2011. Kokeillakseni alustaa valitsin perinteistä ToDo-applikaatiota monimutkaisemman ohjelman, jotta joutuisin oikeasti perehtymään kirjaston ominaisuuksiin. Lue lisää

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ää

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ää