4.9.2008

Wilman pikaviestien vastaanottajien valitsemistyökalu

Tuotos

Kyseessä on siis bookmarkletiksi tarkoitettu JavaScript-pätkä, joka oleellisesti nopeuttaa vastaanottajien valitsemista Wilma-pikaviestiin. Bookmarklet on tarkoitus sijoittaa selaimen osoiterivin alapuolella olevaan työkaluriviin. Bookmarkletin käyttäminen luonnollisesti edellyttää, että on kirjautunut sisään Wilmaan. Tällä hetkellä koodi ei osaa luoda listoja valituista vastaanottajista, mikä olisi positiivinen lisäys. Mikäli joku lukija sellaisen tekee, pyytäisin laittamaan kommenttiin maininnan :)

Itse bookmarklet

Raahaa alla oleva linkki esim. selaimesi työkaluriviin niin saat itsellesi Wilma-pikaviestityökalun.

Wilma - lisää pikaviestin vastaanottajia

Wilma 2.04 - lisää pikaviestin vastaanottajia

Versiohistoria ja muutokset
2011-05-25
Toimivuus testattu Wilma 2.10c:ssä Firefox 3.6.16, Firefox 4.0.1, Google Chrome 11.0, Opera 11.10 ja IE8 (tosin IE8:ssa ei toimi, sillä se näköjään rajoittaa osoitekentän pituuden alle kahteen kilotavuun...aiemmin IE:ssä osoitekentän pituuden rajana on ollut noin 4kt, mikä muissakin selaimissa...)
2008-08-17
Korjattu virhe, joka aiheutti, että lisättävät nimet tulivat Firefoxissa sivun alareunaan kahteen kertaan.
2008-06-30
Lisätty bookmarkletista erillinen versio Wilman versiota 2.06 varten (tai ainakin 2.06c, en tiedä toimiiko 2.06a:ssa ja/tai 2.06b:ssä).
2008-05-08
  • Lisätty tuki opettajien lisäämiseksi vastaanottajaksi
  • Lisätty yläreunaan napit "Lisää opiskelijoita" ja "Lisää opettajia"
  • Huom! Ryhmiä voi lisätä vastaanottajiksi lisäämällä ensin halutut opiskelijat/opettajat, klikkaamalla "Aloita viestin kirjoittaminen", tämän jälkeen "Lisää ryhmiä" ja lopuksi klikkaa haluamasi ryhmän "Viesti"-linkkiä.
2008-02-25
Ensimmäinen julkaistu versio. Tuki opiskelijoiden nopeaa lisäämistä vastaanottajiksi.
Tuetut Wilman versiot

Kaikki ainakin versioon 2.10c asti (testattu 25.5.2011).

Tuetut selaimet (Windows-alustalla)
Firefox 4: toimii
Firefox 3: toimii
Firefox 2: toimii
Opera 11: toimii
Opera 10: ei testattu
Opera 9:   ei toimi
Google Chrome: toimii
IE8: ei toimi (IE8 rajoittaa osoitekentän alle 2kt!)
IE7:       toimii, tosin hiukan puutteellisesti
IE6:       ei toimi
Safari:    ei testattu

Taustaa

Marraskuussa kirjoitin Wilman pikaviestien poistamistyökalusta, jonka kirjoitin tuskastuttuani viestien poistamisen työläyteen. Wilma on StarSoft Oy:n toteuttama selainkäyttöliittymä samaisen firman Primus-koulutietojärjestelmän tietokantaan. Wilman avulla opettajat voivat esim. antaa opiskelijoille arvosanat, merkitä poissaoloja, lähettää opiskelijoille viestejä jne. Wilma-Primus-yhdistelmä on on käytössä suuressa osassa Suomen peruskouluja ja lukioita.

Ongelma, jonka halusin ratkaista

Wilman pikaviestien poistamistakin tuskallisempaa ainakin Wilman versiossa 2.04 on pikaviestien lähettäminen suure(hko)lle määrälle oppilaita/opiskelijoita, jotka eivät ole minkään senhetkisen opetusryhmän jäseniä. Jokaisen vastaanottajan joutuu valitsemaan erikseen ja jokaista valittua henkilö varten tarvitaan neljä klikkausta ja vastaava määrä sivulatauksia...juuri tekemäni pikatestauksen mukaan tähän menee n. 15-20 sek / lisätty vastaanottaja. Kun vastaanottajia on vaikkapa 20 niin pelkästään viestin vastaanottajien valitsemiseen kuluu arviolta viidestä minuutista hiukan yli kuuteen ja puoleen.

