Sunday 2 September 2012

Noulife-statusta metsästämässä

Kesän aikana on tapahtunut paljon kaikenlaista. Olen uiskennellut, olen ollut sosiaalinen (hyh meitä nykynuoria), ja kuten olen täälläkin hehkuttanut, olen löytänyt uusia blogeja, joita olen sitten lukenut ja analysoinut tarkemminkin. Eräs näistä blogeista, Yeggen Steven sellainen, on hehkuttanut Emacsia ja Lispejä niin paljon, että kiinnostukseni heräsi.

Emacs

Latasin siis Emacsin, sekä tutustuin ja rakastuin sen kirjoittamisominaisuuksiin. Alkuun ohjelman kuuluisissa pikanapeissa ei ollut mitään järkeä, mutta jo toisena päivänä, jona tein duunissa erästä XML-projektia Emacsilla, olin oppinut kuinka avataan- tai tallennetaan tiedosto, miten haku-ominaisuudet toimivat, miten päästään käsiksi komentoriviin, ja mikä tärkeintä, miten suoritetaan Lispiä.

Avaus- ja tallennuspikanapit (C-x-f ja C-x-s) ovat ihan yhtä hyviä kuin Windows-kulttuuriinkin pesiytyneet (C-o ja C-s), mutta jo ees- ja taaspäinetsintä oli tehty paremmin kuin Windows-tekstinkäsittelijöissä yleensä. C-S antaa kirjoittaa ikkunan alalaitaan hakusanan, jota sitten haetaan kursorin jälkeisistä sijainneista. C-r taas hakee hakusanaa kursoria ennen sijaitsevasta dokumentista. Hakiessa ei tarvitse koskea laisinkaan hiireen, mikä voittaa mm. Visual Studiossa löytyvän hakuhärpäkkeen, jossa ei toki hyvinä päivinä tarvitse koskea hiireen, mutta jolla on tarve esitellä itseään graafisesti ja viedä näyttötilaa :P

Emacsin komentoriviominaisuudet ovat MAHTAVAT! M-! (missä M viittaa Altiin tai Esciin) tuo ikkunan ala-laitaan kyselyn, jonka tulos ohjataan järjestelmän shelliin, mikä Windowsin tapauksessa on cmd.exe. Eikö kuulostakin kivalta? Ai että mihin sitä voisi käyttää? Noh, ainakin Mercurial - versionhallinnan kanssa on usein pidettävä IDEn ohella komentoriviä auki, koska IDE:n Mercurial-integraatio on huono, ja graafisen TortoiseHg:n opiskelu oli paljon raskaampaa kuin komentoriviloitsujen. Jos IDE:n korvaa e-tiedätte-kyllä-millä-macsilla, voi kömpelön alt+tabaamisen sijaan painaa M-! ja kirjoittaa hg - komentoja suoraan emacsista. Näin voimme integroida emacsin kaikkiin versionhallintoihin, joissa on komentoriviliittymä, eli joukkoon, joka käsittää jotain Visual Studioon kolvattuja sourcesafeja lukuunottamatta kaikki käytetyt versionhallinnat.

Lisäksi, jos jollakulla sattuu olemaan emacs juuri nyt ladattuna, kokeilkaapa painaa ensin C-u, sitten M-! ja kirjoittaa komeentokehotteeseen "ECHO Hello World!". Ai mitä? Tuloste, jonka olisi pitänyt ilmestyä Shell Command Output - bufferiin, ilmestyikin auki olleeseen dokumenttiin? Kai ymmärrätte tämän tarkoittavan sitä, että C-u M-! - näppäinyhdistelmän avulla millä vain kielellä toteutettuja toimintoja voi hyväksikäyttää emacsissa?

Lisp

Sanokaa mitä sanotte, en ole kovin hyvä Lispissä, ja olen mahdottoman laiska lukemaan internetissä sijaitsevia "kirjoja". Siksi en jaksanut opiskella Elispiä, vaan sen sijaan menin ja ostin Amazonilta Peter Seibelin kirjan Practical Common Lisp, joka on puolen viikonlopun lukemisen jälkeen saanut minut näkemään ohjelmoinnin uudessa valossa. Tietysti olen oppinut kieltä vasta sen verran, että osaan toteuttaa CL:llä juuri ja juuri keskinkertaisia komentoriviohjelmia, jotka vaativat Lispboxin alleen runtimeksi, mutta kirja on ehtinyt näyttää lispistä puolia, joista saa muualla vain haaveilla. Makrot mahdollistavat kielen kustomoinnin tavalla, joka saa Java- ja C# - ohjelmointiin tottuneen pään pyörälle... tai sitten se on tämä syysnuha, jota olen kehitellyt viikonlopun aikana.

