Pääsivulle  |  TIETOTEKNIIKAN PÄÄSIVULLE

Albumi-sovellus

YLEISTÄ

Tämä on monipuolinen SQLite-tietokantasovellus valokuva- ja videoklippiarkiston hoitamiseen. Valokuvia ja videoklippejä säilytetään tavallisessa kansiorakenteessa kiintolevyllä, ja valokuvaa selittävät tiedot ovat tietokannassa. Olen tehnyt sovelluksen itse ja koko ajan siihen on vireillä parannuksia. Tällä hetkellä valokuva-arkistossani on noin 15 000 valokuvaa ja videoklippiä, ja niitä koskevien tietojen ylläpidossa riittää loputtomasti puuhaa.

Seuraavassa on luettelo sovelluksen tärkeimmistä ominaisuuksista:
Sovellus on muutoin kokonaan itse tekemäni, mutta se hyödyntää eräältä kohdin  LGPL-lisensioitua ffmpeg-sovellusta. Mac-ympäristön sovellus on toki aivan erillinen Windows-sovelluksesta, mutta sama tietokantatiedosto on käytössä molemmissa.

Teknistä perustietoa

Itse kuvat ovat tavanomaisessa kansiorakenteessa, eli niitä ei ole viety tietokannan tauluihin. Tietokantaan on viety vain kuvien thumbnailit hakutulosten kuvamatriisinäkymää varten. Kansiorakenteessa kuvaa voi korjata, ja sovellus päivittää thumbnailin automaattisesti, kun kuvaa seuraavan kerran sovelluksessa katsotaan tai käsitellään.

Sovellus tukee seuraavia kuvatiedostoja: jpg, jpeg, gif, tif, tiff, png. Saat vaihtaa kuvan toisentyyppiseen kansiorakenteessa ilman, että kerrot sitä sovellukselle. Sovellus osaa toimia tilanteessa.

Sovellus tukee seuraavia videoklippitiedostoja: wmv, avi, mpg, mpeg, mov, mp4. Se tukee mitä hyvänsä videotiedostoa minkä työasema voi avata, mutta em. tyypit on koodattu ohjelmaan sisään kun tutkitaan onko kyseessä video- vai kuvatiedosto. Myös flv on tuettuna, mutta kaikki soitto-ohjelmat eivät sitä tue (määrittele käyttösi tarvittaessa sellainen joka tukee).

Sovellusta ylläpidetään Windowsissa työkalulla Visual Community 2019, jolla tehdään 32-bittinen koodi. Se toimii sekä 32- että 64-bittisessä käyttöjärjestelmässä. Ajokelpoinen sovellus koostuu yhdestä exe-tiedostosta minkä voi laittaa minne hyvänsä, esimerkiksi kansioon C:\Albumi. Lisäksi sinne tarvitaan ini-tiedosto, SQLite:n dll-kirjasto ja jokunen muu dll-kirjasto. Mac-ympäristön sovellus on tehty työkalulla Xcode, ja ympäristön nykyiset (26.6.2019) versiot ovat Xcode 10.2.1 ja macOS 10.14.5.

Tietokannan eheyttä varmistava periaate ohjelmoinnissa: kun on tehty muutos kantaan, niin sovellus hakee aina muutetun tiedon kannasta näytölle (esimerkiksi kaikki Kuvan tiedot) ilman käyttäjän eri toimenpidettä, jolloin käyttäjä heti näkee onko asiat kunnossa.

Windowsissa minulla on kehitysympäristö sekä 32-bittisessä että 64-bittisessä Windowsissa (W8.1 ja W10). Exe-tiedostojen käytössä ristiin ei ole ongelmia. Lisäksi multiboot-koneessani kaksi käyttöjärjestelmää käyttää samaa projektikansiostoa. Kehityskoneissa on asennettuna dotnet Framework 4.6.1 tai uudempi ja SQLite-paketti sqlite-netFx46-binary-Win32-2015-1.0.109.0.zip purettuna projektikansiostoon kansioksi Externals_109. Ohjelmointikieli on C#. Sovellus on tehty WPF-käyttöliittymällä.

Loppukäyttäjän koneessa on oltava oikeat versiot dotnet Framework ja System.Data.SQLite.dll, lisäksi muutamia muita dll:iä kehitysympäristöstä:
- XP SP 3: Albumi5.exe, dotnet Framework 4.0 tai uudempi, System.Data.SQLite.dll  versio 1.0.105.0
- W8.1 ja W10: Albumi8.exe, dotnet Framework 4.6.1 tai uudempi, System.Data.SQLite.dll  versio 1.0.109.0

Mac-ympäristössä on jo macOS:n kautta mukana kaikki tarpeellinen, myös SQLite on osa käyttöjärjestelmää.

TAULURAKENNE

