Melontakilometrien visualisointia

[viesti Survo-keskustelupalstalla (2001-2013)]

Kirjoittaja: Kimmo Vehkalahti
Sähköposti:    -
Päiväys: 31.5.2004 0:44

On taas iltasadun aika... viittaan eiliseen juttuuni otsikolla
"Ajokilometrien laskeskelua". Lienee hyvä näyttää, että myös reissun
varsinaiseen aiheeseen (melontaan!) liittyy myös liuta laskelmia,
kuvia ja kaavioita joissa Suomen Upein Reissujen Virittelyn Ohjelmisto
on ahkerassa käytössä.

Päätin myös laittaa valikoiman papereita omalle nettisivulleni, jotta
tarina tulisi vähän konkreettisemmaksi. Paperit joihin viittaan vielä
alla jokaiseen erikseen, on tehty Survon PRINT-operaatiolla ja muutettu
PDF-muotoon. Ne löytyvät nyt seuraavista osoitteista:

http://www.helsinki.fi/%7ekvehkala/Jekku_Meloo_2004_suunnitelma.pdf 
http://www.helsinki.fi/%7ekvehkala/Jekku_Meloo_2004_nuotituspohja.pdf 
http://www.helsinki.fi/%7ekvehkala/Jekku_Meloo_2004_logistiikka.pdf 
http://www.helsinki.fi/%7ekvehkala/Jekku_Meloo_2004_kilometrit.pdf 

Kuvaan seuraavassa lyhyesti (no, en ehkä ihan lyhyesti kuitenkaan...)
kyseisten dokumenttien syntyä seuraavilla otsikoilla (kopioimalla
tämän jutun Survon toimituskenttään voit käyttää oheisia otsikkoja
suorina siirtymiskomentoina jutun eri osien välillä):

 - Perustiedot reitistä ja melojista
 - Melontasuunnitelman laatiminen
 - Reitin nuotituspohjan rakentaminen
 - Logistiikkasuunnitelman tulostaminen
 - Melontakilometrien laskeskelua
 - Melojakohtaisten reittiprofiilien visualisointi

Puheena oleva melontareissuhan on siis Suomi Meloo -kanoottiviesti, joka
järjestetään tänä vuonna jo 20. kerran. Itse olen mukana 11. kertaa, ja
nyt toista kertaa viime vuonna perustetun Jekku-joukkueemme kipparina.

Viesti etenee viikon n. yötä päivää sopivissa pätkissä pitkin ja poikin
Suomen järvi-, joki- ja merimaisemia. Reitti vaihtelee vuosittain. Tänä
vuonna "kanetoidaan" Iisalmesta Kotkaan, viime vuonna mentiin puolestaan
Pieksämäeltä Heinolaan. Vuonna 2000 Suomi Meloo rantautui Töölönlahdelle
ja pari vuotta sitten Kokkolaan.


 - Perustiedot reitistä ja melojista
   ---------------------------------

Suunnittelu alkaa yleensä tammi-helmikuussa, kun reitti julkistetaan.
Tiedot voi kaivaa Suomi Meloo ry:n sivuilta http://www.suomimeloo.fi/ 
ja survoa niistä omaan käyttöön paremmin soveltuvan taulukon:

