14. syyskuu 2012, 18:08

Editorien taistelu tietämyshallinnassa

Kun päädyin pari viikkoa sitten Org-formaattiin, oli se luonnollisesti edellytys, että Vim ja sen VimOrganizer saadaan kuntoon. Nyt kuitenkin on käymässä niin, että kaikkien (sulavasti toimivien) lisäherkkujen toivossa olen konfiguroinut Emacsia raivokkaasti kohti haluamaani. Nyky-Emacseissa on erittäin toimiva Vi-emulointi, joka ratkaisi kaiken.

VimOrganizer ei niin surkea

VimOrganizer on pohjimmiltaan valtavan laaja ja toimiva, kokonainen ratkaisu. Siinä on tietämyksenhallintaa ajatellen kaikki tarvittava: on toimivat refilet, outlinerit pelaavat ja sitä rataa. Nyt sitten kun rupean ahneeksi, alkaa vaatimuksiakin syntyä. Ja nälkähän kasvaa syödessä. Vain pieni osa haluamistani toiminnoista varsinaisesti liittyy enää tietämyskantaan:

  • otsikot ja ideat talteen hierarkian kera
  • flatfile-malli (helppo grepata, hakea, manipuloida)
  • uusien mietteiden nopea lisääminen (alkuperäinen think-idea, nyttemmin “capture”)
  • aiheiden tagittaminen myöhempää hakemista varten
  • tajunnanvirta ylös hallitusti

VimOrganizer hoitaa kaiken tuon ihan mallikkaasti. Ja muita ideoita:

  • TODO-merkinnät ja niiden hyödyntäminen (pois rainlendarista)
  • ‘literate programming’
  • edelliseen liittyen kaikenlainen piirtelytoiminnallisuus: graafit ja kaaviot
  • tehtävien edistymisen automaattinen seuranta
  • päivämäärät ja tehtäviin liittyvä aikaseuranta
  • edelliseen liittyen kaikki päivämääräjutut pois Rainlendarista Org-modeen. Agendaa saa kivoissa muodoissa.
  • linkitykset eri osien välillä

Tätä listaa kun lukee ja mietin omia henkilökohtaisia tavoitteitani tietämyskannan suhteen, edelleen epäilen syitäni siirtyä Emacsiin. No yksi syy siirtymiseen on Vimin sisäinen rajoitus foldauksien suhteen. Foldatut TODO-merkinnät eivät voi saada väriä. Emacsin folditekniikoista en ole perillä, ja välillä epäilevästi diffailenkin puskureita epäillen tietokatoa, mutta tutkimalla ja konffaamalla asioita olen kehittänyt jonkinlaista luottamusta asiaan.

Mutta syitähän on muitakin kuin KB, ja Emacsiin olen aiemminkin halunnut tehdä siirtoja (Lisp-moodit, AucTeX, kaikki se). Miksi tunnen kovaa syyllisyyttä ja haikeutta nyt tämän kanssa, kun vihdoinkin tämä voisi tapahtua.

Emacs ja Evil

Evil on moderni vi-emulointipaketti, joka on kirjoitettu puhtaalta pöydältä sulavaa toiminnallisuutta varten. Vanhat emuloinnit (vi-mode, viper, vimpulse) rikkovat pohjalla lymyävää Emacsia enemmän tai vähemmän, ja skriptit tykkäävät huonoa. Evil tuntuu välttävän kaiken tämän ja jopa wdired-puskurissa saa nyt kirjoitella vi-näppäimillä asiaa! Hyvänoloinen kustomointi on tietenkin mukana, eli näppäimet saa kyllä väännettyä haluamalleen tasolle. Evil tukee tosiaan myös tyyppikohtaisia konffeja, joten org-modeen olen kirjoittanut omat kustomoinnit (tai ne ovat kehityksen alla) ja sitä rataa.

Olen jo harkinnut esimerkiksi Emacsin Twitter-klienttien kokeilemista. ERC ei sekään kamalalta vaikuta, vaikka irssistä ei noin vain siirrytäkään.

Organisointi

Koska orgmode hoitaa n+1 asiaa samassa paketissa (babelin kanssa kyseessä on vakava kilpailija Officelle), niin olen miettinyt, miten minun pitäisi lähestyä tiedon hallinnointia.