Viime viikolla minun tarvitsi tehdä juuri tällainen operaatio, tosin viesti piti lähettää 60 opiskelijalle 20 sijaan. Tovin jos toisenkin lisäilin vastaanottajia. Ajattelin, että ei tätä näin vaikeasti voi tehdä jatkossa.

Motivaatio ja ratkaisun kehittely

Edellä esitetyn motivaation lisäksi minulla oli myös toinen motivaatio. Tiesin nimittäin, että kyseessä olisi hyvä projekti jQuery:n harjoittelemiseen, jota en ollut vielä koskaan kunnolla käyttänyt. Niin sitten visualjquery.com tuli pelkän aiemman, mielenkiinnosta selaamisen, lisäksi myös käytännön koodauskäytössä hyväksi todetuksi.

Projektiin lähtiessäni tiesin yhden monimutkaisimmista taklattavaksi tulevista yksityiskohdista olevan CSRF:ää vastaan Wilmassa käytössä olevan action token -systeemin emuloimisen AJAX:ia käyttämällä. Kuitenkin jQuery:n avulla AJAX:n GET- ja POST-sivupyyntöjen tekeminen oli sinänsä kivutonta.

Teknisestä puolesta kiinnostuneille

Koodi riveihin purettuna...tosin ilman sen enempiä selityksiä

Lopuksi uudemman version koodi nätimmin riveille jaettuna niille, jotka mahdollisesti haluavat tutkia bookmarkettini sisuskaluja tarkemmin. Kommentit ja kehitysideat ovat tervetulleita. Valitettavasti koodi menee vähän tonne oikean reunan valikon alle. Kopioi koodi koodieditoriisi tai vaikka Notepadiin niin näkyy kokonaisuudessaan. Bookmarklet on kooltaan hiukan yli 2kt.

Huomautuksena sen verran, että vanhemman 2.04-version koodin saat kopioimalla kyseisen bookmarkletin koodin (eli linkin osoitteen hiiren oikealla napilla), liittämällä haluamaasi tekstieditoriin ja pilkkomalla riveihin; vanhemmassa versiossa actionTokenin hakeminen on tehty vähemmän fiksusti kuin tässä uudemmassa versiossa.