*DATA A a,b,n,m
*
mAA  AAAAAAAAAAAAAAAAAAAAAAAAA   AAAAAAAA 11.1 AAAAAAAA 11 11.1 AAAAAAAAAAAAAAAAAAAAAA 111 11 11 11 11   AAAAAAAAAAAAAAAAAAAAAAAAA
*
nNro Paikka                      Tulo      V   Lähtö    km  h   Huom                    GT A1 A2 B1 B2   Leiri
a 0  Iisalmi, uimaranta                        la 11.00  7  1.2 20-v lähtöloitsut      112  0  1  0  1   Iisalmi, Koljonvirta
* 1  Iisalmi, Peltosalmi         la 12.15  0.5 la 12.45 21  4.5 kanava                 112  1  1  1  1   Iisalmi, Koljonvirta
* 2  Lapinlahti, Portaanpää      la 17.30  0.5 la 18.00 20  4.0 _                      112  1  1  1  1   _
* 3  Lapinlahti, Jokiniemi       la 22.00  0.5 la 22.30 12  2.5 kanava                 112  1  2  1  1   Kuopio, Rauhalahti
* 4  Maaninka, Kasino            su 01.00  1.0 su 02.00 33  6.5 selkävesiä              98  2  2  1  2   Kuopio, Rauhalahti
* 5  Vuorela, Kunnonpaikka       su 08.30  0.5 su 09.00 19  4.0 _                       98  2  2  2  2   Kuopio, Rauhalahti
* 6  Uudistalo I, Jännevirta     su 13.00  1.0 su 14.00 22  4.5 _                       99  2  3  2  2   Kuopio, Rauhalahti
* 7  Riistavesi, satama          su 18.30  0.5 su 19.00 22  4.5 _                       99  3  3  2  2   Kuopio, Rauhalahti
* 8  Uudistalo II, Jännevirta    su 23.30  0.5 ma 00.00 21  4.5 _                       99  3  3  2  3   Kuopio, Rauhalahti
* 9  Kuopio, Väinölänniemi       ma 04.30  1.0 ma 05.30 20  4.0 selkävesiä              98  3  4  3  3   Kuopio, Rauhalahti
*10  Puutossalmi, lossiranta     ma 09.30  0.5 ma 10.00 21  4.5 selkävesiä              98  4  4  3  3   Kuopio, Rauhalahti
*11  Konnuksen kanava            ma 14.30  1.0 ma 15.30 26  5.0 vaihdossa sulku         84  4  4  3  3   _
*12  Varkaus, Kuntoranta         ma 20.30  0.5 ma 21.00 45  9.5 YÖSAFARI, kanava        85  4  5  3  4   Rantasalmi, Mansikkaniemi
*13  Rantasalmi, Järvisydän      ti 06.30  0.5 ti 07.00 25  5.0 _                       71  5  5  4  4   Rantasalmi, Mansikkaniemi
*14  Rantasalmi, Tammenlahti     ti 12.00  0.5 ti 12.30 21  4.0 kapea tie               72  5  5  4  4   _
*15  Savonlinna, uimahalli       ti 16.30  1.0 ti 17.30 12  2.0 _                       72  5  6  4  4   _
*16  Savonlinna, Koivukanta      ti 19.30  0.5 ti 20.00 26  5.5 ahdas/kapea tie         72  6  6  4  5   _
*17  Sulkava, Hakovirta          ke 01.30  0.5 ke 02.00 17  3.0 _                       71  6  6  5  5   _
*18  Mannilanniemi               ke 05.00  1.0 ke 06.00 20  4.0 _                       59  6  7  5  5   Puumala, Koskenselkä
*19  Puumala, satama             ke 10.00  1.0 ke 11.00 11  2.0 _                       59  7  7  5  5   Puumala, Koskenselkä
*20  Hätinvirta, lossiranta      ke 13.00  0.5 ke 13.30 27  5.5 aavan selän ylitys      59  7  7  5  6   _
*21  Suur-Saimaan lomakylä       ke 19.00  0.5 ke 19.30  6  1.5 _                       59  7  8  6  6   Lomakeskus Saimaanranta
*22  Lomakeskus Saimaanranta     ke 21.00 10.5 to 07.30 16  3.5 MELAJUHLA               48  8  8  6  6   Lomakeskus Saimaanranta
*23  Vehkataipale, koulu         to 11.00  0.5 to 11.30 13  2.5 _                       48  8  8  6  6   Lomakeskus Saimaanranta
*24  Lappeenranta, Myllysaari    to 14.00  1.5                  autosiirto              48  8  9  6  7   _
*25  Luumäki, Risulahti                        to 15.30 13  2.5 _                       48  9  9  7  7   _
*26  Kukasranta, leirikeskus     to 18.00  0.5 to 18.30 32  6.5 ahdas                   47  9  9  7  7   Kouvola, Tykkimäki
*27  Kannuskoski                 pe 01.00  1.5 pe 02.30 15  3.5 siirto 1 km, koskia     47  9 10  7  7   Kouvola, Tykkimäki
*28  Valkeala, Tirvan pato       pe 06.00  1.0 pe 07.00 21  4.5 kanto 100 m,  koskia    46 10 10  7  8   Kouvola, Tykkimäki
*29  Kouvola, Tykkimäki          pe 11.30  1.5                  autosiirto              46 10 10  8  8   Kouvola, Tykkimäki
*30  Inkeroinen                                pe 13.00 28  6.5 KOSKIA!, tien ylitys    34 10 11  8  8   _
*31  Hirvikoski                  pe 19.30  1.0 pe 20.30 18  4.0 patotie, 50 m kanto     34 11 11  8  8   Kotka, Santalahti
*32  Pyhtää, Stockfors           la 00.30  1.0 la 01.30 26  6.0 sulku, 7 km selkä       34 11 11  8  9   Kotka, Santalahti
*33  Kotka, Santalahti           la 07.30  1.0 la 08.30 15  3.5 _                       34 11 12  9  9   Kotka, Santalahti
b34  Kotka, Sapokka              la 12.00                       20-v loppujuhla         34 12 12  9  9   _
*

Tätä aineistoa tarvitaan useammissa yhteyksissä ja siihen pitää voida
viitata eri toimituskentistä, joten tehdään siitä datatiedosto (samalla
vaihdetaan muuttujien järjestys selailun kannalta mukavammaksi):