Olen toisaalta kuullut ja ymmärtänyt, että org-tiedostot saavat vapaasti kasvaa viisinumeroisiin rivilukemiin, eikä tee edes tiukkaa. Toisaalta kehotetaan paljon, että esimerkiksi hoidetut hommat (TODO->STARTED->DONE) arkistoidaan lopuksi pois. Ja orgmode (ja VimOrganizer) tukevat kyllä useiden org-tiedostojen kokoelmia oikeissa paikoissa.

Siirsin varsin nopeasti org-tiedostoni (kaksi siinä vaiheessa) omaan hakemistoon ~/org. Tämä on vielä sitä kokeiluvaihetta, joten nämä tulevat muuttumaan, mutta tässä on hakemiston/tiedostojen nykyinen rakenne:

  • main.org: tietämyskanta, jossa on tällä hetkellä kaikenlaista sekaisin. Opiskeluun liittyvää roskaa, orgmoden näppäimiä (harjoittelun vuoksi kirjoitin) ja VimOrganizerin vastaavia. Kaikenlaista sekavaa.
  • thinktank.org: se pohtimani ratkaisu, josta siirretään entryjä pääkantaan. Conky näyttää tankin “kokoa” palkkina 0-33. Pitäisi pitää nollilla mahdollisimman hyvin.
  • watch.org: listaan katsomattomia videoita tai vastaavaa. RSS-feedeistä tulevan kaman lepuutan RSS-lukijassa mutta joskus tavaraa tulee muualtakin. “Watchlist”, siis. Ja hieno puoli tietenkin on, että voin todota ne ja voin kirjata mietteitä kunkin pätkän alle.

Tämä on hyvä alku. Entäs muita ideoita? Nämä ovat toteuttamatta, mutta käyneet mielessä.

  • (Huono) calendar.org: jotain kalenterijuttuja. Hyvin epäolennainen oikeastaan, kun vähän miettii. Jos haluan kirjata kurssien lukujärjestykset ja tunnit agendaa varten, niin varmastikin “Opiskelu”-otsake jossain muualla olisi fiksumpi kuin varta vasten perustettu kalenteritiedosto.
  • (Huono) opiskelu.org: samoiten kurssit ja opintoihin liittyvä tauhka sitten omaksi tiedostokseen… Ei tunnu tulevan tarpeeksi tavaraa sitä varten.
  • todo.org: no tämä oli yksi niitä toimivampia ajatuksia organisointiin liittyen: tietämyskannassa olisi ajattomampi asia ja tehtävät toisessa tiedostossa, josta voisi tarpeen tullen myös arkistoida pois tehtyjä tehtäviä. Mutta toisaalta ei hyvä ajatus: koko tietämyskannan ideahan on ratkaistujen ongelmien säilöminen ja ratkaisujen uudelleenkäyttö. Kun tulee ongelma, tehdään TODO. Kun ongelma ratkaistaan, TODOa täydennetään ja syntyy valmis DONE-elementti ja ratkaisun elementit taitavat seurata kuin itsestään mukana.
  • työjutut.org: (erikoistapaus todo.orgista) jahka niitä töitä taas tulee, tämä voisi olla varteenotettava ratkaisu. Eivät mene sekaisin muun kanssa, tai jotain. Idean fiksuus on vähän siinä ja siinä.

Ja tietenkin babel-hommissa tehdyt orgit taitaa olla erittäin fiksua pitää omina tiedostoinaan. Kuka tietää, ehkä gradu ei olekaan LaTeXia tai DocBookkia vaan Org-muotoa. Babelin ja kirjallisen ohjelmointitavan avulla koko systeemin voisi tietyissä tapauksissa pitää yksissä tiedostoissa. Aitoa uudelleentoistettavaa tutkimusta.

Kannansiirrokset ja työpöytäintegraatiot

VimWiki seistä kököttää koskemattomana. Minulla on jo valmiit TODO-elementit sekä pari ideaa alipylpyröissä asian toteuttamiseen. Tarvitsen luultavasti hieman vakautta nykyiseen org-rakenteeseen, ennen kuin ryhdyn siirrokseen. Toisaalta vasta siirrettyäni vanhan datan uuteen systeemiin voin todella nähdä, mitä tarvitaan ja miten asiat järjestyvät.