Tässä ovat keskeiset taulut ja niiden yhteydet. Kaaviokuva on yksinkertaistettu esitys tauluista ja niiden suhteista:
taulukartta mini Suurempi kuva

Kuvat: tiedot kustakin yksittäisestä kuvasta
Bitmapit: kuvan thumbnail ja sen tallennuspvm
Kuvanhlot: keitä henkilöitä kuvassa on
Albumit: kuvaryhmän aihepiiri
Ulkolajit: mikä ulkotila kyseessä, esimerkiksi kotipiha tai Lassen mökin piha
Ulkokoord: ulkotilan koordinaatit (puuttuu kuvasta)
Sisalajit: mikä sisätila kyseessä, esimerkiksi Olarin koti
Henkilot: tietoja henkilöstä
HenkAlbt: missä albumeissa kukin henkilö voi esiintyä
SisAlbt: missä albumeissa kukin sisätila voi esiintyä
Vakiot: kuvien laadun ja tärkeyden vakiot

Sovelluksen tarvitsemat tiedot

Sovellus (exe tai app) käyttää seuraavia tietoja. Oletuksena ne ovat Windowsissa samassa kansiossa itse sovelluksen (exe) kanssa, kun taas minulla Macissä app on kansiossa Ohjelmat/Albumi ja allaolevat tiedostot kansiossa /Users/[minä]/Pictures/Albumi.

Kansiot, jossa on hallittavat valokuvat
Tietokantatiedosto  Albumi5.db
Tietokantatiedoston testiversio  Albumi5_testi.db
Naamakansio, jossa on henkilöiden naamakuvat, kansion nimi Naamakuvat
Kansio JAVA, jossa on karttojen näyttämiseen tarkoitetut javascript-koodit
Videon thumbnail-kuva, jos sovellus ei onnistu tekemään sitä videosta: videonull.jpg
Sovelluksen perusnäytön taustakuva tuotantokannalle: Latauskuva.jpg
Sovelluksen perusnäytön taustakuva testikannalle: Latauskuva_testi.jpg
Sovellus ffmpeg.exe (Macissä ffmpeg), jota tarvitaan videoklippien käsittelyssä
Eräitä dll-kirjastoja Windows-koneessa
Macissä sovellus mpv.app, jolla esitetään videoklipit

ini-TIEDOSTO

Sovelluksen (app tai exe) kanssa samaan kansioon tulee sijoittaa tiedosto Albumi8.ini, Albumi5.ini tai AlbumiMac.ini, joka kertoo sovelluksen tarvitsemat keskeiset asiat. Sovellus ei kirjoita siihen mitään.

Tiedostossa kuvataan mistä mikin löytyy ja lisäksi tiettyjä oikeuksia. Tässä perusmalli Windows-ympäristöstä, selitykset perässä. Tiedostossa on pakko olla kaikki nämä rivit. Myös on mahdollista tehdä mutkikkaampi ini-tiedosto, joka määrittelee useita erillisiä tietokantoja (esimerkiksi oman perheen kuvat, työkuvat).
 
	kuvapolku# C:\Albumi
	sqlitekanta# C:\Albumi\Albumi5.db
	sqlitetestikanta# C:\Albumi\Albumi5_testi.db
javapolku# C:\Albumi\JAVA
  kuvapois# Ei muokkaa# Joo naamat# C:\Albumi\Naamakuvat videonull# C:\Albumi\videonull.jpg videosofta# /Users/[minä]/Pictures/ALBUMI/mpv.app/Contents/MacOS/mpv
latauskuva# C:\Albumi\alkukuva.jpg latauskuva_test# C:\Albumi\testialkukuva.jpg ffmpeg# C:\Albumi\ffmpeg.exe
kuvapolku# kertoo minkä kansion alla on kaikki kuvat ja videoklipit alikansioinaan
Jos kuvapolku on juurikansiossa, pitää olla esimerkiksi:  kuvapolku#  E:\

sqlitekanta# kertoo missä sijaitsee albumin tuotantokanta ja mikä sen nimi on

sqlitetestikanta# kertoo missä sijaitsee albumin testikanta ja mikä sen nimi on

kuvapois# kertoo saako käyttäjä poistaa kannasta kuvia, arvo on Joo tai Ei (poistettaessa poistuu vain tieto tietokannasta, ja itse kuva pitää poistaa erikseen resurssinhallinnasta niin että sovellus on suljettu)

muokkaa# kertoo saako käyttäjä muokata tietokantaa, arvo on Joo tai Ei. Jos arvo on Ei, niin esimerkiksi Muokkaa- painikkeita ei ole ollenkaan

naamat# kertoo kansion minne tallennetaan albumissa esiintyvien henkilöiden kasvokuvat

videonull# kertoo videon oletusesikatselukuvan sijainnin ja nimen (tulee käyttöön jos esikatselukuvan otto videosta ei onnistu)