*FILE CREATE SM2004,150,50
*Suomi Meloo 2004 - Jekku-joukkueen kyntövuorot
*PVM / Maanantai, 24. toukokuuta 2004 klo 18.01 (vko 22, pvä 145/366)
*FIELDS:
*   1 SA_   2 Nro      vaihtopaikan numero
*   2 SA_  25 Paikka   vaihtopaikan nimi
*   3 SA_  22 Huom     huomautuksia
*   4 NA_   1 GT       karttakirjan sivu (###)
*   5 SA_   8 Tulo     tuloaika vaihtopaikalle (pp hh.mm)
*   6 NA_   4 V        vaihtoon varattu aika (##.#)
*   7 SA_   8 Lähtö    lähtöaika vaihtopaikalta (pp hh.mm)
*   8 NA_   1 km       reitin pituus (##)
*   9 NA_   4 h        reitin kestoaika (##.#)
*  10 NA_   1 A1       nuottisivujen teon apumuuttuja 1 (4/sivu) (##)
*  11 NA_   1 A2       nuottisivujen teon apumuuttuja 2 (4/sivu) (##)
*  12 NA_   1 B1       nuottisivujen teon apumuuttuja 1 (5/sivu) (##)
*  13 NA_   1 B2       nuottisivujen teon apumuuttuja 2 (5/sivu) (##)
*  14 SA_  26 Leiri    leiripaikan nimi
*END
*
*FILE COPY A TO SM2004
*FILE SHOW SM2004

Apumuuttujat A1, A2, B1 ja B2 sekä Leiri-muuttuja on lisätty taulukkoon
vasta myöhemmässä vaiheessa, kun leirit on ensin selvitetty ja halutaan
tehdä koko reitin monisivuinen nuotitus. GT-muuttujan arvot viittaavat
Genimapin Suomi Finland GT -tiekartaston sivuihin.

Alkuvaiheessa tulostukseksi kelpaa alkeellinenkin vedos, jonka saa
kevyesti yllä olevasta taulukosta hyödyntämällä chapter-tekniikkaa:

*...............................................
*DEF Osuudet n,b
*
*>copy K.PS lpt1
*/GV-SHOW K.PS
*PRINT CUR+1,E-1 TO K.PS
- include PS.DEV
- [Courier(10)][line_spacing(11)][margin(200)] / [copies(3)]
- shadow 7: [BOLD][REVERSE] [NORMAL]
*JEKKU MELOO 2004
*                          Reittitiedot (15.2.2004)
*
- [Courier(9.5)][line_spacing(17)][margin(200)]
- chapter Osuudet
E
*...............................................

Osuudet ovat keskimäärin 20 km pituisia, mutta hajontaakin on jonkin
verran. Yhteispituus on reilut 650 km. Mm. nämä faktat saadaan näkyviin
pikaisella STAT-läpileikkauksella:

*STAT SM2004 CUR+1 / VARS=km SUMS=1 RESULTS=0
*Basic statistics: SM2004 N=35
*Variable: km       reitin pituus (##)
*N(missing)=3
*min=6        in obs.#22 (21)
*max=45       in obs.#13 (12)
*mean=20.34375 stddev=7.921426 skewness=0.743836 kurtosis=1.276285
*sum1=651
*lower_Q=15       median=21       upper_Q=26

Kevättalven aikana rakennetaan joukkue, ts. rekrytoidaan melojat.
Muistiinpanojen hallinnassakin Survo ja sen ranskalaisten viivojen
tekniikka ym. ominaisuudet ovat arvokkaana apuna. Viime vuonna, kun
kaiken hyvän lisäksi ostimme jengillemme kanootin, tulin säilöneeksi
yli 120 kohdan verran muistiinpanoja, kaikkiaan n. 3000 riviä tekstiä
yhteen toimituskenttään. Tänä vuonna tekstiä on kertynyt n. 500 riviä
vähemmän (aika paljon silti); sähköposteja, tekstiviestejä jne.

Kun joukkue on kasassa, voidaan jatkaa reittitietojen kanssa askartelua.
Päivitetään datatiedostoa luomalla joka melojaa kohti oma muuttuja:

*COUNT CUR+4,e-1,CUR+1,15
*  11
*FILE UPDATE SM2004
*FIELDS:
*  15 NA_   1 Elina_R  (##)
*  16 NA_   1 Kimmo    (##)
*  17 NA_   1 Sirpa    (##)
*  18 NA_   1 Vsa      (##)
*  19 NA_   1 Kalle    (##)
*  20 NA_   1 Elina_K  (##)
*  21 NA_   1 Mia_S    (##)
*  22 NA_   1 Krisu    (##)
*  23 NA_   1 Janne    (##)
eEND

Näiden muuttujien varsinaiseen käyttötarkoitukseen palataan myöhemmin,
mutta tässä vaiheessa riittää että liuta nimiä on esitelty. Ne tulevat
vastaan myöhemmin monessa kohdassa. Nimillä ei ole mitään vastinetta
todellisuudessa, mitä nyt "Kimmo" sattuu kuulostamaan tutulta. ;)


 - Melontasuunnitelman laatiminen
   ------------------------------

Ensimmäiseksi kiinnostaa melontasuunnitelma (itse asiassa se taitaa
tulla tehtyä jo aiemmin, jotta voi arvioida melojien riittävyyttä).
Melontasuunnitelma on taulukko (yksi A4), johon rastitetaan kunkin
melojan osuudet. Tiedot siihen saadaan suoraan em. aineistosta:

*MASK=AAAA--AA---------------
*FILE LOAD -SM2004 END+5 / IND=Lähtö,!MISSING (ei autosiirtoja tähän)

Tulostuksen tekniset yksityiskohdat sivuutan enimmiltä osin, mutta
lopputulos näyttää joka tapauksessa tällaiselta:

http://www.helsinki.fi/%7ekvehkala/Jekku_Meloo_2004_suunnitelma.pdf 

Pari detaljia tulostuksesta voisi tässä kuitenkin mainita. Harmaat
taustapalkit ja autosiirtoja symboloivat viivat on rakennettu näin:

*............................................................
*PLOT /FRAME / FRAME=0 SIZE=W,H W=2750 H=55 DEVICE=PS,GRAY.PS
*FRAMES=F F=0,0,W,H,-1 FILL(-1)=0,0,0,0.19  LINETYPE=[white]
*............................................................
*PLOT /FRAME / FRAME=0 SIZE=W,H W=2750 H=7  DEVICE=PS,LINE.PS
*FRAMES=F F=0,0,W,H,-1 FILL(-1)=0,0,0,0.91  LINETYPE=[white]
*............................................................
*DEF Gray g+1,G-1
g
- picture GRAY.PS,*,*-12
G
*............................................................
*DEF Line l+1,L-1
l
- picture LINE.PS,*,*-10
L
*............................................................

Pala PRINT-kaaviosta näyttää miten kuvatiedostot GRAY.PS ja LINE.PS
haetaan siististi mukaan haluttuihin paikkoihin. Tämän järjestelyn etuna
on, että kuvatiedostojen sijoitteluparametrit ovat vain yhdessä paikassa.

* 27 Kannuskoski             pe 02.30 15 km      q15 q15 q15 q15 q15 q15     q15     q15 q15 q15 q15  siirto 1 km, koskia 47
- chapter Gray
- chapter Line
* 28 Valkeala, Tirvan pato      07.00 21 km      q21 q21 q21 q21 q21 q21 q21 q21     q21 q21 q21 q21  kanto 100 m, koskia 46
* 30 Inkeroinen                 13.00 28 km                                                           KOSKIA, tien ylitys 34
- chapter Gray
* 31 Hirvikoski                 20.30 18 km      q18 q18 q18 q18     q18 q18 q18     q18 q18 q18 q18  patotie, 50 m kanto 34
* 32 Pyhtää, Stockfors       la 01.30 26 km      q26 q26 q26 q26     q26 q26 q26     q26 q26 q26 q26  sulku, 7 km selkä   34
- chapter Gray
* 33 Kotka, Santalahti          08.30 15 km      q15 q15 q15 q15     q15 q15 q15     q15 q15 q15 q15  20-v loppujuhla     34

Hieman pidempien osuuksien kilometrit (kuten 28 ja 26 tässä) on
lihavoitu, siis maalattu varjolla '1'. Rastitusruudut tulevat
ZapfDingbats-fontista (varjona 'Z') q-kirjaimen kohdalta, ja niiden
oheen sijoitetut km:t on maalattu '7'-varjolla. Kaaviossa on näitä
varten määritelty seuraavaa:

- define [M] [Swiss(12)]
- shadow Z: [ZapfD(16)] [M]
- shadow 7: [SwissB(6)] [M]

Rastitus tapahtuu lyijykynällä, koska sitä on voitava muuttaa tarpeen
mukaan maasto-olosuhteissa. Survo pärjäisi varmasti sielläkin, mutta
eihän kukaan halua printteriä papereineen ruveta reissussa raahaamaan.
Siispä paperit tehdään tiettyyn pisteeseen asti valmiiksi, printataan
koko valikoima molempiin autoihin ja piirrellään loput käsin. (Eikä
kaikkea pidä tehdäkään koneella - kynän ja paperin ääressä työskentely
on hauskaa, kun on hyvät pohjat!)


 - Reitin nuotituspohjan rakentaminen
   ----------------------------------

Seuraavana on vuorossa kaikkein yksityiskohtaisin paperi, nuotituspohja.
Siitä nähdään sekä melontaviestin kulku osuuksittain että molempien
autojen liikkeet leireihin ja vaihtopaikoille. Tämä paperi kertoo aina,
missä kunkin joukkueen jäsenen on milloinkin oltava. Sen rooli on siis
hyvin keskeinen ja hektinen.

Myös nuotituspohja täytetään lyijykynällä, jotta ylläpito onnistuu missä
olosuhteissa tahansa. (Nuotituksen piirtely kynällä vasta hauskaa onkin!)
Tämänvuotinen 9-sivuinen pohja näyttää seuraavalta:

http://www.helsinki.fi/%7ekvehkala/Jekku_Meloo_2004_nuotituspohja.pdf 

Kynällä kirjoitellaan keskelle melojat ja reunoille autoilijat siten että
autoille piirretään kulkukaaviot leirien ja vaihtopaikkojen välille.
Datasta saadaan mukaan mausteeksi samoja yksityiskohtia kuin suunnitelmaan
eli tulo- ja lähtöaikoja, taukojen kestoja, melontamatkan pituuksia jne.

Nuotituspohjan tulostuksen lähtökohtana on jälleen sama aineisto kuin
edellä, ja FILE LOAD on taas hyödyksi. Tällä kertaa sitä käytetään
FORMAT-täsmennyksen säestyksellä. Tulostusmuotoa säätelevä kaavio näyttää
seuraavalta (tosi asiassa hieman värikkäämmältä, mutta varjomerkit eivät
valitettavasti näy netissä - idea tullee kuitenkin selväksi):

*FORMAT KYNTÖ
TT                               T
*
- {vaihtopaikka}
T T   T *8.4
* [Nro]. [Paikka]
- {tiedot}
T        T    T T *7.1
*        Tulo  ; [Tulo]   ([V]  h)
*        Lähtö ; [Lähtö]
*        Matka ; [km] km ([h]  h)
T        T *7.1
- {huomautuksia}
* GT [GT][Huom]
- {leirintä}
*        Leiri ; [Leiri]
- {tiedot}
TT                               T
*
T
% {melojat}
- picture MELOO.PS,*+xxx,*+yyy,1,yscale / $ [Nro]
-
*END
p
/
- / new page!
q
- / game over!

Tässä tulee käyttöä jo alussa nähdyille apumuuttujille B1 ja B2, sillä
käytännön kannalta on tärkeää saada sivunvaihdot sujumaan niin että
kunkin sivun viimeinen vaihtopaikka toistuu seuraavan sivun alussa.
Jätän toteutuksen yksityiskohdat "harjoitustehtäväksi". Avainasemassa
on joka tapauksessa SELECT-täsmennys. LINES-täsmennys sen sijaan liittyy
REPLACE-komentoihin, jotka viimeistelevät FILE LOAD:in aikaansaannoksia.
(Osassa niistäkin on todellisuudessa varjomerkkejä, joten tämä esitys
netissä ei kykene venymään ihan kaikkiin yksityiskohtiin.)

*FORMAT=KYNTÖ LINES=A+1,END SELECT=s1+s2
*
*FILE SHOW SM2004
*
*FILE LOAD SM2004 END+1 / s1=B1,1 s2=B2,1
*COPY p+1,p+2,END-1
*FILE LOAD SM2004 END+1 / s1=B1,2 s2=B2,2
*COPY p+1,p+2,END-1
*FILE LOAD SM2004 END+1 / s1=B1,3 s2=B2,3
*COPY p+1,p+2,END-1
*FILE LOAD SM2004 END+1 / s1=B1,4 s2=B2,4
*COPY p+1,p+2,END-1
*FILE LOAD SM2004 END+1 / s1=B1,5 s2=B2,5
*COPY p+1,p+2,END-1
*FILE LOAD SM2004 END+1 / s1=B1,6 s2=B2,6
*COPY p+1,p+2,END-1
*FILE LOAD SM2004 END+1 / s1=B1,7 s2=B2,7
*COPY p+1,p+2,END-1
*FILE LOAD SM2004 END+1 / s1=B1,8 s2=B2,8
*COPY p+1,p+2,END-1
*FILE LOAD SM2004 END+1 / s1=B1,9 s2=B2,9
*COPY q+1,q+2,END-1 / "game over"
*REPLACE "   .",".",C
*REPLACE "   km"," km",C
*REPLACE " ( "," (",C
*REPLACE " ;",":",C
*REPLACE " ;",":",C
*REPLACE "{","[",C
*REPLACE "}","]",C
*REPLACE "Tulo : -","",C
*REPLACE "Lähtö: -                ","",C
*REPLACE "Matka:  - km (  - h)","",C
*REPLACE "(  - h)","",C
*REPLACE "Leiri: _","",C
*REPLACE " _ ","   ",C
*REPLACE "[melojat]","250",C
*REPLACE "xxx","100",C
*REPLACE "yyy","035",C
*REPLACE "yscale","0.625",C
*REPLACE "$  ","$ ",C
*
*/MELOO-NUOTIT / viimeistelee Suomi Meloo -nuotit

Joukko REPLACE-komentoja muuntelee todellakin FILE LOAD:in tulostusta,
esim. muuttaa FORMAT-kaaviossa olevien "{leirintä}"-, {tiedot}"- ym.
koodausten sulut hakasuluiksi, jotta niitä voidaan hyödyntää PRINT-
operaatiossa (hakasuluilla on oma merkityksensä FORMAT-kaaviossa,
siksi tämä puljailu). PRINT:in yhteydessä nämä määritellään näin:

- define [tiedot]        [Swiss(13)][line_spacing(13)]
- define [leirintä]      [Swiss(8)][line_spacing(0)]

Jatkuvalla aktivoinnilla täräytettävä hässäkkä päättyy sukrokutsuun,
joka väittää viimeistelevänsä nuotit. Vähän alempaa kentästä löytyykin
seuraavanlainen kohta:

*Sukro, joka tekee loput likaiset työt:
*
*TUTSAVE MELOO-NUOTIT
/ viimeistelee Suomi Meloo -nuotit (KV 4.5.2003) (18.5.2003) (24.5.2004)
/
/ - autosiirroista ym. melontaviiva pois
/ - leirikohtiin nämä: (picture MELOO:n alapuolelle)
/ *------------------
/ - picture LEIRI.PS,*-450,*+250,1,1
/ - picture LEIRI.PS,*+1150,*+250,1,1
/ *------------------
/
*{jump A,A,1}
/ autosiirrot:
*{search}$ 24{R}{line start}{ins} /{ins}
*{search}$ 29{R}{line start}{ins} /{ins}
/ ym. (peruutettavat vuorot):
*{search}$ 30{R}{line start}{ins} /{ins}
*{jump A,A,1}
/ leirit:
*{search}$ 1{R}{call *-LEIRI}
*{search}$ 3{R}{call *-LEIRI}
*{search}$ 5{R}{call *-LEIRI}
*{search}$ 10{R}{call *-LEIRI}
*{search}$ 13{R}{call *-LEIRI}
*{search}$ 19{R}{call *-LEIRI}
*{search}$ 22{R}{call *-LEIRI}
*{search}$ 27{R}{call *-LEIRI}
*{search}$ 29{R}{call *-LEIRI}
*{search}$ 31{R}{call *-LEIRI}
*{search}$ 33{R}{call *-LEIRI}
*{jump A,A,1}
*{end}
*
*TUTSAVE MELOO-LEIRI
*{line start}{d2}{u2}{ins line}{ins line}{u}{l4}--{u2}{r}
* picture LEIRI.PS,*-450,*+250,1,1{R}
* picture LEIRI.PS,*+1150,*+250,1,1{R}
*{end}

Tästä ja em. lopputuloksesta voi ainakin jokainen sukroja tehnyt nähdä
mitä tuo sukro (oik. sukroperhe) tekee.


 - Logistiikkasuunnitelman tulostaminen
   ------------------------------------

Ajokilometrejä koskevassa jutussani sivusinkin jo logistiikkapaperia,
eikä siinä ole sinänsä mitään kovin ihmeellistä. Lopputulos näyttää
tällaiselta:

http://www.helsinki.fi/%7ekvehkala/Jekku_Meloo_2004_logistiikka.pdf 

Ehkä sen verran raotan tätäkin paperia, että näytän pienen kikan, jolla
vasemman reunan päivämäärät on tulostettu. Ne olivat ensimmäisessä
versiossa omilla riveillään (veivät siis yhden tulostusrivin), mutta kun
alkoi tulla tilanahtautta, päätin siirtää ne vasempaan marginaaliin.
En halunnut siirrellä koko tulostettavana olevaa taulukkoa, joten käytin
tämännäköistä konstia:

- define [PVÄ] [STORE(P)][PSAVE][margin(100)][SwissB(11)][S]
- define [/PVÄ] [S][M][PRESTORE]
- shadow W: [PVÄ] [/PVÄ]
- control P: [JUMP(P)]
-
UAjat viestin saapumisaikoja. Ajokilometrit vaihtoihin yhteen suuntaan.
U
TT     T         T                        (   )  T     T     T           *6.0
*klo   puuha     kohde                    ajokm  auto  hlöt  huom
*
Upe 11.6.
P12.00 Siirto    Iisalmi                    470  Golf
*      Ajo       Iisalmi                    470  Yaris
*      Leiri     Iisalmi, Koljonvirta
*
*      Yö  1     Iisalmi, Koljonvirta                    7   teltat
*
Ula 12.6.
P11.00 Siirto    Iisalmi, uimaranta           2  Golf
*12.15 Vaihto  1 Iisalmi, Peltosalmi         12  Yaris

Tässä siis "pe 11.6." ja "la 12.6." on maalattu 'W':llä, joka on edellä
määritelty sopivasti niin että hypätään hetkeksi vasempaan reunaan (1 cm
paperin reunasta), kirjoitetaan lihavoidulla 11 pisteen Helveticalla ao.
teksti ja palataan sitten siihen fonttiin missä oltiin. Seuraavan rivin
kontrollimerkki 'P' huolehtii siitä, että hypätään kohtaan jossa oltiin
ennen päivämäärän asettamista. Kaaviossa on ulkoasun viilailuun liittyen
muitakin varjomerkkejä (ykkösiä ja kuutosia), mutta ne eivät näy tässä.


 - Melontakilometrien laskeskelua
   ------------------------------

Edellisessä jutussani laskeskeltiin ajokilometrejä, mutta nyt päästään
laskemaan melontakilometrejä, mikä onkin astetta haastavampi tehtävä.

Tätä varten perustetussa toimituskentässä on ensinnäkin globaali osio,
jossa määritellään kiintoisia, sanoisinko "tähdellisiä" täsmennyksiä:

*   *GLOBAL*
*
*   *MELOJAT=Janne,Krisu,Elina_R,Sirpa,Kimmo,Kalle,Vsa,Elina_K,Mia_S
*   *SIIRROT=S1+S2+S3+O1 S1=Nro,24 S2=Nro,29 S3=Nro,34 O1=Nro,30
*   *OSUUDET=!(S1+S2+S3+O1) (O=ohitus, kalusto ei sovi ao. osuudelle)

Tähdet kertovat, kaverit melovat. Siirretään melontatiedot dataan
(vanha kunnon PUTEND:kin saa arvoistaan käyttöä!):

*............................................................
*Melontaosuuksien nollaus:
*TRANSFORM SM2004 BY 0       / VARS=*MELOJAT
*............................................................
*Autosiirto-osuuksien tyhjennys:
*TRANSFORM SM2004 BY MISSING / VARS=*MELOJAT SELECT=*SIIRROT
*............................................................
*Kyntövuorot jaettu, laitetaan ylös: (ks. GLOBAL)
*(tarkistus melonnan jälkeen!)
*
*PUTEND CUR+1,CUR+9,=km
*Elina_R=km
*Kimmo=km
*Sirpa=km
*Vsa=km
*Kalle=km
*Elina_K=km
*Mia_S=km
*Krisu=km
*Janne=km
*
*FILE SHOW SM2004 / aktivoi data ennen seuraavia!

Näitä seuraavissa muunnoksissa on taas hyödynnetty perusdataa ja
FILE LOAD:ia, jolloin on saatu selkeästi dokumentoitu kohta käsin
(rastitusten perusteella) päivitettäville melojatiedoille:

*Käsityövaihe: melojien nimet osuuksittain tähän!
*    |||||||||||||
*VAR Elina_R Kalle       / IND=Nro,0   Iisalmi, uimaranta
*VAR Janne Sirpa         / IND=Nro,1   Iisalmi, Peltosalmi
*VAR Krisu Vsa           / IND=Nro,2   Lapinlahti, Portaanpää
*VAR Kimmo Kalle         / IND=Nro,3   Lapinlahti, Jokiniemi
*VAR Kimmo Kalle         / IND=Nro,4   Maaninka, Kasino
*VAR Janne Elina_R       / IND=Nro,5   Vuorela, Kunnonpaikka
*VAR Sirpa Vsa           / IND=Nro,6   Uudistalo I, Jännevirta

[...liuta rivejä poistettu...]

*VAR Kalle Elina_K       / IND=Nro,28  Valkeala, Tirvan pato
*VAR Elina_R Kimmo       / IND=Nro,31  Hirvikoski
*VAR Elina_K Mia_S       / IND=Nro,32  Pyhtää, Stockfors
*VAR Sirpa Vsa           / IND=Nro,33  Kotka, Santalahti
*
*FILE SHOW SM2004
*................
*Nollien tyhjennys:
*TRANSFORM SM2004 BY if(X=0)then(MISSING)else(X) / VARS=*MELOJAT
*................
*FILE SHOW SM2004 / FIELD=Leiri

Näiden muunnosten jäljiltä näkymä datasta "melojamuuttujien" kohdalta
on nyt tällainen (snapshot FILE LOAD:illa, joka pätkii muuttujien nimet
koska esitysformaatiksi oli FILE UPDATE:ssa valittu "##"):

     El Ki Si Vs Ka El Mi Kr Ja
      7           7
           21                21
              20          20
        12       12
        33       33
     19                      19
           22 22

[...vastaava liuta rivejä poistettu...]

                 21 21


     18 18
                    26 26
           15 15

Lasketaan näistä tiedoista keskeiset tunnusluvut: kilometrit yhteensä,
osuuksien lukumäärä sekä lyhimmän ja pisimmän osuuden pituudet (km).
Koko roska hoituu yhdellä MINSTAT-komennolla, jonka tulosmatriisia
(STAT.M) hieman muokataan MAT-alkuisilla matriisioperaatioilla:

*MINSTAT SM2004 / VARS=*MELOJAT
*MAT DIM STAT.M /* rowSTAT.M=9 colSTAT.M=5
*MAT SM2004=ZER(rowSTAT.M,colSTAT.M+1)
*MAT SM2004(1,1)=STAT.M
*MAT M=SM2004(*,mean)
*MAT N=SM2004(*,N)
*MAT TRANSFORM M BY N AND X#*Y#
*MAT M(0,1)="sum"
*MAT SM2004(1,colSTAT.M+1)=M
*MAT NAME SM2004 AS Jekku_meloo_2004

Lopputulos on siisti ja tiivis taulukko. Valitaan vielä mitkä sarakkeet
tulostetaan ja missä järjestyksessä; LOADM on kätevä näissä:

*LOADM SM2004 (C3) CUR+2 / COLUMNS=6,3,4,5
*
*Jekku_meloo_2004
*         sum   N min max
*Janne     61   3  19  21
*Krisu    146   7  15  27
*Elina_R  113   7   7  25
*Sirpa    137   7  15  22
*Kimmo    185   9   6  33
*Kalle    193   9   7  45
*Vsa      191   8  11  45
*Elina_K  159   8  12  27
*Mia_S     61   4   6  26

Melojien järjestys taulukossa on sama kuin esim. melontasuunnitelmassa,
mikä seuraa *GLOBAL*-kentässä olleesta *MELOJAT-täsmennyksestä. Datassa
järjestys on toinen, mutta sitä ei näin tarvitse alkaa muutella siinä
vaiheessa kun melojien looginen esitysjärjestys on kiinnitetty.


 - Melojakohtaisten reittiprofiilien visualisointi
   -----------------------------------------------

Seuraavaksi tehdään graafinen esitys melontaosuuksista, kilometreistä
ja vähän muustakin. Kyse on eräänlaisista reittiprofiileista jokaiselle
melojalle erikseen mutta samalla koko joukkueelle:

http://www.helsinki.fi/%7ekvehkala/Jekku_Meloo_2004_kilometrit.pdf 

Kun pohdin kyseisen kuvasarjan rakentamista ensi kertaa (vuonna 2003),
keksin hyödyntää silloin vasta vuoden verran mukana ollutta toimintoa,
nimittäin FILE LOAD:in erikoismuotoa, jossa saadaankin luetteloita
aineiston *muuttujista* ehdollisesti havaintoarvojen perusteella.
(Yleensähän FILE LOAD:illa luetteloidaan *havaintoja*, kuten edelläkin
jo moneen otteeseen.)

Tässä aluksi näyte siitä, mistä suurinpiirtein on kysymys:

*FILE LOAD SM2004 CUR+3 / SELECT=*OSUUDET VARS=*MELOJAT
*LIST_VARIABLES=Lähtö,1,100 (= joka lähdöstä mjat joiden arvo on 1-100)
*
*la 11.00: Elina_R Kalle
*la 12.45: Janne Sirpa
*la 18.00: Krisu Vsa
*la 22.30: Kimmo Kalle
*su 02.00: Kimmo Kalle
*su 09.00: Janne Elina_R
*su 14.00: Sirpa Vsa

[...vastaava liuta rivejä poistettu kuin edellä...]

*pe 07.00: Kalle Elina_K
*pe 20.30: Elina_R Kimmo
*la 01.30: Elina_K Mia_S
*la 08.30: Sirpa Vsa

Tämäkin on hauska lista. Sitä ei kuitenkaan tarvita, vaan varsinainen
profiilien piirtodata syntyy saman operaation pienellä modifikaatiolla,
nimittäin lisäparametrilla 'T' tuohon LIST_VARIABLES-täsmennykseen
(kaavioiden välillä on tietysti rajarivejä, mutten niitä tähän aina
jaksa ottaa mukaan):

*FILE LOAD SM2004 END+2 / SELECT=*OSUUDET VARS=*MELOJAT
*LIST_VARIABLES=Lähtö,1,100,T (= ed. lisäksi ko. arvo; muotoilu toisin)

T niin kuin tällöin saadaan T niin kuin toisenlainen luettelo:

*la 11.00
*  Elina_R  ( 7)
*  Kalle    ( 7)
*la 12.45
*  Janne    (21)
*  Sirpa    (21)
*la 18.00
*  Krisu    (20)
*  Vsa      (20)
*la 22.30
*  Kimmo    (12)
*  Kalle    (12)
*su 02.00
*  Kimmo    (33)
*  Kalle    (33)
*su 09.00
*  Janne    (19)
*  Elina_R  (19)
*su 14.00
*  Sirpa    (22)
*  Vsa      (22)

[...vastaava liuta rivejä poistettu...]

*pe 07.00
*  Kalle    (21)
*  Elina_K  (21)
*pe 20.30
*  Elina_R  (18)
*  Kimmo    (18)
*la 01.30
*  Elina_K  (26)
*  Mia_S    (26)
*la 08.30
*  Sirpa    (15)
*  Vsa      (15)

Sulkuihin (eli muuttujille FILE UPDATE:n yhteydessä määriteltyihin
esitysformaatteihin) tulevat nyt ao. muuttujien kunkin havainnon
kohdalla saamat arvot, ts. melojien (jotka ovat muuttujia!) km:t.
Tämä oli sen verran ovelaa, että oivallettuanikin sen jouduin vielä
pari kertaa miettimään uudelleen. Mutta onpahan nokkela operaatio tuo
FILE LOAD:in laajennus, nimittäin tästä saadaan melkoisen mukavasti
aikaan data jossa on kaikki piirtämiseen tarvittava tauhka mukana.

Tässä kohtaa olen mieluusti antautunut pienoiseen käsin tehtävään
osuuteen, jossa olen osittain hyödyntänyt tutoriaalista moodia (eli
sukron määrittelyä opettamalla halutun näppäinsekvenssin Survolle
ja antamalla sen toistaa sitä riittävän monta kertaa) sekä tietysti
kosketuslaskentaa. Kivan pikku voimistelun jälkeen kentässä on data:

*DATA OSUUDET
*Nimi       km      aika
*Elina_R     7      11        0 11.00
*Kalle       7      11
*Janne      21      12.75     0 12.45
*Sirpa      21      12.75
*Krisu      20      18        0 18.00
*Vsa        20      18
*Kimmo      12      22.5      0 22.30
*Kalle      12      22.5
*Kimmo      33      26        1 02.00
*Kalle      33      26
*Janne      19      33        1 09.00
*Elina_R    19      33
*Sirpa      22      38        1 14.00
*Vsa        22      38

[...taas vastaava liuta rivejä poistettu...]

*Kalle      21     151        6 07.00
*Elina_K    21     151
*Elina_R    18     164.5      6 20.30
*Kimmo      18     164.5
*Elina_K    26     169.5      7 01.30
*Mia_S      26     169.5
*Sirpa      15     176.5      7 08.30
*Vsa        15     176.5

joten voidaan lähteä vihdoin piirtelemään. Piirroskaavio on kasattu niin
ettei globaalia kenttää tarvita vaan yhteiset täsmennykset ovat parissa
kasassa ja melojakohtaiset määrittelyt PLOT-komentojen perässä samalla
rivillä. Näin rajarivejä ei myöskään tarvita:

*YSCALE=0(10)50 XLABEL= YLABEL=[Swiss(7)][rot(90)][move(-90,-60)],km
*FRAME=6 XDIV=0,1,0 YDIV=0,1,0 HEADER=
*XSCALE=[Swiss(10)][move(50,0)],& 
*          0:la,24:su,48:ma,72:ti,96:ke,120:to,144:pe,168:la,180:?_
*
*   LINE2=[line_width(6)][line_type(0)],aika,0 LINE=6
*     PEN=[line_width(0)][line_type(0)][move(0,0)][rot(0)][SwissB(15)]
*LINETYPE=[line_width(0)][line_type(0)][move(0,0)][rot(0)][Swiss(7)]
*    SIZE=1200,150  GRID=[line_type(1)],X      TEXT=Meloja
*
*PLOT OSUUDET aika km / CASES=Nimi:Elina_R DEVICE=PS,SM2004_Elina_R.PS Meloja=Elina_R,-400,100
*PLOT OSUUDET aika km / CASES=Nimi:Kimmo   DEVICE=PS,SM2004_Kimmo.PS   Meloja=Kimmo,-400,100
*PLOT OSUUDET aika km / CASES=Nimi:Sirpa   DEVICE=PS,SM2004_Sirpa.PS   Meloja=Sirpa,-400,100
*PLOT OSUUDET aika km / CASES=Nimi:Vsa     DEVICE=PS,SM2004_Vsa.PS     Meloja=Vsa,-400,100
*PLOT OSUUDET aika km / CASES=Nimi:Kalle   DEVICE=PS,SM2004_Kalle.PS   Meloja=Kalle,-400,100
*PLOT OSUUDET aika km / CASES=Nimi:Elina_K DEVICE=PS,SM2004_Elina_K.PS Meloja=Elina_K,-400,100
*PLOT OSUUDET aika km / CASES=Nimi:Mia_S   DEVICE=PS,SM2004_Mia_S.PS   Meloja=Mia_S,-400,100
*PLOT OSUUDET aika km / CASES=Nimi:Krisu   DEVICE=PS,SM2004_Krisu.PS   Meloja=Krisu,-400,100
*PLOT OSUUDET aika km / CASES=Nimi:Janne   DEVICE=PS,SM2004_Janne.PS   Meloja=Janne,-400,100

Melojien nimet siirtyvät kätevästi eri paikkoihin blokkisiirtoina.

Kuvasarja syntyy lopulta yhdistämällä PLOT:illa tehdyt PostScript-kuvat
PRINT-operaatiolla yhdeksi PostScript-tiedostoksi. Esimerkiksi parin
ensimmäisen melojan osalta tarvittavat rivit ovat:

% 220
- picture SM2004_Janne.PS,*,*
- [PSAVE][STORE(X)][POINT(1830,2390)]
TT    ( )
*yht    3
*km    61
*min   19
*max   21
T
- [JUMP(X)][PRESTORE]
% 220
- picture SM2004_Krisu.PS,*,*
- [PSAVE][STORE(X)][POINT(1830,2170)]
TT    ( )
*yht    7
*km   146
*min   15
*max   27
T
- [JUMP(X)][PRESTORE]

Samalla tulevat poimituiksi mukaan keskeiset tunnusluvut, jotka saatiin
edellä MINSTAT-komennon ja matriisitulkin avulla. Tässä niitä on vielä
pyöritelty TRANSP-, COPY- ja FORM-komennoilla seuraavaan tapaan:

*Jekku_meloo_2004
*XXXXXXX  sum   N min max
*Janne     61   3  19  21
*Krisu    146   7  15  27
*Elina_R  113   7   7  25
*Sirpa    137   7  15  22
*Kimmo    185   9   6  33
*Kalle    193   9   7  45
*Vsa      191   8  11  45
*Elina_K  159   8  12  27
*Mia_S     61   4   6  26
*
*TRANSP CUR-11 CUR-2 CUR+2
*
*XXXXXXX Janne Krisu Elina_R Sirpa Kimmo Kalle Vsa Elina_K Mia_S
*sum     61    146   113     137   185   193   191 159     61
*N       3     7     7       7     9     9     8   8       4
*min     19    15    7       15    6     7     11  12      6
*max     21    27    25      22    33    45    45  27      26
*
*COPY CUR-6 CUR-2 CUR+2
*
*XXXXXXX Janne Krisu Elina_R Sirpa Kimmo Kalle Vsa Elina_K Mia_S
*sum      61   146   113     137   185   193   191 159      61
*N         3     7     7       7     9     9     8   8       4
*min      19    15     7      15     6     7    11  12       6
*max      21    27    25      22    33    45    45  27      26
*
*AAAAA   111   111   111     111   111   111   111 111     111
*
*FORM CUR-7 CUR-4 CUR-2

Lopuksi on vaihdettu sum- ja N-rivien paikkaa (alt-F10 + F2-alt-F9
on näppärä siihen) ja nimetty nämä rivit uudelleen ("yht" ja "km").
Lopuksi on blokkeina siirrelty melojakohtaiset tunnusluvut PRINT-
kaavioon paikoilleen.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

On jo unihiekan heittämisen aika... Sen vielä haluaisin sanoa, että
olisi todella kiinnostavaa nähdä miten tässä kuvattuja puhdetöitä
punnerretaan ns. "kansainvälisillä" ohjelmistoilla. Minulla on ollut
melontasuunnitelmassa ja nuotituspohjassa esikuvana Excelillä tehdyt
paperit, jotka oli kehitetty siinä joukkueessa jossa aikaisemmin
olin mukana (ennen Jekun perustamista). Olen kuitenkin kehitellyt
niitä huomattavasti yksityiskohtaisemmiksi sekä keksinyt uusia, mm.
tässäkin esitellyt logistiikkapaperin sekä reittiprofiilit (muita
ovat mm. editoriaalista laskentaa hyödyntävä kustannusarviolaskelma,
melojien ja leiripaikkojen yhteystietolomake sekä suunniteltujen ja
toteutuneiden melontakilometrien vertailugraafi). Kaikki kulkevat
muuten kätevästi sponsorillemme ominaisen oransseissa kansioissa. :)

Mielestäni tärkein näkökohta tässä on *toistettavuus*, dokumentoinnin
ohella. Nyt pääsin molempia testaamaan, kun tein paperit toista kertaa,
eikä tarvinnut (tietenkään) pettyä. Automaation ja käsityön suhde
vaikuttaa nyt optimaaliselta, mutta sitä voi tarvittaessa säätää
edelleen. En kuitenkaan usko että kypsyn noiden muutamien kohtien käsin
vääntämiseen, kun kyse on kerran vuodessa tehtävästä työstä. Ja
lyijykynävaiheista en edes halua luopua; niillä on oma oleellinen
funktionsa sekä valmisteluvaiheissa että viestin kuluessa.

Ehkä näistä jutuista ei ole syytä tämän pidemmälti kirjoittaa, mutta
lupaan vastailla mikäli aihetta ilmenee. En kuitenkaan melontaviikolla,
sillä silloin koneeni on pitkästä aikaa tyhjänpanttina ja minä - no,
se selviää tietenkin nuoteista. :)

terv. Jekun kippari Kimmo

Vastaukset:
[ei vastauksia]

Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.