Toinen kirja, jonka ostin samalla, oli O'reillyn kustantama Clojure-kirja, joka ei ole tässä käden ulottuvilla, joten en voi luntata siitä yksityiskohtia. Kunhan saan Common Lisp-kirjan siihen pisteeseen, että voin myöntää itselleni osaavani jotain (katsotaan siinä 2030 uudelleen), opiskelen Clojurea ja todennäköisesti pyrin siirtämään ainakin kotijavaprojektini sille. Jos joku on elänyt tynnyrissä, Clojurehan on kieli, joka tarjoaa paljon Lisp-herkkua, Java-luokkakirjaston ja Javan alustariippumattomuuden samassa paketissa. Taivaassa tehty tulitikku siis.

Kuten sanoin, siirrän todennäköisesti vain kotiprojektini Clojurelle. Syy siihen on, että ihmiset ilmeisesti eivät tykkää opiskella uusia asioita, joten suhtaudun epäillen siihen että töissä koodipohjiani sörkkivät arvostaisivat minua lispin valinnasta. Jännä nähdä, sillä en omaa kokemusta siitä miten ihmiset reagoivat C-murteiden ulkopuolelta tuleviin kieliin, vaan perustan sanomani Yeggen Steven kokemuksiin.

Linux

Tämä on viimeinen pisara, jolla virallisesti möin sieluni "normaalien ihmisten" ulottumattomiin. Olin äärettömän kyllästynyt pikkuläppärilläni olleeseen Windows XP:hen, jossa ainoat käyttämäni non-portaappelit ohjelmat olivat Office ja Visual Studio, joiden toiminnallisuus tippuisi rajusti jos asentaisin taas raudan tehoja syömään seiskan. Lisäksi Lisp-maailmaan sukeltaessani olin huomannut kuinka Lispereille(kin) asiat olivat paremmin vaihtoehtokäyttisten maassa, ja Windowsia tuettiin jos ja kun jaksettiin.

Kokemukseni Linux-maailmasta olivat kuitenkin keskinkertaiset. Aina kun olin kokeillut distroja, oli joko jotain hajonnut, moni asia oli ollut huonommin kuin Windowsilla, tai tilanteessa ei ollut mitään syytä siirtyä Windowsilta pois. Nyt kuitenkin sain työkavereilta suosituksen kokeilla CentOSää. Viime kappaleen perustelut tuovat monia syitä tuoda vaihtoehtokäyttis vähintään Windowsin rinnalle, ja korvattavien nonportaappeleiden ohjelmien vähyyden vuoksi en nähnyt mitään syytä potkia terästankoa, joten tyhjensin pienpäpän kovalevyn täysin ja asensin CentOS kuudennen sille.

Tähän mennessää tämä vaihto on vaikuttanut erittäin hyvältä. Emacs korvaa hyvin raskaat IDEt, Java- ja Lispit toimivat, ja vaikka Pidgin onkin pikaviestimenä heikko esitys verrattuna Livemese -09iin, työn alla oleva MEsE/yool-messenger korjannee kyseisen ongelman. Toivottavasti. Joskus.

Metabloggausta

Tätä tekstiä ei ole kirjoitettu bloggerin selainnäkymässä, vaan päätin kokeilla Yeggen strategiaa kirjoittaa näitä emacsilla. Asiaa/pituus - suhde, sekä silkka pituus, vaikuttavat tässä tekstissä melko hyviltä. Pääsen myös soveltamaan skriptejä tämän toteuttamisessa. Ainoa skripti, jota käytin, lisää </p> \n <p> - merkit puskuriin aina painaessani returnia. Tämä johtuu siitä, että tässä pikkukoneella taginapit ovat erittäin pöljässä paikassa, ja kirjoitan tätä html:nä, joten tuollainen skripti säästää aikaa ja vaivaa. Jos jotakuta kiinnostaa miltä tämä koodi näyttää, niin olkaa hyvä: (defun insert-paragraph () (interactive)(insert "</p> \n <p>")) (global-set-key (kbd "<RET>") 'insert-paragraph)

Ensi kertaan! Silloin minulla saattaa olla asiaa MEsEstä/yool-messengeristä, tai mahdollisesti emacs-blogger - integroinnista, jota suunnittelen tutkimatta onko sitä jo toteutettu. Nähdään!

No comments:

Post a Comment