Conkyn olen valjastanut palvelemaan alkeellisen TODO-greppauksen kanssa näyttämään todoja työpöydän reunalla. 200 pikselin leveyteen on aika tympeä saada selkeästi mitään näytettyä, joten pohdin muita ratkaisuja. Todot voisi näyttää rajoitetulla tavalla (ehkä vain priorisoidut näkysälle). Rainlendarin saattaisi vielä saada mukaan peliin orgmoden ICS-tulostuksien voimin. Pää on kuitenkin voimakkaasti kääntynyt Awesomella demonstroituihin org-agenda -esityksiin. Jotain on ilmeisesti mahdollista esittää ilmeisesti ilman awesomen sisäänrakennettuja ilmaisimia, ja niistä minun on otettavaa selvää. Riittääköhän esimerkiksi dzen2 vai joudunko etsimään syvemmälti…

Näppäimiä

VimOrganizerin näppäimet ovat perin tyydyttäviä, ja Emacs ei suoraan muutu täydelliseksi vim-outlineriksi pelkän Evilin voimin. Näppäimiä on hieman tehtävä, jotta rakenteen kanssa pyöriskely on sujuvaa. Emacsin luonteen ansiosta (kaikki koodataan interaktiivisiksi funktioiksi, joita on triviaalia yhdistellä ja käsitellä) homma on käynyt aika helposti. Org-modessa voidaan ottaa M-x describe-bindings ja saadaan kokonainen listaus erilaisia org-spesifisiä komentoja. Org-manuaalia seuraamalla voidaan katsoa myös, mitä mikäkin tekee. Evilin tapauksessa konffi näyttää sitten tältä:

(define-key evil-normal-state-map ",d" 'kill-this-buffer)
(define-key evil-normal-state-map ",ag" 'org-agenda)

;; org agenda -- leave in emacs mode but add j & k
(evil-define-key 'emacs org-agenda-mode-map "j" 'evil-next-line)
(evil-define-key 'emacs org-agenda-mode-map "k" 'evil-previous-line)

(evil-define-key 'normal org-mode-map
  ; views
  (kbd "SPC") 'org-cycle
  ; movements
  "gj" 'org-forward-heading-same-level
  "gk" 'org-backward-heading-same-level
  "gh" 'outline-up-heading
  ; edits
  (kbd "RET") (lambda ()
                (interactive)
                (progn
                 (org-end-of-line) ; ensure the new headline always goes below
                 (org-insert-heading-respect-content)
                 (evil-append 1)))
  ; below: consider the Emacs way (new headline + TABbing) (and skip this map)
  (kbd "S-RET") (lambda ()
          (interactive)
          (progn
            (org-meta-return)
            (org-metaright)
            (evil-append 1)))
  ",r" 'org-refile ; this is quite useless... google for better ones
  ",n" 'org-narrow-to-subtree
  ",q" 'widen
  ; table
  ",v" (lambda () (interactive) (org-table-recalculate ALL))
  ; dates...
  ",cd" 'org-deadline
  ",cs" 'org-schedule
  ",cc" 'org-time-stamp
  ",ci" 'org-clock-in
  ",co" 'org-clock-out
  )

Lispien kanssa on niin luonnollista pyöriä. Ainakin nyt kun niitä on vuosikaupalla hakattu kuosiin. Elisp on vielä yleisestikin varsin säyseäkäytöksinen lisp, joten isoja ongelmia ei tule olemaan.

Esimerkkinä tuo Enterin uudelleenkonffaaminen. Emacsin funkkareita pläräämällä (apuna on kiva komento C-h k, eli describe-key: näpäytä ohjeessa mainittu näppäinkombo sille ja se palauttaa siihen kytketyn funktion dokumentaatiot) pystyy ketjuttelemaan ja rakentelemaan. Vimin näppäinmakrohenkinen ratkaisu toimii toki samalla logiikalla, mutta on altis hajoilemaan, kun joku kolmas taho uudelleenmäärittelee näppäimiä miten sattuu. Emacsissa on tehty vedenselvä rajaveto näppäinten ja funktioiden välille.

(Oho, yli 1100 sanaa. Neljännesyeggellinen. Tässähän innostuu vallan.)

Tageja: , , ,

---
---

---

Aiheen vierestä