Muutamia LaTeX-vinkkejä

LaTeXilla kirjoittaminen ei ole kovinkaan yksinkertaista, jos tekstin lisäksi haluaa myös hieman erikoisempia rakenteita tai kuvia. Onneksi Internetistä löytyy paljon ohjeita ja yksi hyvä lähde on ”Pitkänpuoleinen johdanto LaTeXinkäyttöön: Eli opi LATEX 2ε 133 minuutissa” (pdf).

Helpointa LaTeXin lähestyminen on käyttämällä jotain valmista dokumenttipohjaa kuten Tapio Leppälammen Thesis-pohjaa (zip, 23KB) tai Mikko Hämäläisen Thesis -pohjaa. Mallipohjista voi katsella eri menetelmiä toteuttaa asioita ja soveltaa omiin tarpeisiinsa. Etenkin Leppälammen mallipohjassa on hyvin käsitelty eri asioiden toimivuutta LaTeXissa, vaikkakin lähtökohta on matemaattispainotteiseen dokumenttiin.

Tässä muutamia vinkkejä, jotka ovat itsellä tulleet eteen. Lista täydentynee, kun ongelmakohtia ilmenee.

Kuvien liittäminen dokumenttiin
Kuvien liittäminen LaTeX-dokumenttiin ei ole niin yksinkertaista kuin mitä sen haluaisi olla. LaTeX osaa helposti käsitellä eps-formaatissa olevia kuvia, mutta kaikkia kuvia ei ole järkevää muuntaa eps-muotoon.

Kuvia voidaan liittää onneksi myös muissa formaateissa, kun dokumentti käännetään PDFLatexilla, joka syö tutumpia PNG, JPG ja PDF -tiedostoja. Tämä onnistuu määrittelemällä grafiikat \usepackage[pdftex]{graphicx} -pakettikomennolla. Tämän jälkeen ei tosin Latexilla kääntö enää onnistu, eli DVI ja PS -muotoiset dokumentit jäävät saamatta, mutta koska PDFLatex tuottaa lopputuloksena PDF:iä, ei muita formaatteja tarvitakaan.

Lyhyesti sanottuna, kuvan liittäminen dokumenttiin onnistuu \includegraphics[scale=0.8]{kuvahakemisto/kuva} -komennolla, jossa voi lisäksi määritellä esimerkiksi skaalauksen scale-parametrillä. Skaalausta voi myös tehdä sisällyttämällä kuvan \scalebox{0.8}{} -laatikkoon.

Kuvien sijoittuminen dokumentissa onkin sitten aivan toinen asia. Hyvänä sääntönä voi kuitenkin pitää, että kuva ei ainakaan tule siihen kohtaan, johon sen haluaisit. Asiaan on opastettu hyvin ”Pitkänpuoleinen johdanto LaTeXin käyttöön” -oppaassa.

Taulukot
Taulukoidenkin kanssa joutuu hieman askartelemaan ja taiteilemaan, joten kannattaa lukaista ohje Wikibooksin LaTeX-kirjasta.

Kaavioiden otsikot ja viittaukset
Taulukoiden, kaavioiden ja kuvien yhteydessä, on dokumentteihin hyvä lisätä myös otsikkoteksti ja viittauskenttä. Kaavio merkitään \begin{figure} -alueen sisälle ja lisätään otsikkoa varten \caption{} -merkintä ja viittaukseen \label{} -merkintä. Nyt haluttuun kaavioon voi viitata tekstissä \ref{fig:kaavio} -merkinnällä, joka lisää tekstiin kaavion numeron. (LaTeX/Floats, Figures and Captions)

\begin{figure}[!h]
	\includegraphics{kuvahakemisto/kuva}
\caption{Kaavion otsikkoteksti}
\label{fig:kaavio}
\end{figure}

Usean rivin kommentti:
Tekstin jättäminen kommentiksi dokumenttiin onnistuu lisäämällä rivin eteen % -merkki tai merkitsemällä teksti comment-alueeksi. Komento löytyy \usepackage{verbatim} -paketista.