videosofta#  kertoo mikä sovellus avaa videotiedoston. Tämä on käytössä ja pakollinen tieto Macissä, mutta ei tarvita Windowsissa. Windowsissa video avataan käyttöjärjestelmän oletussovelluksella

latauskuva# kertoo alun menunäytön kuvan sijainnin ja nimen. Koon oltava leveys x korkeus = 685x534

latauskuva_test# kertoo testikannan menunäytön kuvan kuten edellä

ffmpeg# kertoo missä apuohjelma ffmpeg.exe sijaitsee ja sen nimen  (Mac: /usr/local/ffmpeg)

Videoleikkeet

Videoleikkeiden katsomiseen käytetään Windowsissa kirjastosovelluspakettia MediaElement ja Macissä sovellusta mpv.app. Videoleikkeistä tarvitaan hakutuloksiin ja metatiedon katselunäyttöihin yksittäinen kuva. Se otetaan videoleikkeen alusta kolmen sekunnin päästä. Siihen käytetään sovellusta ffmpeg.exe.  Katso koodiesimerkki

Karttanäytöt

Sovellus tallentaa kuvien ottopaikan koordinaatit ja näyttää ottopaikan sijainnin OpenMap-kartalla (katso koodiesimerkki ) tai käyttäjän valinnan mukaan Maanmittauslaitoksen maastokartalla (jos kuva otettu Suomesta). OpenMap-kartat ovat selkeitä asutuilla seuduilla, mutta maastokartat ovat ylivoimaisia teiden ulkopuolella.

Historiaa

Vuodet 2000 - 2006 käytin sovellusta Photoimpact Album valokuvien ja niiden metatietojen ylläpitoon. Vuonna 2006 totesin, että sovellus ei toimi Vistassa enkä halunnut ostaa uutta sovellusversiota, koska en ollut kaikilta osin tyytyväinen Photoimpactin toimintoihin. Aloin tehdä omaa sovellusta keväällä 2006. PhotoImpactista sai metatiedot ulos tekstimuodossa, ja toin ne Accessiin, muokkasin taulurakenteen Accessissa ja ohjelmoin oman sovelluksen Visual C# 2005 Expressissä.

Myöhemmin vuonna 2008 käytössä oli tietokanta SQL Server 2008 Express, mutta se oli turhan hankala, koska halusin että voin jakaa sovellusta lapsillemme. Niinpä pian otin käyttöön SQL Server Compact:in, jota käytin vuoteen 2014 asti, jolloin tietokannaksi tuli SQLite.

Vuosien kuluessa sovellus on monipuolistunut ja bugeista on päästy hyvin eroon. Viime aikoina olen keskittynyt sovelluksen nopeuden kasvattamiseen, koska suurin tietokantani sisältää jo noin 13 000 kuvaa, ja esimerkiksi haku on voinut olla aikaa vievä.

SOVELLUKSEN OMINAISUUKSIA JA NÄYTTÖJÄ

Sovelluksen keskeiset toiminnallisuudet ovat monipuolinen haku ja luonteva uusien kuvien tuonti.
Tässä joukko sovelluksen näyttöjä Mac-versiosta:

Hakuehtojen antaminen; hakutulokset tulevat välilehtiin Pikkukuvat ja Tietorivit. Vaaleanvihreällä pohjalla on ruksattavana eri henkilöt:
Hakuehtojen antaminen minikuva

Alla näkyvät tarkemmin hakuehdot:
kuvien hakuehdot

Hakutulosten katsominen:
Hakutulokset minikuva

Uusien kuvien tuonnin näyttö. Yläreunan toiminnallisuudet etenevät vasemmalta oikealle:
Uusien kuvien tuonti

Kun uusia kuvia on tuotu, niin niille mennään antamaan metatiedot. Uudet kuvat löytyvät hakunäytön kautta. Tässä uusien tietojen antamisen näyttö:
Uusien tietojen antaminen

Kuvan kaikkien tietojen tarkasteluun on oma näyttö:
Kuvan tiedot 

Käyttöliittymästä pääsee myös hallinnoimaan henkilöiden tietoja ja monia muita perusasioita.
Tässä valikko hallinnoitaville asioille:
Valikko työkalut

Henkilöiden tietoja hallitaan tällaisella näytöllä:
Henkilöiden tiedot

Lisäksi sovelluksesta saa ulos lukumäärätietoja kuvista, paikkakunnista, henkilöistä ym. 

Sovellus tietokantoineen on helppo siirtää toiseen työasemaan tai varmistusta varten ulkoiselle kiintolevylle. Jos ini-tiedosto on käytössä, sitä pitää päivittää vastaamaan uutta ympäristöä.

-------------------------------
(sivua muokattu  29.12.2019)