javascript:d=document;
d.open();
d.write('
  <html>
  <head>
  <title>Lisää vastaanottajia Wilma-viestiin</title>
  </head>
  <frameset rows='37, *, 50'>
    <frame src='about:blank' scrolling='no' />
    <frame src='' +location+ '' />
    <frame src='about:blank' />
    </frameset>
  </html>
');
d.close();
tf0d=top.frames[0].document;
tf0d.open();
tf0d.write('
  <html>
  <head>
  <title>top</title>
  <script type='text/javascript' src='http://jquery.com/src/jquery-latest.pack.js'></script>
  <script type='text/javascript'>
    var linkAlterEnabled=false;
    
    function reAlterLinks(){
      setTimeout(alterLinks,700);
    }

    function init(){
      var actionToken = $($.ajax( {url: '/messages/compose', async:false} ).responseText).find('input[name=\'formkey\']').val();
      $.post('/messages/compose', {formkey:actionToken,
                                       add_student:'',
                                       Subject:'',
                                       BodyText:'',
                                       HideRecipients:'false',
                                       CollatedReplies:'true'
                                  }
      );
      alterLinks();
      top.frames[1].location='/profiles/students';
      alert('Voit aloittaa vastaanottajien valitsemisen klikkaamalla nimiä.\\nKun
             olet valinnut vastaanottajat, paina \'Aloita viestin kirjoittaminen\'
             -nappia.\\n\\n(Huomaa, että aloitettuasi viestin kirjoittamisen, voit
             tämän jälkeen halutessasi lisätä vastaanottajaksi ryhmiä \'tavalliseen
             tapaan\')');
    }

    function alterLinks(){
      $('a.opp',top.frames[1].document).click(
        function(){ addRecipientAndHide(this,'student'); }
      );
      $('a.ope',top.frames[1].document).click(
        function(){ addRecipientAndHide(this,'teacher'); }
      );
      top.frames[1].window.onunload=top.frames[0].reAlterLinks;
    }

    function addRecipientAndHide(elem,recipientType){
      $.get('/messages/compose?r_'+recipientType+'='+elem.href.substring(elem.href.lastIndexOf('/')+1,elem.href.length));
      $('body',top.frames[2].document).append(elem.text+\', \');
      $(elem).unbind().removeAttr('href').css('visibility', 'hidden');
    }
  </script>
  </head>
  <body onload='javascript:init();'>
  
  <form>
    <input type='button' value='Lisää opiskelijoita (aakkoslista)'
      onclick='javascript:top.frames[1].location=\'/profiles/students\';' />
    <input type='button' value='Lisää opiskelijoita (ryhmälista)'
      onclick='javascript:top.frames[1].location=\'/groups\';' />
    <input type='button' value='Lisää opettajia'
      onclick='javascript:top.frames[1].location=\'/profiles/teachers\';'
      style='margin-right: 3em;' />
    <input type='button' value='Aloita viestin kirjoittaminen'
      onclick='javascript:top.location=\'/messages/compose\';' />
    <input type='button' value='Peruuta'
      onclick='javascript:top.location=top.frames[1].location' />
  </form>
  </body>
  </html>
');
tf0d.close();
tf2d=top.frames[2].document;
tf2d.open();
tf2d.write('<strong>Vastaanottajat:</strong> ');
tf2d.close();

Parannettavaa ja muita huomioita

Koodissa on paljon kehitettävää ja asioita voisi jaotella enemmän funktioiksi. Oliolähtöiseen toteutukseen en tässä ehkä kuitenkaan lähtisi johtuen bookmarklettien noin 4kt kokorajasta, joka johtuu selainten osoitekenttään (tai kirjanmerkkiin) maksimissaan sallitun sisällön pituudesta.

Jos vastaanottajien hallintaan tekisi listatoiminnot, olisi oliolähestymistavan käyttäminen listojen hanskaamiseen erittäin hyvä, mutta mutufiilis on, että 4kt rajaan listatoiminnot eivät oliototeutuksena kuitenkaan mahtuisi. Voin tietty olla väärässä, kun en ole kokeillut.

Tuon massiivisen massiivisen document.write()-lähestymistavan voisi muuttaa niin, että ottaisi suoraan kiinni DOM:iin heti koodin päätasolta alkaen eikä document.write():n läpi HTML:ää ja JavaScriptiä JavaScriptillä generoiden...tosin DOM:n käyttäminen taitaisi vähän pidentää koodia ja tuo osoitekentän 4kt raja rupeaisi ehkä tulemaan vastaan.

Koodilla tuottamani HTML ei myöskään validoidu XHTML1.0 Strictiä vastaan niinkuin yleensä yritän tehdä. En nähnyt sitä tässä tarpeelliseksi koska se lähinnä lisäisi bookmarkletin koodin pituutta tuomatta mitään oleellista hyötyä tässä sovelluskohteessa.

Tuon framejen HTML-koodin tuottamisen voisi mahdollisesti tehdä myös jQueryllä, mutta päätin käyttää tuttua ja turvallista document.write():a sen suoraviivaisuudesta johtuen.

Palautetta, kysyttävää, kommentoitavaa?

Mikäli on palautetta, kehitysideoita yms. voi ne laittaa kommenttina tähän kirjoituksen yhteyteen; olisin erittäin kiitollinen :)

Lähteet

Projektia tehdessäni käytin mm. seuraavia lähteitä, joskaan lista ei ole täydellinen:

jQuery.com
John Resigin, jQuery:n kehittäjän, aiheeseen liittyvä sivusto. Sivustolla on myös keskustelufoorumi ja paljon jQuery-pluginejä.
visualjquery.com
Erittäin hyvä jQuery-dokumentaatiokäyttöliittymä
Wikipedia: XmlHttpRequest
Lueskelin XmlHttpRequest-objektin, eli AJAX:n/AHAH:n kulmakiven dokumentaatiota, jota tarvitsin tuon responseText:n löytämiseen
IBM: Simplify Ajax development with jQuery
IBM:n artikkeli jQuery:n käyttämisestä. Sisältää paljon koodiesimerkkejä.
$.frameReady()
Tätä en vielä käyttänyt, mutta näyttäisi siltä, että voisin hyötyä tästä jQuery-pluginistä: frameReady lets you run jQuery commands in a target frame as if it were in the local document. It works much like the $(document).ready() function, waiting until the DOM is ready in the target frame before attempting to run your code.

(Mikä ihmeen bookmarklet?)

Bookmarklet on JavaScript-ohjelmointikielellä kirjoitettu pieni selaimessa toimiva ohjelma, jolla voidaan automatisoida jotain selaimeen, tiettyyn nettisivuun tai kaikkiin nettisivuihin liittyviä toimintoja. Lisää aiheesta englanniksi.

Tämän artikkelin sisällön lisenssi: Creative Commons License

27.8.2008

Kaksi videota: Taito- ja taideaineiden sekä kilpailun, palkitsemisen ja aidon välittämisen tärkeys

Kaksi videota, jotka mielestäni ovat tunnin yhteispituudestaan huolimatta ehdottomasti katsomisen arvoisia. Molemmat videot ovat englanninkielisiä ilman tekstitystä.

Sir Ken Robinson - Do Schools Kill Creativity?

  • "If you're not prepared to be wrong, you'll never come up with anything original...and by the time they [kids] get to be adults, most kids [of them] have lost that capacity...they have become frightened of being wrong." (5:50)
  • "Picasso once said this, he said that: 'All children are born artists, the problem is to remain an artist as we grow up'...I believe that we don't grow into creativity, but out of it, or rather, we get educated out of it." (6:18)

ABC News - Stupid in America

  • Parantaako rahan syytäminen koulupuitteisiin automaattisesti opiskelijoiden koulumenestystä? (6:55-14:30)
  • Koulujen kilpailuttamisen vaikutus opiskelijoiden oppimisen tasoon Belgiassa (17:25-19:55)

Suomi on pärjännyt PISA-tutkimuksissa erittäin hyvin. Kuitenkin, kertovatko PISA-tutkimukset koko totuuden?

Ainakin matematiikan ja matemaattisen ajattelun osaamisessa on paljon kehitettävää, varsinkin asenteellisella puolella. Ehkä "asennevamman" taustana ovat sellaiset alakoulun opettajat, joilla on itsellä omilta kouluajoiltaan antipatioita matematiikaa kohtaan ja tätä kautta ehkä osittain tiedostamattaankin siirtävät matematiikan osaamista vähättelevän asenteensa oppilailleen. Minkä muun kouluaineen osaamattomuudesta ollaan lähes ylpeitä? "Emmä koskaan osannutkaan matikkaa, heh heh." Onko vähättely kenties vain suojelu-/suojautumismekanismi...suojaudutaan löymällä homma läskiksi?

Uskon, että luonnostaan lapsi/nuori haluaa oppia ja saada positiivista palautetta osaamisestaan. Jos hän kuitenkin kokee, ettei saa huomiota/palautetta, että opettaja ei aidosti välitä hänestä, alkaa oppilas hakemaan huomiota keinolla millä hyvänsä.

Luokattoman lukion ongelma, erityisesti suurissa lukioissa, hyvin pelkistetysti esitettynä on mielestäni se, että opiskelijan on hyvin vaikea saada kokemus siitä, että opettaja oikeasti välittää juuri hänestä...ja tämä rakkauden/välittämisen puute näkyy oppilaissa välinpitämättömyytenä. Tietysti on ne, jotka saavat huomiota ja palautetta, mutta paljon myös niitä, jotka eivät näitä saa.

Tämä menee jo melko kauas videoiden alkuperäisistä aiheista, mutta mielestäni kuitenkin liittyy asiayhteyteen, erityisesti ensimmäiseen videoon. Suomesta ja pohjoismaista yleensä käytetään termiä "hyvinvointivaltio". Taloudellisesti tämä pitää kyllä paikkaansa, mutta mitataanko kaikki rahassa? Einsteinin väitetään sanoneen: "Not everything that can be counted counts, and not everything that counts can be counted."

21.8.2008

Lisää ryhmäytymisleikkejä/-pelejä/-kilpailuja

Nimi-eläin-ääni-liike -taputuspeli

Tämä on yksi minun all-time-favorite; toimii erityisen hyvin osallistujien ollessa väsyneitä, mutta muutenkin oikein hyvin. Toimii esim. leirinuotion ympärillä istuttaessa eikä vaadi esivalmisteluja eikä välineitä/tarvikkeita. Erityisen hyvä ryhmäläisten nimien opetteluun. Saattaa aiheuttaa naurunpurskahduksia :)

Istutaan ringissä ja taputetaan kaksi kertaa omiin reisiin ja kaksi kertaa kädet yhteen, taas kahdesti reisiin, kahdesti yhteen jne. (=perusrytmi). Reisiin taputettaessa sanotaan oma nimi molemmilla taputuksilla ja kädet yhteen lyötäessä molemmilla taputuksilla jonkun muun piirissä olevan nimi. Se kenen nimi sanottiin, sanoo taas reisiin löytäessä oman nimensä kahdesti ja taas jonkun muun piirissä olevan henkilön nimen kahdesti. Näin jatketaan.

Mikäli joku sekoaa rytmistä, sanoo nimen, jota ei ole piirissä tmv. on hän tehnyt virheen. Virheen tekijä valitsee ensimmäisestä virheen jälkeen jonkin eläimen (esim. koira), jolla häneen viitataan tästä edespäin. Kun kaikki piirissä olijat tietävät valitun eläimen, aloittaa virheen tehnyt perusrytmin ja saattaa pelin taas käyntiin.

Toisesta virheestä pelaaja valitsee itselleen eläimen tilalle äänen, kolmannesta liikkeen ja neljännestä virheestä edellä valitut ääni ja liike yhtä aikaa. Viidennestä virheestä pelaaja joutuu pois pelistä. Pelaajan valitsemat ääni ja liike voivat liittyä hänen aiemmin valitsemaansa eläimeen, mutta tämä ei ole välttämätöntä.

Pelin voittavat viimeiset kaksi peliin mukaan jäänyttä.

Esimerkki

Pelissä ovat mukana Pekka, Timo, Laura, Tiina, Matti ja Jenna. Pekka aloittaa:

  • Pekka sanoo: Pekka-Pekka (reisiin kahdesti taputettaessa), Tiina-Tiina (käsiä kahdesti yhteen taputettaessa)
  • Tiina sanoo heti perään: Tiina-Tiina, Jenna-Jenna
  • Jenna sanoo: Jenna-Jenna, Timo-Timo
  • Timo sanoo: Timo-Timo, öööö

Timo valitsee eläimekseen koiran. Timo jatkaa:

  • Timo aloittaa perusrytmin ja sanoo sitten: koira-koira, Laura-Laura
  • Laura: Laura-Laura, Matti-Matti
  • Matti: Matti-Matti, Timo-Timo

"Timo" ei ole enää pelissä vaan "koira"; Matti valitsee eläimekseen "karhu".

  • Matti aloittaa perusrytmin ja sanoo sitten: karhu-karhu, Pekka-Pekka
  • ...jne...

4-5-6 -taputus

Ei vaadi esivalmisteluja eikä materiaaleja. Jaetaan porukka kolmeen ryhmään (neloset, vitoset ja kutoset); lisäksi tarvitaan yksi ihminen pitämään "perusrytmiä".

Perusrytmin pitäjä taputtaa perustahtia, noin 120-150 iskua minuutissa. Ideana on, että neloset laskevat neljään (1-2-3-4, 1-2...) ja taputtavat aina ykkösillä, vitoset laskevat viiteen, taputus ykkösillä ja kuutoset vastaavasti. Aloitus esim. siten, että perusrytmin pitäjä sanoo taputtaessaan näin:

taputus:   x   x   x   x   x   x   x   x   X
puhe:      N       Y       T       nyt     yks

iso X = kaikki ryhmät aloittavat taputtamisen. Kun kaikki ryhmät ovat aloittaneet, näyttää taputusrytmi visuaalisesti esitettynä seuraavalta:

perustahti: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
neloset:    x---x---x---x---x---x---x---x---x---x---x---x---x---x---x---x
vitoset:    x----x----x----x----x----x----x----x----x----x----x----x----x
kutoset:    x-----x-----x-----x-----x-----x-----x-----x-----x-----x-----x

Näyttää ehkä yllä vähän kryptiseltä, mutta kuulostaa toimisessaan hyvältä, kannattaa kokeilla.

Ryhmänä laskeminen ykkösestä 20:een

Tarvitaan mielellään ainakin 10 ihmistä. Järjestytään aluksi ympyräksi niin, että kaikki näkevät kaikki. Tavoitteena on onnistua ryhmänä sanomaan numerot ykkösestä 20:een seuraavasti: aloittaja (kuka tahansa) aloittaa sanomalla "yksi", joku muu sanoo "kaksi", sitten joku muu "kolme" jne.

Hiukan sääntöjä:

  • Pelissä ei saa puhua muuta kuin sanoa numeroita.
  • Kun jokin numero on sanottu, ei viimeksi puhunut henkilö eikä kumpikaan hänen vieressään seisova saa sanoa seuraavaa numeroa (tämä estää sen ettei laskeminen voi edetä järjestyksessä).
  • Jos henkilö A sanoo esim. "neljä" ja tämän jälkeen henkilö B sanoo "viisi" niin henkilö A ei saa sanoa "kuusi", ts. puhujat eivät saa yksinkertaisesti vuorotella kahdestaan.
  • Kaikkien ei tarvitse puhua ja toisaalta sama henkilö saa sanoa useamman numeron pelin aikana (kunhan aiemmin mainittuja sääntöjä noudatetaan).
  • Oleellista pelissä on, ettei ryhmä saa sopia mitään strategiaa etukäteen eikä käsimerkein, ilmein tai elein saa sopia mitään.
  • Mikäli kaksi ihmistä sanoo numeron samaan aikaan tai sanottu numero on järjestyksessä väärä, aloitetaan alusta.
  • Huomaa, että laskemisen ei tarvitse edetä kellon mukaan tasaisessa vauhdissa eikä etenemisen tarvitse myöskään olla nopeaa, voi esim. edetä yksi numero per 5 sek.
  • Hämähäkinseitti

    Välineet/valmistelut: Kahden puun väliin viritetään narusta "hämähäkinseitti"

    Tehtävänä on, että jokainen ryhmäläinen siirtyy (ryhmän avustamana) seitin yhdeltä puolelta toiselle koskettamatta seittiä. Kutakin seitin aukkoa saa käyttää korkeintaan kerran. Tässä ehkä parhaita ovat 4-6 hengen ryhmät.

    Saarelta saarelle (versio 1)

    Välineet: 24 pullon koreja (tai vaihtoehtoisesti pieniä laudanpaloja tms., joilla mahtuu juuri kaksi jalkaa) karkeasti ottaen osallistujien lukumäärä tai vähän vähemmän.

    Tavoitteena on edetä koreja/lautoja käyttäen käsketty matka niin, ettei maahan saa koskea "rannan ja vastarannan" välillä kertaakaan, vain "saarille" saa astua. Saaria siirretään "perästä keulaanpäin" niin että päästään etenemään. Voittaja on se joukkue, joka on saanut kaikki jäsenensä nopeiten rannalta vastarannalle. (Saaria saa ja pitääkin siis siirtää pelin edetessä.) Hyvä matka rannalta vastarannalle on esim. 15-30 metriä riippuen joukkueiden koosta.

    Saarelta saarelle (versio 2)

    Välineet:

    • koreja tai pieniä laudanpaloja saariksi kuten edellä
    • yksi pitkähkö kakkosnelonen per joukkue / suorituspaikka

    Toisin kuin edellisessä pelissä, nyt saaret ovat kiinteitä ja niin kaukana toisistaan ettei saarelta toiselle voi suoraan astua/hypätä. Käytettävissä on yksi kakkosnelonen, jota käyttäen, sopivasti "siltoja" saarien välille "rakentamalla" koko joukkue täytyy saada siirrettyä rannalta vastarannalle.

    Naulapölkky

    Välineet:

    • Yksi puupölkky / joukkue, pölkkyyn on valmiiksi löyty haluttu määrä (esim. 5-10) naulaa. Naulojen on oltava jokaisessa pölkyssä suurinpiirtein samalla tavalla.
    • Yksi vasara / joukkue
    • Alusta puupölkyille, esim. tukeva pöytä tai penkki

    Joukkueet järjestyvät jonoon, noin 5m päähän puupölkyistä. Kyseessä on viestikilpailu, jossa jonosta ensimmäinen juoksee joukkueensa puupölkyn luo, ottaa vasaran pöydältä/penkiltä, lyö yhden lyönnin valitsemaansa naulaan, laittaa vasaran takaisin alustalle, juoksee takaisin jonoon ja lähettää seuraavan suorittajan matkaan. Jatketaan niin kauan, että kaikki naulat on löyty pohjaan; nopein joukkue voittaa.

    1.7.2008

    Rantamatematiikkaa

    Kollegani kirjoitti juhannuksen jälkeisellä viikolla erittäin hyvän ja mielenkiintoisen artikkelin etäisyyden mittaamisesta (lue: laskemisesta) paikkaan, jonne ei syystä tai toisesta voi tai muuten jaksa matkaa mitata...esim. etäisyys mökkirannasta edessä näkyvään saareen.

    Laskun laskemalla osoittautui, että GPS-navigaattorin etäisyysmittari todella antaa oikean tulosen :)

    Lue Rantamatematiikkaa-artikkeli

    Kirjoita matikan ja fysiikan kaavoja helposti selaimella (LaTeX netin kautta)

    Opiskelukaverini Viitasalon Juhon kanssa ollaan viimeisen viikon aikana keskusteltu aiheesta LaTeX-kaavojen liittäminen nettisivulle tai Flash-sovelluksen/havainnollistukseen. Tai oikeastaan enemmänkin niin, että Juho on näyttänyt mulle löydöksiään ja myös itse ohjelmoimiaan juttuja.

    Esimerkki

    Tässä esimerkki siitä mistä ollaan puhumassa, eli kaavoja saa osaksi nettisivua tähän tyyliin:

    |x|=\left\{\begin{matrix}
x \mbox{, kun } x\geq0 \\
-x \mbox{, kun  } x<0
\end{matrix}\right.

    ja toinen esimerkki

    Aritmeettinen summa 1+2+...+10

    Esimerkeistä ensimmäinen on tehty codecogs.com:n ja jälkimmäinen sitmo.com:n editorilla, ks. linkkilista alla.

    Teknisiä kommentteja

    Huomaa, että yllä oleva kaava saatiin osaksi sivua liittämällä sivuun kuva, jonka src-attribuuttina on sopiva LaTeX-koodin pohjalta kaavoja sisältäviä kuvia tuottavan ohjeman nettiosoite ja tälle ohjelmalle annetaan haluttu LaTeX-koodi parametrina. Huomaa, että alla listatut editorit ovat visuaalisia, eli LaTeX:ia ei tarvitse itse osata ja editorit tarjoavat valmiin linkin lopulliseen kaavaan. LaTeX-osaamisesta ei kuitenkaan ole editoreja käyttäessä haittaa.

    Online LaTeX-editorilistaus

    LaTeX Equation Editor
    (Codecogs.comin) erittäin monipuolinen online LaTeX-editori. Työkalurivien tarjonta on laaja ja helpottaa huomattavasti. Mahdollisuus linkittää luodut kaavat suoraan kuvatiedostona, jossa LaTeX-koodi parametrina (helppo muunneltavuus jälkikäteen). Tämän palvelun luomat kaavat ovat taustaltaan läpinäkyviä (vertaa seuraavaan).
    LaTeX Equation Editor (live update)
    Sitmo.com:n melko hyvä online LaTeX-editori. Kuten edellinen, tarjoaa mahdollisuuden linkittää kuviin niin, että kuvassa LaTeX-koodi parametrina (helppo muunneltavuus jälkeenpäin). Puutteena edelliseen verrattuna rajoittuneepi työkalupaletti. Miinusta myös siitä, että kaavat ovat taustaltaan aina valkoisia, vertaa yllä, mikä taas joissain tilanteissa voi olla hyvä, mutta toisissa huono. Plussaa kaavan live-päivittyminen.
    LaTeX-editori omaan kotisivutilaan pyörimään
    Voit halutessasi asentaa codecogs.com:n kaavaeditorin myös omaan kotisivutilaasi tai käyttämäsi julkaisujärjestelmän osaksi.
    LaTeX to Flash
    LaTeX-kaavat Flash-muotoon niin, että ne voi importata Adoben Flash -editoriin.
    Using LaTeX in Wordpress
    LaTeX-ladonnan käyttäminen Wordpress-sisällönhallintajärjestelmässä.

    Mikä ihmeen LaTeX?

    LaTeX on tekninen ladontajärjestelmä, jonka avulla voidaan kirjoittaa mm. monimutkaisia matematiikan ja fysiikan kaavoja sekä esim. kemian reaktioyhtälöitä ja molekyylimalleja. LaTeX on ammattimaisissa käsissä myös Wordiä parempi suurten kirjallisten kokonaisuuksien kuten kirjojen hallitussa ladonnassa. Perinteinen tapa käyttää LaTeX:ia on kirjoittaa ns. LaTeX-komentoja, jotka sitten muunnetaan lopulliseen ulkoasuunsa ennen tulostusta/julkaisua. Perinteisessä lähestymistavassaan LaTeX ei siis ole WYSIWYG-tekstinkäsittely-ympäristö kuten esim. Word on...tällä taas on sekä hyvät että huonot puolensa. Nykyisin LaTeX:lle on myös visuaalisia editoreja. LaTeX on TeX:n "jälkeläinen".

    Wilma-pikaviestityökalu päivitetty

    Kuopion kaupunki päivitti Wilma-versionsa juhannuksen jälkeen versiosta 2.04 versioon 2.06c. Wilman versiota 2.04 varten tekemäni pikaviestin vastaanottajien valitsemista nopeuttav työkalu ei suorilta toiminut Wilman versiossa 2.06c, joten tein aputyökalustani päivitetyn version 2.06:tta varten. Lisää Wilma-pikaviestityökalu selaimeesi. (Koulusi käyttämän Wilma-asennuksen version näet sisäänkirjautumissivun alareunasta.)

    15.6.2008

    Havaintoja ryhmätyöskentelystä lukion pitkän matematiikan opiskelussa kuluneen lukuvuoden ajalta

    Viime syksynä kirjoitin pitkän matikan ykköskurssilaisten kanssa tekemäni ryhmätyöskentelykokeilun pohjalta muutamia kommentteja; ryhmätyöskentelyn ideana oli tuolloin Mathematics Teacher -lehden artikkelista poimittu idea, jossa opiskelijat harjoitustehtäviä laskiessaan työskentelevät pareittain niin, että toinen on "varsinainen laskija" ja toinen avustaja ja vuoroja vaihdetaan säännöllisesti. Opiskelijoiden palaute oli pääsääntöisesti positiivista.

    Kuluneen lukuvuoden aikana käytin/kokeilin erilaisia positiivista keskinäisriippuvuutta tavoittelevia ryhmätyöskentelymuotoja, mm. "numeroidut päät yhdessä", "kotiryhmä-asiantuntijaryhmä" ja "kolmivaiheinen haastattelu". Koontina kaikista aiheeseen liittyvistä (vapaamuotoisista ja ilman johdattelevia kysymyksiä pyytämistäni) palautteista voisi karkeasti ottaen tehdä seuraavat yleistykset:

    • Ryhmätyöskentely oli opiskelijoiden mielestä mukavaa/positiivista vaihtelua ajoittain käytettynä.
    • Kurssin asioista heikommin perillä olevat / matematiikan opinnoissaan heikommin menestyneet pitivät ryhmätyöskentelystä enemmän kuin kurssin asiassa hyvin perillä olevat / matematiikkaa hyvin osaavat, jotka mieluummin työskentelivät itse tai tutun kaverin kanssa.
    • Opiskelijat kokivat, että se asia(kokonaisuus), jonka oli itse opettanut toisille, jäi hyvin mieleen, mutta muiden itselle opettamat huonommin (mikä on tietysti odotettavaakin).

    Yhteenveto

    Koska eri opiskelijat oppivat eri tavoilla, voisi erilaisia ryhmätyöskentelytapoja ajoittain käyttää jatkossakin niin, että kaikille opiskelijoille tulee "vähän jotain omaa" lähestymistapaa.

    24.4.2008

    Jos polynomilla on kaksoisjuuri, on sillä samassa kohdassa myös derivaatan nollakohta

    Tiistaina numeerisen matikan kurssilla (MAA12) eräs opiskelija oli yhtä tehtävää ratkaistessaan huomaamattaan olettanut, että kun polynomilla on kaksoisjuuri pisteessä a, on sillä myös derivaatan nollakohta samaisessa pisteessä. Huomasin asian ja kysyin oliko opiskelija miettinyt läpi onko asia todella näin. Totesi, että ei tajunnut edes miettiä asiaa, vastaust tuli kuitenkin oikein. Kehotin yrittämään todistaa kyseisen tuloksen ja lupasin itse yrittää samaa.

    Mietin todistusta eilen ja keksinkin sen. Tässä siis kyseinen tulos:

    Lause ja sen todistus

    Olkoon P(x) n:nnen asteen polynomi siten, että sillä on kaksoisjuuri x = t, ts. P(x) on jaollinen 2.asteen polynomilla (x-t)2.

    Väite: P'(t) = 0

    Todistus: Olkoon f(x) = (x-t)2, jolloin f(t) = (t-t)2 = 0. Olkoon lisäksi g(x) sellainen n-2 asteen polynomi, että P(x) = f(x)·g(x). Polynomin P(x) jaollisuuden nojalla tällainen polynomi g(x) on olemassa. Koska g on polynomi, on se kaikkialla derivoituva ja siis sen derivaattafunktio g' on olemassa.

    Funktion f derivaatta on f'(x) = 2(x-t) ja edelleen f'(t) = 2(t-t) = 0. Nyt tulon derivointikaavan

              D(fg) = f'g + fg'
    

    mukaan saadaan, että

              P'(x) = f'(x)·g(x) + f(x)·g'(x)
    

    ja näin ollen

              P'(t) = f'(t)·g(t) + f(t)·g'(t)
                    = 0·g(t) + 0·g'(t)
                    = 0,
    

    mikä todistaa väitteen kaikilla n ≥ 2.