\begin{comment}
Lorem ipsum
Dolor sit
\end{comment}

Viitteet
Viittausten hallinta on LaTeXissa hoidettu kätevästi ja siitä kannattaa lukea Wikibooksin LaTeX-teoksen viite-osiosta. Kaikki viitteet saa tulostumaan käyttämällä \nocite{*} -merkintää.

UTF-8 -merkistöllä kirjoittamista varten määritellään tekstin enkoodaus seuraavasti:

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

Kuitenkin, jos aikoo kirjoittaa dokumenttia eri alustoilla, etenkin myös Windowsilla, kannattaa tyytyä suosiolla perinteiseen Latin1 (ISO 8859-1) -merkistöön.

Mac OS X:n Terminal -ohjelman asetukset kuntoon

Kuvittelisi, että Mac OS X:ssä Terminaalin käyttäminen olisi yksinkertaista, mutta todellisuus on tarua ihmeellisempää. Terminaali vaatii hieman rakkautta, etenkin jos on tottunut tekemään asiat jossain muussa käyttöjärjestelmässä, kuten esimerkiksi Linuxissa. Tässä siis muutamia vinkkejä, joilla OS X:n Terminalin (suom. Pääte) asetuksia voi viritellä. Oletuksena on, että käytössä on OS X Leopard ja shellinä bash (oletus).

Backspace ja delete

Valitse Terminal-valikosta Preferences ja Settings-välilehden alta Keyboard-välilehti. Jos Key Mappingseissa ei kohdassa del (forward delete) ole arvoa \033}3~ niin lisää kenttään tuo arvo (send string to shell).

Mene ”Advanced” -välilehdelle ja ota rasti pois kohdasta ”Delete sends Ctrl-H”.

Jos Backspace ei toimi Terminaalin kautta otettaessa yhteyttä Linux-koneeseen, lisää käyttäjän kotihakemistossa (~/) sijaitsevaan ~/.bashrc -tiedostoon seuraava rivi: export TERM=xterm. Ota asetukset käyttöön komennoilla source ~/.bash_profile. Ongelma voi ilmetä etenkin screeniä käytettäessä ja screen vastaa vain ”Wuff —- Wuff!!”.

Page up & down ja Home & End toimimaan ilman Shiftiä

