Oahpa väljaõppekursus Tiinale 10. - 17. mai 2016 1. Installeerida vajalik tarkvara Oahpa arendamiseks (mysql, Python, Django, mysql-python). pip install Django=1.3 Python2.7 ja Django1.3 töötavad koos. Python2.7 ei tööta koos Django uuemate versioonidega. 2. Installeerida teised head programmid: SubEthaEdit, mingi mysql kasutajaliides? 3. Ülevaade: kus asuvad Oahpa isendite lähtekoodid ja Oahpa andmebaasi laadimiseks mõeldud andmefailid? 4. Ülevaade: millistele keeltele on Oahpa isend loodud, millised neist asuvad gtlab-is ja millised gtoahpa-s. 5. Dokumentatsioon (lihtne) http://oahpa.no/addlang (tehnilisem) ped/doc/common/OahpaTechnicalDocumentation.jspwiki ped/doc/common/UpdatingTheOahpaDatabase.jspwiki 6. Bugzilla kasutamine Rubriik "Oahpa and Konteaksta", alamrubriik sme-oahpa. Priority P1(highest)..P5. New -> Assigned -> Fixed 7. Lokaalne veebiserver oma arvutis ja kuidas sellel Oahpat testida. Fail settings.py Mis on erinev serveri settings.py-st: - Oahpa rakenduse tee /Users/tiina/main/ped/nnn_oahpa vs /home/nnn_oahpa/nnn_oahpa - Andmebaasi asjad: oahpa andmebaasi nimi, mysql kasutajanimi ja parool - FST-de ja CG-de teed (NB! Mõnedes Oahpades kasutatakse hfst-d ja mõnedes xfst-d.) * univ_oahpa on erinev kõigist teistest, "väiksematest" oahpadest. Rohkem mooduleid (courses, survey, geo), mistõttu nõuab ka rohkem lisapakette. Lahendus: univ_oahpa jaoks virtuaalne keskond (virtualenv). Aktiveerida keskkond source venv/bin/activate ja installeerida vajalikud paketid nii: pip install -r requirements.txt Teadaolevad probleemid ja lahendused lokaalse univ_oahpa püstipanekul: * from django.core.management import execute_manager ImportError: cannot import name execute_manager -> Django versioon liiga uus. Oahpa on kirjutatud Python2.7 ja Django1.3 või 1.4 jaoks. Django1.6-s käsk execute_manager puudub. * MySQL-python1.2.4 annab installeerimisel veateate => võta selle asemel versioon 1.2.5. * Võimalik, et vaja ka pip install --upgrade Distribute * Probleemid GeoIP-ga. Installeerida GeoIP ja GeoS, kirjutada teed settings.py faili. 8. Oahpa arendamise tüüpilised tegevused - Andmebaasi regenereerimine * uue andmebaasi loomine mysql> create database est_oahpa character set utf8 collate utf8_bin; * andmebaasi tabelite genereerimine python manage.py syncdb * andmebaasi sisuga täitmine ./parafedaba.sh (käsk anda kataloogis ped/est_oahpa) Fail error.log - Muudatuste tegemine Python-koodis Töö käik: - Esmalt teha valmis oma arvutis ja testida lokaalses veebiserveris - Kui on kindel, et töötab, siis * cd ped/nnn_oahpa * svn ci * ssh tiina@gtlab.uit.no või tiina@gtoahpa.uit.no * cd /home/nnn_oahpa/nnn_oahpa * svn up * sudo service nnn_oahpa restart (gtoahpa-s) või 1) sudo nnn_oahpa.sh --stop 2) sudo nnn_oahpa.sh --run (gtlab-is) 9. Emergency situations - Mingi Oahpa on päriselt maas => Uuesti käima panna. Dokumentatsioon "Don't Panic" (http://giellalt.uit.no/infra/Don'tPanic.html). Kui vaja parandada-täiendada, siis svn-is on selle faili nimi ped/doc/common/httpdserver.jspwiki - Vasta ja Sahka ei tööta a) Kõik vastused loetakse õigeks. b) Valed veateated. c) Sahka dialoog ei kulge normaalselt. Kõige lihtsamini avastatav viga: dialoogis "Buorre beaivi!" ei öelda Sulle tere vastu selle nimega, mis kirjutasid. Õige on nii: Buorre beaivi! Mun lean Heaika! Mii du namma lea? Mun lean Tiina. Bures Tiina. 1) Uurida faili /var/logs/lserv.log - Kas Lookup-serverile saadetud laused on sellised nagu viimati Vastas ja Sahkas näha olid? Kas morf. analüüsi tehakse? Kui seal midagi kahtlast, siis "sudo service lookupserv restart" 2) Missugused nnn_oahpa protsessid töötavad? Mõnikord on pärast Oahpa restarti rippuma jäänud mõned vanad Pythoni protsessid. Need tuleb ära tappa. nnn_oahpa protsesside loetelu saab nii: ps -ef | grep 'nnn_oahpa' Peab olema kuus protsessi, millest viis tükki viitavad ühele neist. Kui on rohkem, siis on vanemad protsessid need, mis kuuluvad mingile eelmisele käivitamisele ja tuleb hävitada. 10. Oahpa rakenduse struktuur 1) Põhikataloogis: settings.py, andmebaasi installeerimise shelliskript parafedaba.sh, install.py-skriptid 2) nnn_drill kataloogis (see on Oahpa sisuline osa): models.py - andmebaasi struktuur forms.py - ekraanivormide sisu (menüüd jms) views.py game.py - tegevused, mida teha, kui kasutaja on teinud mingid valikud ja vajutanud "New game" (teha andmebaasist päring etteantud settingutega), "Check answers" (võrrelda kasutaja antud vastuseid "uue mängu" loomisel genereeritud õigete vastustega), "Show correct answers" vms. game.py laiendused, milles on veel mõned klassi Game alamklassid: - qagame.py (Morfa-C ja Vasta-F) - cealkka.py (Vasta-S) - sahka.py (Sahka) 3) game.py-s vastavad klassidele mängud järgmiselt: QuizzGame - Leksa BareGame - Morfa-S MorfaGame - Morfa-C NumGame - Numra Cardinals ja Ordinals Klokka - Numra Clock Dato - Numra Date 4) templates (üks selline on põhikataloogi all ja teine nnn_drill all) - html-failid (veebilehtede mallid, milles muutujate väärtused jms saadakse Pythoni skriptidest forms.py, views.py, game.py jt) 5) media kataloog - frontend (css, javascript, pildi- ja helifailid) 6) locale - lokaliseerimisfailid locale/fi/LC_MESSAGES/django.po - kasutajaliidese stringide tõlked soome keelde 11. Lokaliseerimine 1) Kui kasutajaliidesesse midagi lisatud, siis uuendada django.po failid käsuga: python manage.py makemessages -a (siis tehakse kõikide locale-s olevate keelte jaoks) 2) Redigeerida faile django.po. NB! Rida #,fuzzy tuleb kustutada, muidu pole tõlkimisest reaalset kasu! 3) svn ci 4) ssh tiina@gtoahpa.uit.no 5) cd path_to_locale 6) svn up 7) python manage.py compilemessages 8) sudo service nnn_oahpa restart 12. FST-de kasutamine Oahpas Numra - automaatide poole pöördutakse jooksvalt mängu käigus, et genereerida uued arvud / ajaväljendid Morfa-S - sõnavormide genereerimiseks (andmebaasi installeerimise ajal) Vasta ja Sahka - nii etteantud lauset kui kasutaja kirjutatud sisendit saadetakse analüüsimiseks pipeline'i preprocess + morfFST + disambCG 13. Andmete teisendamine csv -> oahpa-xml Kataloogis ped/est/inc on olemas Perli skript ./csv2xml.pl. Uute andmete puhul vaadata enne skripti sisse ja vajadusel redigeerida, enne kui käivitada. 14. Sõnastiku pööramine (Tõlked src/ failides olemas, vaja täita kataloog engsme/ sisuga.) * Kataloogis ped/script on hulk xsl-skripte, mida tuleb natuke kohandada. Failis README on kirjas, mis järjekorras ja kuidas skripte rakendada. Kui kõik tehtud, siis peaks kataloogi ped/script all olema kataloog engsme, mille sisu siis lihtsalt ped/sme/engsme alla kopeerida. * Uute xml-failide svn-i lisamisel tunnistatakse need vaikimisi binaarfailideks. Selliste failide puhul svn diff log ei näita muudatusi, mis failides tehti. Et seda vältida, tuleb anda käsk svn propdel svn:mime-type PATH/TO/FILE_NAME 15. Oahpa andmebaasi uuendamine serveris * Soovitav teha õppetöövälisel ajal (hilja õhtul või nädalavahetusel). * Pärast andmebaasi uuendamist testida Leksat (kui lisati tõlkeid), Morfa-S ja Morfa-C kõiki sõnaliike (kui installeerisid käänduvaid või pöörduvaid sõnu). Kui installeerisid nimisõnu, siis kontrolli, kas possessiivide ülesanne (praegu nimega Testing) ka endiselt töötab. Kui installeerisid verbe, siis kontrolli, kas verbituletiste ülesanne (Suorggádusat) ka töötab. * Oahpades, mis veel ei ole reaalses kasutuses, võib lihtsalt vana andmebaasi kustutada ja uute andmetega täita (nagu teed lokaalselt). univ_oahpa puhul nii teha ei tohi! * Kui on vaja juurde lisada uus fail (näiteks sõnade tõlked uude keelde), siis installeerida failid ühekaupa, mitte parafedaba.sh-skripti kasutades, näiteks python install.py --file ../sme/engsme/N_engsme.xml jne. * Kui on mingisse leksikonifaili juurde lisatud uusi sõnu, siis kasutada lippu --append, näiteks python install.py --file ../sme/src/N_smenob.xml --paradigmfile ../sme/meta/N_paradigms.txt --tagfile ../sme/meta/tags.txt --append * Kui leksikonifailis on tehtud muid muudatusi (mõned kirjed kustutatud või parandatud), siis installeerida see üks fail nagu tavaliselt (vastavad sõnad kirjutatakse andmebaasis üle), näiteks python install.py --file ../sme/src/A_smenob.xml --paradigmfile ../sme/meta/A_paradigms.txt --tagfile ../sme/meta/tags.txt * univ_drill_log tabelid tuleb kindlasti säilitada, kui kogu muu andmebaas uuesti genereeritakse.