Islanti Thingvellir

  Pääsivulle  |  TIETOTEKNIIKAN PÄÄSIVULLE

Ohjelmointi

Visual Community 2019 (Windows)

Community 2019 on minulla kehitystyökaluna eri koneissani, joissa on W8.1 tai W10. Sillä teen uusia ja kehitän vanhoja sovelluksia. Samalla kehitystyökalulla päivitän myös sovelluksia, joita on tarkoitus käyttää W7:ssa tai XP:ssä, jossa dotnet-framework-vaatimukset ovat varhaisemmat. Koodaan C#:lla käyttäen WPF:ää käyttöliittymän rakentamisessa. Tämä on erittäin tehokas yhdistelmä koodaukseen. Aiempi työkalu käyttöliittymän tekemiseen oli kömpelö ja muutosten tekeminen virhealtista.

Sovelluskehitysympäristön käyttö ristiin 32- ja 64-bittisissä koneissa toimii. Ei ole ongelmaa, kun kohdejärjestelmäksi on valittu x86 ja sovellusta sitten käyttää myös 64-bittisessä koneessa.

Tekemäni Albumi-sovellus on monipuolinen tietokantasovellus valokuva- ja videoklippiarkiston hoitamiseen. Valokuvia ja videoklippejä säilytetään tavallisessa kansiorakenteessa kiintolevyllä, ja valokuvaa selittävät tiedot ovat tietokannassa.

Kasvienkeruuharrastukseni tueksi olen tehnyt Herbaario-sovelluksen. Se on tarkoitettu kasvien kerääjän apuvälineeksi ja varsinaisen näyte- ja valokuvakokoelman lisäksi. Kasveja koskevat tiedot säilytetään tietokannassa ja valokuvat ovat kiintolevyn kansiorakenteessa. Se avulla voidaan katsoa luetteloita, kuvia ja kirjoittaa muistivihkoja. Sovelluksen täydelliseksi käyttämiseksi on tarpeen ottaa digikuvia kasveista, skannata valokuvia tai negatiiveja, skannata näytteitä ja siirtää kyseiset tiedostot ohjelmiston käyttöön.

Xcode (macOS)

Macissä käytän ohjelmointiympäristönä Xcode:a. Se on ilmainen, monipuolinen, ja luultavasti yleisimmin macOS- ja iOS-sovellusten tekemistä varten käytetty sovellus. Täällä joitain vinkkejä sen käyttämiseen.

Xcode päivittyy usein ja joskus päivitetyt versiot ovat olleet julkaisun jälkeen bugisia. Joten välillä on ollut 1-2 kk jaksoja, jolloin on pitänyt olla varovainen koodatessaan. Mutta ylipäätään tämä on kelpo työkalu.

Monista sovelluksistani olen tehnyt myös Macillä toimivan version. Xcode on siinä kätevä, että siinä voi kehittää myös vanhempaan macOS-versioon tarkoitettua versiota sovelluksestaan.

SwiftUI

Vuoden 2020 syksyllä perehdyin Applen uuteen tapaan tehdä sovellusten käyttöliittymiä. Tähän asti käytössä ollut xib (Xcode Interface Builder) on ollut kömpelö, samoin sen uudemmat kokeiluversiot. SwiftUI toi käyttöliittymän rakentamisen tehokkaaksi, samoin esitettävien muuttujien hallinta on todella tehokasta. Erityistä "interface builderia" ei tarvita, vaikkakin sellainenkin on apuna käytettävissä. Herbaario- ja Albumisovellukseni ovat nyt SwiftUI:lla tehty macOS BigSur:ssa.

Objective-C ja Swift

Macin hankittuani perehdyin uuteen ohjelmointikieleen ja työkaluun: Objective-C ja Xcode. Itse kielen perusidea on sama kuin C#:n eli suunnilleen sanottuna rakennetaan luokkina toimiva näyttöjä, jotka kutsuvat toisiaan. Mutta koodin yksityiskohdat ovat aivan erilaiset. Eipä C#-koodia juuri voi kopioida Objective-C:ksi. On ajateltava, että Objective-C:ssä lähetetään viestejä objekteille.

Lähdekoodin saa tehtyä Swiftillä tiiviimmäksi kuin C#:lla niin, että koodin luettavuus on vastaavalla tasolla. Xcode ohjelmointityökaluna on tehokas, mutta sen hallinnan opettelu oli vaivalloisempaa kuin Visual Communityn.

Applen kesäkuussa 2014 julkaisema ohjelmointikieli Swift on yksinkertainen, nykyaikainen ja luonteva. Vain merkkijonojen (Stringien) käsittely on vielä puutteellista, mutta kieleen voi itse todella helposti tehdä laajennuksia. Mutta on kielessä myös omintakeisia koodirakenteita, joiden toimintaa ja lukemista pitää oikeasti pohdiskella, kuten Completion handler (closure) ja muut asynkroniset rakenteet. Apple on rakentanut kieleen mukaan täydellisen tuen Cocoa-, Foundation- ym. kirjastoihin, joten Objective-C-ohjelmoija pääsee melko helposti tekemään Swift-sovelluksia. Olen tehnyt Herbaario- ja Albumi-sovelluksistani myös Swift-version, alku oli hankalaa mitä ei vähentänyt Xcode-version 6.1 bugisuus. Nyt Swift on versiossa 5.0 ja Xcode versiossa 10.2.1.