Valitse Terminal-valikosta Preferences ja Settings-välilehden alta Keyboard-välilehti

  1. Key mappingista valitaan haluttu toiminto
  2. Actioniksi ”send string to shell”
  3. page down: string: \033[6~
  4. page up: \033[5~
  5. home: \033[1~
  6. end: \033[4~

Lisää käyttäjän kotihakemistossa (~/) sijaitsevaan ~/.inputrc -tiedostoon seuraavat rivit. Jos tiedostoa ei ole, luo sellainen.

# allow the use of the Home/End keys
"\e[1~": beginning-of-line
"\e[4~": end-of-line

# allow the use of the Delete/Insert keys
"\e[3~": delete-char
"\e[2~": quoted-insert

# mappings for "page up" and "page down" to step to the 
# beginning/end of the history
"\e[5~": beginning-of-history
"\e[6~": end-of-history

# alternate mappings for "page up" and "page down" 
# to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Käynnistä Terminaali uudelleen, tai ota asetukset käyttöön komennoilla source ~/.bash_profile ja bind -f ~/.inputrc

UTF-8 merkistö

Valitse Terminal-valikosta Preferences ja Settings-välilehden alta Advanced-välilehti

  • Rasti pois ruudusta ”Escape non-ASCII input”
  • Poimi Character encoding -kohdasta: Unicode (UTF-8)

Lisää ~/.inputrc -tiedostoon rivit:

# Be 8 bit clean.
set input-meta on
set output-meta on
set convert-meta off

Lisää ~/.bash_profile -tiedostoon rivi export LC_CTYPE=en_US.UTF-8

Ota muutokset käyttöön käynnistämällä Terminal uudelleen tai komennoilla source ~/.bash_profile ja bind -f ~/.inputrc

Irssi screenissä ja UTF-8

Muokkaa screeniä ajavan koneen merkistöasetuksia ~/.inputrc -tiedostoon edellä mainitulla tavalla.

Lisäksi lisää ~/.bashrc -tiedostoon seuraavat rivit:

export LANG="en_US.UTF-8"
export LC_CTYPE="fi_FI.UTF-8"
export LC_TIME="fi_FI.UTF-8"
export LESSCHARSET="utf-8"

Aseta Irssissä (0.8.10 tai uudempi) terminaalin merkistöksi UTF-8 antamalla komento /set term_charset UTF-8 ja aseta Recode-asetukset seuraavasti:

/set recode ON
/set recode_autodetect_utf8 ON
/set recode_fallback iso-8859-15
/set recode_out_default_charset utf-8
/set recode_transliterate ON

Jos kanavan nimessä on ISO-8859-1 ääkkösiä, pystyy esimerkiksi kanavalle #ääöö liittymään käyttämällä komentoa /eval join #\xE4\xE4\xF6\xF6. Siis ä -> \xE4 ja ö -> \xF6.

Valitettavasti Irssi 0.8.12 rikkoi tuon aikaisemmin hyvin toimineen kikan, mutta onneksi ominaisuus palautettiin ennalleen. Ennen Irssin seuraavaa versiota, ominaisuuden saa käyttöön asentamalla Irssin Nightly buildin tai kääntämällä Irssi SVN:stä.

Irssi ja Page up & down jouhevammin

Applen kannettavista tietokoneista on karsittu turhat näppäimet pois ja niiden mukana muun muassa myös Page up & down. Nyt Irssissä backlogia selatessa pitää aina naputella Esc+ylös/alas, joka on hieman työlästä, kun lisäksi Esciä joutuu painamaan joka kerta uudestaan. Asia on onneksi helppo korjata.

Sivutus-näppäimet voi asettaa toimimaan myös fn+ylös/alas -yhdistelmään komentamalla Irssissä seuraavasti:

/bind meta-up scroll_backward
/bind meta-down scroll_forward

Viitteet

Ohjeet kasattu Elefanttipuheen kootuista ohjeista ja Matti Hiljasen ohjeista, joita on tähän kirjoitukseen täydennetty GNU development under Mac OS X -ohjeilla sekä ajantasaistettu tarvittavilta osin.

Outlook 2003 ja juhlapyhät kalenteriin

Microsoftin Outlook on yllättävän pätevä sähköpostiohjelma ja tarjoaa kalenteritoimintonsa osalta muun muassa juhlapyhät kalenterimerkintöinä. Juhlapyhät pitäisivät näkyä ilmeisesti vakiona, mutta toiminnossa on selkeästi pieni bugi.

Juhlapyhien näkyminen pitää käydä aktivoimassa uudelleen navigoimalla
”Tools > Options > Calendar options” ja klikkaamalla ”Add holidays” ensin pois päältä ja sitten takaisin päälle.

Tämän jälkeen juhlapyhät ilmestyvät kalenteriin. Vielä kun kalenteriin saisi myös merkkipäivät, liputuspäivät sekä nimipäivät.

Versionhallinnan parhaat käytännöt koodaajalle

Versionhallinnasta ja siihen liittyvistä asioita on kirjoitettu paljon, mutta useissa kirjoituksissa on keskitytty lähinnä teknisiin asioihin ja eri versionhallintajärjestelmien mahdollistamiin asioihin. Harvat kirjoitukset keskittyvät käytännön asioihin ja niin sanottuihin parhaisiin käytäntöihin, joita soveltamalla versionhallinnan käytöstä saa paljon enemmän irti.

Muutamia käteväksi todettuja ja omasta mielestäni ”parhaita käytäntöjä” koodaajan näkökulmasta ovat muun muassa:

  1. Työn kulku
  2. Vie koodi versionhallintaan usein ja aikaisin
  3. Vie yhtenäisiä kokonaisuuksia
  4. Kirjoita järkeviä commit-viestejä
  5. Tee koodaustyylin muutokset erillään oikeista muutoksista
  6. Älä vie tiedostoja, jotka muuttuvat dynaamisesti
  7. Älä vie koodia, joka ei käänny


1. Työn kulku
”Version Control with Subversion” -kirja selvittää normaalin työn kulun, joka on hyvä omaksua versionhallintaa käytettäessä (hieman sovellettuna):

  1. Hae koodista tuorein versio versionhallinnasta
  2. Toteuta koodiin tehtävät muutokset
  3. Hae tuorein versio ennen koodin vientiä versionhallintaan
  4. Aja testit uudestaan ja varmista, että tekemäsi muutokset toimivat
  5. Vie koodi versionhallintaan yhtenä kokonaisuutena
  6. Selvitä konfliktit
  7. Tarkista, että versio kääntyy myös build-palvelimella
  8. Korjaa virheet tai palauta

2. Vie koodi versionhallintaan usein ja aikaisin
On suositeltavaa toteuttaa Check In Early, Check In Often -periaatetta. Tällöin muut näkevät mitä olet tekemässä ja koodi on muidenkin käytössä.

”If the code isn’t checked into source control,
it doesn’t exist.” – Coding Horror

Lisäksi jos piilottelet koodia omalla koneellasi, etkä synkronoi sitä versionhallintaan pitkään aikaan, voi muutosten yhdistämisestä tulla erittäin työlästä. Pieniä kokonaisuuksia on helpompi verrata ja saadaan aikaan vähemmän konflikteja.

Vaikka idean järkevyys ja käytännöllisyys on helppo ymmärtää, on käytännön toteutus usein jotain muuta. Itse olen ainakin huomannut, että omaa koodia tulee helposti pantattua levyn nurkalla, kunnes kyseinen ominaisuus on ”valmis” ja testattu.

”Hiding your code until it’s ”done” may feel safer, but it isn’t. Sharing your ongoing code with your coworkers is scary, much less the world — but it also results in feedback and communication that will improve your code and draw you closer to the project you’re working on.” – Coding Horror

3. Vie yhtenäisiä kokonaisuuksia
On suositeltavaa viedä versionhallintaan loogisesti yhtenäisiä kokonaisuuksia. Tämä tekee versiohistorian seuraamisesta huomattavasti hyödyllisempää, etenkin jos muutokset käsittelevät useita eri tiedostoja.

Eli, jos teet useita yhtäaikaisia muutoksia, jaa ne useampaan loogiseen kokonaisuuteen ja vie ne osissa. Näin yksittäisten muutosten historiaa on helpompi seurata ja nopeuttaa mahdollisten bugien metsästystä myöhemmin. Jos siis teet ominaisuutta A, B ja C sekä korjaat bugeja 1, 2 ja 3, pitäisi niistä muodostua vähintään kuusi committia. Vastaavasti, jos teet suuria muutoksia tai toteutat itsenäisiä muutoksia useisiin loogisiin moduleihin, vie muutokset erikseen, vaikka ne olisivatkin osa isompaa kokonaisuutta.

Käytännössä sitä kuitenkin usein huomaa koodaavansa hieman sieltä sun täältä sitä ja tätä, ja lopulta järkevän yhtenäisen kokonaisuuden vieminen versionhallintaan on käytännössä mahdotonta.

Tietenkin tätä periaatetta on helpompi noudattaa sovelluksen ylläpidossa kuin sovelluksen kehittämisessä, jossa puutteellisia ja koodausta kaipaavia asioita on paljon. Teoriassa järkevä ”commit”-tapa on helppo omaksua, mutta käytännössä yhtenäisen kokonaisuuden siirtäminen versiohallintaan vaatii itsekuria ja koodauksen suunnittelua.

4. Kirjoita järkeviä commit-viestejä
Kirjoita aina jokin kommentti viedessäsi koodia versionhallintaan. Kommentin tulisi olla lyhyt ja ytimekäs, ja kertoa mitä muutettiin ja miksi. Jos teit useita muutoksia, kirjoita ne omille riveilleen.

On myös kätevää lisätä kommentin eteen jokin tunniste kuten Fix tai Add, viitaten minkä tyyppisiä muutoksia teit. Tämä myös helpottaa sisällön filtteröintiä myöhemmin.

Korjatessa jotain tiettyä bugia tai pyydettyä ominaisuutta, on suositeltavaa lisätä bugin tai issuen numero commit-viestiin.

”If the changes you made are not important enough to comment on, they probably are not worth committing either.” – loop label

5. Tee koodaustyylin muutokset erillään oikeista muutoksista
Koodaustyyli voi kokea muutoksia ja kehitysvälineessä voidaan esimerkiksi ottaa käyttöön automaattiset koodimuotoilut. On erittäin suositeltavaa, että koodin muotoiluun vaikuttavat muutokset tehtäisiin erillään oikeista muutoksista.

Jos koodimuotoilut ja muutokset sekoitetaan keskenään, on muutosten jäljittäminen ja kohdistaminen käytännössä mahdotonta.

6. Älä vie tiedostoja, jotka muuttuvat dynaamisesti
Versionhallinnassa olevien tiedostojen olisi hyvä olla sellaisia, joiden sisällöstä valta on käyttäjillä eikä esimerkiksi kehitysympäristöllä. Esimerkiksi ei kannata viedä Eclipsen asetuksia tai projekti-tiedostoa, jotka muuttuvat riippuen kehittäjän haluamista asetuksista. Kyseiset tiedostot eivät varsinaisesti liity projektin koodiin ja aiheuttavat vaan turhaa synkkaamista. Myös projektin binäärit ja Javadocit voidaan mieltää turhiksi versionhallinnan näkökulmasta.

(via Perforce)

7. Älä vie koodia, joka ei käänny
Ei ole suositeltavaa viedä versionhallintaan koodia, joka ei käänny ja hajottaa projektin myös muille kehittäjille. Toisaalta, ideaalissa tilanteessa, ei pitäisi koskaan lähteä toimistolta viemättä koodia versionhallintaan.

Jos teet muutoksia, jotka vaikuttavat muihin, harkitse koodin branchaamista muutoksen toteuttamiseksi ja yhdistä koodi, kun olet valmis. Toisaalta, toimimaton koodi ei ole syy olla viemättä sitä versionhallintaan.

”It’s better to have a broken build in your working repository than a working build on your broken hard drive.” – loop label

Yhteenveto
Versionhallinnan käyttö on omaksuttu osaksi sovelluskehitystä ja toivottavasti edes osa yllä olevista periaatteista on jo useimpien kehittäjien käytössä. Ellei käytössä olevia työvälineitä hyödynnetä kunnolla, jää paljon etuja saavuttamatta. Edes muutaman yllä olevan käytännön omaksuminen kuten ”loogiset kokonaisuudet” ja ”commit-viestit”, helpottaa jo kummasti.

Versionhallinta on käsitteenä laaja ja sen käyttöön liittyy paljon muitakin asioita, joista voidaan määritellä niin sanotut parhaat käytännöt. Tälläisiä ovat muun muassa koodin hallintaan liittyvät asiat, versionhallinnan soveltaminen ja toimintojen laajentaminen, mutta ei niistä sen enempää.

IE 6 ja Web-sivujen testaus Windowsissa

Kuvittelin, että jo tässä vaiheessa Windows XP:n Service Pack 2:n ja 3:n jälkeen, olisi oikeasti päästy jo eroon Internet Explorer 6:sta, mutta olin väärässä. Jostain piti siis löytää keino, jolla web-sivustoa voisi testata tuolla Microsoftin tekeleellä.

Hieman asiaa selvitettyäni, löysin Tredosoftin kirjoituksen, jossa käsiteltiin eri Internet Explorerin versioiden asentamista Windows XP:hen. Käytännössä tämä onnistuu hyödyntämällä DLL-uudelleenohjausta. Jutussa viitataan Evoltin Internet Explorer -arkistoon, josta löytyy kätevästi Zip-paketoituna ”standalone”-versiot muun muassa IE 5:sta, IE 5.5:sta ja IE 6:sta. Tredosoftin kirjotuksesta löytyy asennuohjelma kaikkien eri versioiden asentamiseen, mutta kannaa käyttää selaimista standalone-versioita, sillä asennusohjelman kanssa voi tulla ongelmia, jos haluaa lisäksi asentaa Safarin.

Standalone-versio IE 6:sta riitti täyttämään testauksessa olleen aukon, vaikkakin vain rimaa hipoen. Ainakin vaikutti siltä, että keksit eivät toimisi ja lisäksi selain toimi erittäin epävakaasti. Loppupeleissä olisi melkein helpointa ja kätevintä asentaa virtuaalikoneeseen Linux ja käyttää vanhoja selaimia Winen kautta.

No, jospa vaikka ensi vuonna voisi jo unohtaa IE 6:n ja siirtyä (suunnittelussa) edes hieman lähemmäs nykyaikaa.

OpenOffice.org Calc ja kaavio kahdella datasarjalla

OpenOffice.org on kätevä toimisto-ohjelmistopaketti, mutta välillä siihen kuuluvien ohjelmistojen käyttäminen ei ole niin yksinkertaista. Yleensä kuitenkin pienen säätämisen ja pähkäilyn jälkeen saadaan aikaan haluttu lopputulos.

Olen pitänyt pienimuotoista harjoituspäiväkirjaa OpenOffice.org Calc -ohjelman avulla ja tilastoidusta datasta saa muodostettua kätevästi erilaisia kaavioita. Kahden eri suuruusluokan datasarjan yhdistäminen samaan kaavioon ei kuitenkaan ollut niin yksinkertaista kuin olin kuvitellut. Toinen sarja valtasi koko kaavion ja toisesta sarjasta näkyi vain suoraa viivaa.

Muutaman yritys-erehdys -kerran jälkeen keksin, että kaavion datasarjat on kuin onkin mahdollista asettaa eri Y-akselille. Tämä on erittäin kätevää, jos toisen sarjan arvot ovat suuria ja toisen pieniä. Pari kuvaa kertokoon enemmän.

kuva 1 kuva 2

Eli valitaan kaaviosta yksi objekti, eli viiva, ja oikealla hiiren napilla sen ominaisuudet. Objektin ominaisuuksista voidaan ”Options”-välilehdeltä valita ”Tietolähteiden tasaus” -kohdasta ”Toinen Y-akseli”.

Windows Server 2003:n sammuttaminen ja varmistusikkuna

Windows Server 2003:ssa on kaikenlaisia palvelimen pitämiseen liittyviä ominaisuuksia, kuten sammuttamisen tai uudelleen käynnistämisen yhteydessä oleva varmistusikkuna, johon voi kirjoittaa sammuttamisen syyn. Varmasti ihan kätevä ominaisuus palvelimissa huoltokatkojen seuraamiseen, mutta peruskäyttäjälle turha hidaste. Onneksi kyseisen ”Shutdown Event Tracker” -ominaisuuden voi myös kytkeä pois päältä.

”Shutdown Event Tracker” -ominaisuuden poistaminen onnistuu muokkaamalla Group Policyjä eli kirjoittamalla Windowsin ”run”-komentoikkunaan ”gpedit.msc” ja WindowsNetworking.com -sivuston vinkillä klikkailemalla oikeaan kohtaan ja kytkemällä palvelun pois päältä. Sama palvelu löytyy myös Windows XP:stä, mutta on vakiona pois päältä.

Shutdown event tracker Shutdown event tracker Shutdown event tracker