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)