Swift kehittyy hyppäyksittäin. Monet hyppäykset ovat olleet "code breaking" -tyyppisiä, eli edellisen version ohjelmakoodi ei sellaisenaan enää kelpaa. Viimeisimpiä hyppäyksiä varten Apple oli rakentanut Xcode-sovellukseen työkalun, joka muuntaa automaattisesti ja käyttäjän kanssa kommunikoiden vanhan koodin uudeksi lähes kaikilta osin. Hyppäys Xcode 8.1:ssä Swiftin versiosta 2.3 versioon 3 tuotti koodinkorjaustöitä muutamaksi päiväksi. Minun Albumi-sovelluksen lähdekoodissa on yhteensä 16000 riviä, ja automaattikonversio teki muutoksia 785 riviin. Kun sen jälkeen käänsin koodin, kääntäjä löysi 90 virhettä ja 375 varoitusta. Näissä oli erilaisia virhe- ja varoitustyyppejä vain parikymmentä, joten korjaamiseen riitti hyvin muutama päivä. Lopputulos ei heti toiminut Xcoden käyttöliittymäeditorin bugin takia, vaan Xcoden korjausta piti jäädä odottamaan.

Cocoa- ja AppKit-kirjastoja on Swiftin myötä kehitetty aika lailla, joten koodipätkien muunnos vanhemmista Objective-C-lähdekoodeista on hidasta, ja monesti kannattaakin aloittaa uudestaan suoraan Swiftillä.

Objective-C:llä Macin Cocoa-ympäristöön Xcoden avulla tehtävän, ikkunoita käyttävän sovelluksen saaminen toimimaan oli alussa hankalaa sekavan ja puutteellisen dokumentoinnin takia. Netistä löytyy runsaasti aineistoa, mutta niistä ei yleensä selviä mihin Xcode-versioon, Objective-C-versioon ja roskienkeruutapaan koodiesimerkki tai neuvo perustuu. Näissä asioissa Windows-koneessa Visual Communityn avulla, Microsoftin selkeitä käsikirjoja käyttäen aloittelijan on helpompi saada sovelluksensa toimimaan.

C-kieli

Opettelin C-kielen 1980-luvulla tehdessäni ohjelmia Amigalle, Unix-keskuskoneelle ja PC:lle. Kirjahyllyssäni oleva Kerninghan ja Ritchin sormeilusta mustunut peruskirja on edelleen ajoittaisessa käytössä, koska sekä C#, Objective-C ja Swift perustuvat sille.

Vanhat lähdekoodini ovat edelleen tallessa.

Java

2000-luvun alkupuolella koko ohjelmointiharrastukseni oli Windows-koneessa Java-ympäristössä noin kolme vuotta. Enimmäkseen kirjoitin koodia tekstieditorissa ja käänsin komentokehotteessa. Välillä kokeilin JBuilderia, mutta luovuin siitä pian.

Java oli puhdasta C-kieltä, mutta siinä rakennettiin luokkia ja olioita. Roskienkeruuta ei ollut, joten ohjelmoinnissa oli oltava huolellinen. Tein monia ohjelmia: Herbaarion seuraavat versiot, musiikkirelaatiotietokanta (data tekstitiedostoissa), osoitekannan muunnos, kuvatiedostomuunnoksia (ilbm, iff, gif, colorcycle), Amigan info-tiedoston sisällön hyödyntäminen, matriisilaskentaa jne.

Vuonna 2020 kokeilin huvikseni vieläkö vuoden 2000 Javalla tehty Herbaario-sovellus toimisi. Ja toimihan se! Näytöissä oli pieniä ongelmia, mutta kaikki toiminnallissuudet toimivat oikein. Niinpä tein sovelluksesta vuoden 2020 version käyttämään samaa tietokantaa kuin C#- ja Swift-sovellukseni. Vanha lähdekoodi ei kelvannut lainkaan Eclipse:lle, jota käytin sovelluskehittimenä. Koodasin kaiken alusta, mutta suurelta osin C# oli hyvä lähde, paitsi käyttöliittymän koodaukseen.

Selainsovellukset

Omat kotisivuni olen tehnyt periaatteella "yksinkertainen on toimivaa ja luotettavaa". Joten sivuilla en ole testannut mitään html-kielen, php:n tai javascriptin hienouksia. Sen sijaan omalla työasemalla minulla on kansioita, joissa olen monenlaista kokeillut ja testannut eri selaimilla.

Omien kotisivujen kokoaminen on tapahtunut seuraavasti. Ensin olen koonnut sisällön joukoksi Word-dokumentteja ja kuvatiedostoja. Sen jälkeen olen suunnitellut sivuston rakenteen ja navigoinnin. Word-tiedostoista olen tuonut tekstit sivueditorille näin: valitse teksti, tuo leikepöydälle, vie tekstieditoriin (TextPad tai BBEdit), kopioi sieltä uudestaan leikepöydälle, ja tuo sivueditoriin. Muotoile sivueditorissa ja korjaa tarvittaessa lähdekoodia. Suoraan Wordistä sivueditoriin ei kannata tuoda, koska mukana tulee käsittämätön määrä turhia tägejä ja muuta roskaa.

Sivueditorina on käytössäni SeaMonkey sekä Macissä että Windowsissa.

Ftp-siirron teen käyttäen sovellusta FileZilla sekä Macissä että Windows-koneissa.

Python

Pythoniin aloin uudelleen perehtyä äskettäin. Tein pieniä testiohjelmia. Lopulta totesin ja ymmärsin, että pitäisi muodostaa client-server-rakenne, jotta voisin käyttää Pythonia johonkin hyödylliseen. Arkkitehtuurimietiskelyt ovat jääneet minulta kesken ajatellessani miten Pythonia voisi soveltaa omiin tarkoituksiin, esimerkiksi edellä mainittuun Herbaariosovellukseen.


--------------------------------
(sivua muokattu 5.4.2021)