<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
<channel>
    <title>SIGKILL - Programmering</title>
    <link>http://sigkill.dk/blog/</link>
    <description>Hello, World!</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.5.2 - http://www.s9y.org/</generator>
    <managingEditor>athas@sigkill.dk</managingEditor>
<webMaster>athas@sigkill.dk</webMaster>

    <image>
        <url>http://sigkill.dk/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: SIGKILL - Programmering - Hello, World!</title>
        <link>http://sigkill.dk/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Haskell og Debian</title>
    <link>http://sigkill.dk/blog/archives/308-Haskell-og-Debian.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/308-Haskell-og-Debian.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=308</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=308</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt; Tilbage i 2007 var mit &lt;a
href=&quot;http://sigkill.dk/blog/archives/250-Godt-nytar.html&quot;&gt;nytårsforsæt&lt;/a&gt;
at lære &lt;a href=&quot;http://www.haskell.org&quot;&gt;Haskell&lt;/a&gt;. Eftersom jeg
skriver om det nu, må det vel antages at det ikke blev opfyldt,
hvilket er korrekt. Dog er jeg nu begyndt at rette op på det ved at
læse lærebogen &lt;a
href=&quot;http://www.cs.nott.ac.uk/~gmh/book.html&quot;&gt;Programming in
Haskell&lt;/a&gt; og løse &lt;a
href=&quot;http://projecteuler.net&quot;&gt;Euler-problemer&lt;/a&gt;. Lærebogen er
ganske udemærket, dens eneste brist er at den ikke forudsætter nogen
form for forgående programmeringserfaring og således bruger en del
sider på at beskrive grundlæggende programmeringskoncepter (og bogen
er ikke for tyk til at begynde med). Det lader til at være et generelt
problem med mange af de funktionsorienterede sprog: Stort set alle
tilgængelige bøger er lærebøger beregnet til helt nye programmører, en
situation hvor Common Lisp, der har mesterværker som &lt;a
href=&quot;http://en.wikipedia.org/wiki/The_Art_of_the_Metaobject_Protocol&quot;&gt;Art
of the Metaobject Protocol&lt;/a&gt;, skiller sig noget ud.&lt;/p&gt;

&lt;p&gt;For at opnå erfaring med brug af Haskell i rigtige projekter er jeg
gået over til en ny window manager, &lt;a
href=&quot;http://xmonad.org/&quot;&gt;xmonad&lt;/a&gt;, baseret på den tese at jeg vil
blive så irriteret over diverse ubekvemmeligheder at jeg bliver
motiveret til at ændre i koden. Der er allerede adskillige ting der
irriterer mig (først og fremmest de elendige genvejstaster, et punkt
som &lt;a href=&quot;http://www.nongnu.org/ratpoison/&quot;&gt;ratpoison&lt;/a&gt; har
forvænt mig med).&lt;/p&gt;

&lt;p&gt; Jeg er også begyndt at overveje at droppe Debian som styresystem
til fordel for Ubuntu. Min oprindelige argumentation for at bruge
Debian var at det ville være lettere at vedligeholde Debian end at
tilpasse Ubuntu til mine til tider usædvanlige
præferencer. Efterhånden er jeg begyndt at tvivle på dette, især efter
mit system er begyndt at nægte at vise output på både laptop-skærmen
og den tilsluttede VGA-skærm på samme tid.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Fri, 27 Jun 2008 21:47:32 +0200</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/308-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Min testing-filosofi</title>
    <link>http://sigkill.dk/blog/archives/259-Min-testing-filosofi.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/259-Min-testing-filosofi.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=259</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=259</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
  Nu synes jeg efterhånden jeg har nok erfaring med skrivning og
  vedligeholdelse af test-suiter til middelstore programmer, til at
  jeg på den vanlige vis kan eksponere mine holdninger og meninger om
  emnet på denne
  blog. &lt;a href=&quot;http://en.wikipedia.org/wiki/Unit_test&quot;&gt;Unit
  testing&lt;/a&gt; er jeg ikke den store tilhænger af - unit testing er alt
  for baseret på infleksible retningslinjer, og skaber et alt for
  stort overhead i forhold til hvad jeg får ud af mine tests. Tag som
  eksempel - jeg har i den seneste uge skrevet nogen tests der tester
  diverse funktioner i forbindelse med Lisp-syntax parseren
  i &lt;a
  href=&quot;http://common-lisp.net/project/climacs/&quot;&gt;Climacs&lt;/a&gt;. Disse
  funktioner er afhængige af at et større generelt framework fungerer
  korrekt, for slet ikke at snakke om at de også tester at selve
  parseren parser korrekt. Ifølge unit-testing-metodologien skulle jeg
  teste hver funktion isoleret (i virkeligheden hver enkelt klasse,
  men det giver ikke mening når objektsystemet, som CLOS, er
  metode-fikseret og ikke klasse-fikseret), og
  producere &lt;em&gt;mock-objekter&lt;/em&gt; som overholder det offentlige
  interface, men derudover blot producerer dummy-resultater. Det
  skulle sikre at hver enkelt test kun tester &lt;em&gt;ét eneste
  aspekt&lt;/em&gt; af den samlede kodebase - en enkelt funktion, i dette
  tilfælde. Jeg må indrømme at jeg ikke kan se den store idé i dette,
  og jeg bruger derfor rigtige objekter, klasser og funktioner i mine
  tests. For mig fungerer test-suiten primært som en regressionstest,
  og selv hvis vi ser bort fra det massive overhead som det ville
  kræve at lave mock-objekter for hele den stak af funktionalitet de
  testede funktioner afhænger af, ville jeg aldrig ende med at
  opnå &lt;em&gt;mere&lt;/em&gt; dækkende tests, end med min nuværende ad-hoc
  testing. Det betyder måske at en fejl i en funktion kunne komme til
  udtryk i at en urelateret test fejler, men det er ikke et problem,
  som jeg ser det. Når man først er klar over at en fejl eksisterer,
  er det ofte ret nemt at spore, og test-suiten har opfyldt sit
  primære mål, nemlig at rejse et flag om at programmet &lt;em&gt;som
  helhed&lt;/em&gt; ikke fungerer korrekt. Jeg går meget mindre op i om den
  enkelte funktion er korrekt, end jeg går op i om hele programmet kan
  arbejde sammen (og logisk følger førstnævnte af sidstnævnte). Derfor
  forsøger jeg så vidt muligt at skrive mine tests, så de kræver at så
  meget som muligt af programmet fungerer korrekt, for at testen er
  succesfuld. Interaktionen mellem delene i et program, er nok en af
  de ting som oftest kan forfalde med tiden, og derfor finder jeg det
  fjollet at bruge ekstra energi på at undgå at teste disse
  interaktioner i ens test-suite.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Mon, 19 Feb 2007 22:56:58 +0100</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/259-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Optimering i højniveausprog</title>
    <link>http://sigkill.dk/blog/archives/258-Optimering-i-hjniveausprog.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/258-Optimering-i-hjniveausprog.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=258</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=258</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
&lt;a href=&quot;http://www.randomhacks.net/articles/2007/02/10/map-fusion-and-haskell-performance&quot;&gt;Dette blog-indlæg&lt;/a&gt; gør mig glad fordi det viser hvordan ydelse kan komme fra de former for inferens en compiler kan udføre omkring højniveausprog, i stedet for at delegere det ud til programmøren at lave mikrooptimeringer. Det viser hvordan vi har en reel chance for at gøre højniveausprog (nok især de statiske funktionsorienterede) bedre ydende i det almene tilfælde end traditionelle super-ydelses-sprog som C. Efterhånden som vores viden om automatisk optimering vokser, vil begrænsninger i hvad sprogene garanterer nok betyde mere og mere for hvor meget der kan optimeres, og det vil ramme især C hårdt, da compileren ikke rigtigt kan regne med noget som helst.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 11 Feb 2007 23:32:00 +0100</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/258-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Reformatterings-cirkusset</title>
    <link>http://sigkill.dk/blog/archives/256-Reformatterings-cirkusset.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/256-Reformatterings-cirkusset.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=256</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=256</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
  Normalt ville jeg ikke tage mig af hvordan folk (mis)bruger deres
  computere, men det er lang tid siden jeg har blogget, og jeg kom
  næsten til omtrent at love at skrive et indlæg hvori jeg på diskret
  vis kritiserer en unavngivnet person, så &lt;em&gt;here goes&lt;/em&gt;. En af
  de ting jeg erindrer fra da jeg brugte Windows, og en ting som jeg
  stadigvæk observerer på Internettet, er at mange teknisk vidende
  brugere ofte reformaterer deres maskine (i virkeligheden,
  reformatterer (system)filsystemet på deres harddisk(e), men herefter
  blot refereret til som &quot;formattering af maskinen&quot;) og geninstallerer
  styresystemet. Dette er til tider nødvendigt - Windows er
  karakteristisk for at kunne ende i en tilstand af næsten total
  infunktionalitet, hvor det er markant nemmere at rydde systemets
  tilstand og starte forfra, end at forsøge at uddrive de onde ånder
  som har besat systemet. Da jeg brugte Windows var 4-5 måneder en
  rimelig levetid for en installation, og det var nærmest forventet at
  man benyttede sig af reformattering for at løse tekniske problemer
  (om folk der vælger denn løsning vitterligt er &quot;teknisk vidende&quot;
  skal jeg lade gå ubesvaret). Min nuværende styresystemsinstallation,
  &lt;a href=&quot;http://www.gentoo.org&quot;&gt;Gentoo GNU/Linux&lt;/a&gt;, er fra
  1. januar 2004, og har lært mig et og andet omkring glæderne, eller
  manglen på samme, ved hyppige formatteringer.
&lt;/p&gt;

&lt;p&gt;
  Et af de mest meningsløse argumenter jeg har hørt som forsvar for
  hyppig formattering er, at det skulle give en bedre backups. Hvis
  man konstant formatterer sin maskine ville jeg da ellers mene at man
  til sidst bliver træt af at tage fuldt dækkende backups, og begynder
  at sjuske (&quot;det der har jeg ikke ændret på siden sidst!&quot;), eller
  begynder at smide ting væk som man ikke umiddelbart kan se hvad man
  skal bruge til (disse ting får man ofte lyst til at se på adskillige
  år efter, noget jeg selv har oplevet for nyligt). Den idéelle
  løsning er naturligvis at gemme al ens data på en seperat partition,
  eller fysisk disk, hvis man er voldsom, og nøjes med at formatere
  det filsystem som selve styresystemet, og måske programmer, er
  installeret på. Men det er måske for kompliceret...
&lt;/p&gt;

&lt;p&gt;
  Et andet argument er at man holder sit system rent ved hyppige
  formatteringer. Det åbenlyse svar er &lt;em&gt;nej, man &lt;em&gt;holder&lt;/em&gt;
  det ikke rent, man &lt;em&gt;udsletter&lt;/em&gt; og genskaber det
  rent&lt;/em&gt;. Det er ikke en løsning, det er en
  genstart. Computersystemhygiejne er ikke en handling, det er en
  process, en måde at arbejde med sit system på. Det handler om ikke
  at køre tilfældige programmer i non-sandboxes, og lade være med at
  bruge for mange unødvendige programmer (de daemons som
  Windows-programmer er så begejstrede for at starte tæller som
  &quot;unødvendige&quot;). En reformattering af hygiejneårsager er en
  falliterklæring, det er som
  at &lt;a href=&quot;http://en.wikipedia.org/wiki/Great_Fire_of_Rome&quot;&gt;brænde
  Rom af, af renoveringshensyn&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  Hvad er så de forbudne frugter som venter, hvis man undlader at lade
  ens system fungere som metafor
  for &lt;a
  href=&quot;http://en.wikipedia.org/wiki/Phoenix_%28mythology%29&quot;&gt;fugl
  Føniks&lt;/a&gt;? Det vigtigste er at det pludselig giver mening at bruge
  meget tid og energi på at tune og &lt;em&gt;customize&lt;/em&gt; systemet så det
  passer til ens egen smag og arbejdsrytme. Jeg har brugt mange timer
  på at skrive scripts og arrangere opsætning af mit nuværende
  styresystem (og arbejdsmiljø), noget jeg aldrig ville have gjort
  hvis det skulle gøres om flere gange om året. De fleste
  Windows-brugere bruger ikke ret meget tid på at customize deres
  arbejdsmiljø, måske fordi Windowskulturen bare ikke lægger op til
  den slags, måske fordi de programmer de bruger ikke er synderligt
  velegnede til det, eller måske fordi det med så hyppige
  formatteringer er spild af tid. Det er lidt en skam, for et miljø
  opsat til ens personlige præferencer og vaner er nu en ret rar ting
  - det forvandler computeren til en udvidelse af ens bevidsthed, i
  stedet for blot at være et komplekst værktøj med et begrænset
  interface.
&lt;/p&gt;

&lt;p&gt;
  Så, for jeres egen skyld, drop det der reformatteringscirkus, lad
  jeres system vokse med jer, lad være med at starte forfra hele
  tiden. Der er heller ingen der køber nye sko, lige når de gamle er
  ved at være trådt til. Udøv lidt basal computerhygiejne, så bliver
  det pludseligt meget mere effektivt at undlade at foretage
  regelmæssige reformatteringer.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Wed, 31 Jan 2007 00:01:58 +0100</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/256-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Blogindlæg og OOPD-eksamen</title>
    <link>http://sigkill.dk/blog/archives/255-Blogindlg-og-OOPD-eksamen.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/255-Blogindlg-og-OOPD-eksamen.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=255</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=255</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
  På fredag skal jeg til eksamen i &lt;em&gt;Maskinarkitektur&lt;/em&gt;, og jeg
  terper således hårdt i denne uge for at være klar. Indtil videre har
  mine studier lært mig at slagskibe er alt for svage i Civilization
  IV, og at Oblivion stadigvæk er et rigtigt sprødt spil. Derudover
  har jeg læst nogle over-middel interessante blogindlæg, som jeg i
  mangel af kreativitet vil linke til her:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a
  href=&quot;http://onsmalltalk.com/programming/smalltalk/objects-classes-and-constructors-smalltalk-style/&quot;&gt;Artikel
  om Smalltalk&#039;s objektsystem&lt;/a&gt;. Smalltalk er sejt, især
  pga. &lt;a href=&quot;http://www.squeak.org&quot;&gt;Squeak&lt;/a&gt;, og idéen med at
  repræsentere alt som beskeder sent rundt mellem objekter er en
  interessant idé, som især kommer til sin ret i de store, integrerede
  miljøer som Smalltalk er så kendt for.&lt;/li&gt;
  &lt;li&gt;En artikel
  om &lt;a
  href=&quot;http://codist.biit.com/fiche/thecodist/article/the-joy-of-programming&quot;&gt;glæden
  ved at programmer&lt;/a&gt;. Det har jeg
  selv &lt;a
  href=&quot;http://www.sigkill.dk/blog/index.php?url=archives/223-Om-entusiasmen-ved-at-programmere.html&amp;amp;serendipity%5Bcview%5D=linear&quot;&gt;tidligere
  skrevet om&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;En &lt;a href=&quot;http://www.zaplesi.net/blogs/list/33&quot;&gt;artikel om
  images&lt;/a&gt;, den facilitet hvormed programmeringssprog kan forsøge at
  afhjælpe på defekter i moderne styresystemers konceptuelle defekter
  (eller forskelle).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Siden sidst er min gruppe og jeg også blevet færdige med vores
  eksamensopgave i &lt;em&gt;Objektorienteret Programmering og Design&lt;/em&gt; -
  opgaven gik ud på at implementere en simulation af en biotop hvori
  finker interagerer med hinanden. Det var et overraskende interessant
  projekt, der var velegnet til Java-style OOP (surprise?), selvom jeg
  i nogle dele af programmet savnede multiple inheritance
  og &lt;a href=&quot;http://en.wikipedia.org/wiki/Mixin&quot;&gt;mixins&lt;/a&gt;. Og i de
  fleste dele af programmet savnede jeg anonyme funktioner (det der
  fis med anonyme indre klasser giver mig skrivekrampe).
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Tue, 23 Jan 2007 23:36:29 +0100</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/255-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Emacs-paradokset</title>
    <link>http://sigkill.dk/blog/archives/251-Emacs-paradokset.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/251-Emacs-paradokset.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=251</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=251</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
  Der er visse ting, som de fleste programmører er enige om resulterer
  i bedre software - kommentarer, klare funktioner, minimal
  tilstandsmutation, unit-tests, indkapsling, osv. Emacs er
  interessant i den forbindelse at de fleste af disse ting ignoreres,
  men at det resulterende program alligevel er yderst anvendeligt, og
  endda let at ændre for folk der ikke er bekendte med
  kodebasen. Hvilke af disse facetter af traditionel
  softwareudvikling-best-practice er det helt præcist Emacs ser stort
  på?
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Kommentarerne&lt;/strong&gt; i Emacs er ikke udpræget gode,
  men til gengæld er hver eneste funktion og global variabel
  tilknyttet en &lt;em&gt;docstring&lt;/em&gt; der beskriver dens funktion (en
  slags proto-Javadoc) og som kan læses fra Emacs&#039; eget interne
  hjælpesystem. Men at finde ud af &lt;em&gt;hvordan&lt;/em&gt; en typisk
  Emacs-funktion gør sit arbejde, i modsætning til &lt;em&gt;hvad&lt;/em&gt; den
  gør, er ofte lidt mere kompliceret.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Klare funktioner&lt;/strong&gt; er ikke noget Emacs gør noget
  synderligt ud af - funktionerne er ofte ganske store, og det store
  antal af små hjælpefunktioner der normalt karakteriserer
  funktionssprog er ikke at finde i meget Emacs Lisp - men det bør vel
  ikke undre, da Emacs Lisp ikke er synderligt funktionsorienteret i
  det hele taget.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tilstandsmutation&lt;/strong&gt; er derimod noget af det Emacs
  går højt op i - stort set alle Emacs-programmer er baseret på at
  kalde brugerkommando-lignende funktioner der flytter rundt på
  markøren og indsætter og sletter tekst - som en superpowered
  makro. Man bruger typisk noget ophæng der sørger for at skærmen ikke
  bliver opdateret mens dette sker, og at markørens oprindelige
  position bliver gendannet, for at det ikke skal virke for
  forvirrende for brugeren. Men at mutere skjult global data, som
  bufferen eller markøren, er en typisk teknik indenfor programmering
  af Emacs-funktioner, og det kan gøre koden noget tricky at
  læse. Fordelen er, at hvis man kunne udføre processen manuelt, er
  det ret nemt at overføre det til Emacs Lisp-kode, da man stort set
  bare ville kunne kalde redigeringskommandoerne selv.&lt;/li&gt;
  &lt;li&gt;Emacs har ingen &lt;strong&gt;unit-tests&lt;/strong&gt; eller anden form for
  automatiseret testing overhovedet. &lt;em&gt;Moving on...&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Indkapsling&lt;/strong&gt; a la Java og C++ er anathema i
  Emacs (og delvist, indenfor Lisp i almindelighed). Der er ingen
  sort-hvid grænse mellem interne funktioner og det eksterne
  interface, men derimod en kontinuerlig linje hvor funktioner går fra
  at være langhårede og skrøbelige, til at være mere brugerorienterede
  og simple. Alle funktioner og globale variable (næsten) er
  dokumenteret og kan bruges i Emacs Lisp-programmer, og når man skal
  finde en funktion til at løse en given opgave, slår man ikke op i en
  reference som i de fleste andre sprog, men søger i stedet i alle
  definerede funktioner og deres dokumentation efter de(t) nøgleord
  der relaterer til det problem man vil have løst. Emacs&#039;
  datastrukturer er typisk simple og åbne.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Til trods for disse brud på almindelige konventioner er Emacs et
  utroligt stabilt og velfungerende program, og at skrive kode, der
  benytter sig af Emacs&#039; store funktionsbibliotek er ganske
  behageligt, til trods for manglen på indkapsling og abstraktion. Det
  er ikke ligetil at foreklare årsagen til dette fænomen, men jeg har
  en vag mistanke om at det er fordi det skaber en tæt forbindelse
  imellem manuel tekstredigering af programmering af
  tekstmanipulationsfunktioner. At alle funktioner, selv de &quot;intern&quot;,
  er direkte tilgængelige for alle Emacs Lisp-programmer, kan kun
  fungere fordi Emacs fra bunden af blev designet til at understøtte
  dette - alle funktioner er veldokumenterede, og hvis man vil være
  helt sikker på at man har forstået dem, er kildekoden kun et enkelt
  tastetryk væk. Emacs&#039; arkitektur er, set fra et
  softwareudviklingsynspunkt, ikke synderligt elegant, korrekt eller
  ren, men man føler sig så herligt hjemme i den - den er
  super-pragmatisk og behagelig, ligesom man føler sig mere
  komfortabel i ens mindre-til-voldsomt rodede og beskidte værelse,
  end man gør i en steriliseret hospitalsgang der skinner af
  marmor. Tekstredigering er ofte et beskidt og hacky arbejde, og
  måske skaber Emacs&#039; knapt-så-teoretisk-perfekte arkitektur et
  passende værktøj til en sådan opgave (det samme fænomen kan
  observeres i programmeringssproget Perl).
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sun, 07 Jan 2007 16:06:48 +0100</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/251-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Syntaksklasser for programmeringssprog</title>
    <link>http://sigkill.dk/blog/archives/247-Syntaksklasser-for-programmeringssprog.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/247-Syntaksklasser-for-programmeringssprog.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=247</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=247</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
  For mig at se, når jeg vurderer syntaksen for et
  programmeringssprog, findes der tre primære klasser af syntakse (som
  er en total uformel klassifikation og ikke har noget med sprogteori
  at gøre, så lad være med at tro det har):
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;De strukturerede syntakse, alá Lisp og Scheme, hvor syntaksen
  direkte svarer til en eller anden simpel repræsentation - f.eks. et
  træ, og hvor den derudover er meget regulær og det er helt klart
  hvordan den vil være repræsenteret i hukommelsen når den er blevet
  indlæst.&lt;/li&gt;
  
  &lt;li&gt;De token-baserede sprog, der består af enkelte udelelige
  symboler, der kan kombineret på arbitrær eller semi-arbitrær vis,
  uden mange syntaktiske regler. Brainfuck er et fint eksempel, hvor
  alle tokens består af ét tegn, og den eneste regel for et gyldigt
  program er at der skal være et balanceret antal af firkantede
  parenteser. Et lidt mere seriøst sprog i denne kategori kunne være
  APL.&lt;/li&gt;
  
  &lt;li&gt;De grammatiske syntakse, som vi kender dem fra C, C++, Java,
  Haskell, mfl. Disse har alle nogle (relativt) komplekse grammatiske
  regler, ting som operatorpræcedens og er generelt svære at forudsige
  hvordan vil se ud som et syntakstræ. Til gengæld har de ofte mange
  syntaktiske &quot;genveje&quot; der kan få kode til at fremstå kort og
  elegant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  Når jeg vurderer et sprog opfatter jeg, stort set, alle syntakse
  inden for hver af de tre klasser for ækvivalent - hvis det er en
  grammatisk syntaks &lt;em&gt;vil&lt;/em&gt; der være operatorpræcedens,
  der &lt;em&gt;vil&lt;/em&gt; være regler for hvordan visse ting
  bare &lt;em&gt;skal&lt;/em&gt; se ud, og jeg vil sandsynligvis ikke være i stand
  til at lave meningsfyld preprocessing på kodens parse-træ (jeg ved
  der er undtagelser, jf. Smalltalk der ikke har
  operatorpræcedensregler). Til gengæld forventer jeg også syntaktiske
  genveje, såsom C&#039;s array-indekserings-syntaks eller Haskell&#039;s
  syntaks for uendelige lister.
&lt;/p&gt;

&lt;p&gt;
  Hver af disse former for syntakser har fordele og ulemper -
  personligt hælder jeg mest til de strukturerede syntakse når det
  kommer til større programmer, simpelthen fordi det er langt simplere
  at lave intelligente editorer der kan bearbejde udtryk, når det er
  helt klart hvad et udtryk dækker over. Desuden gør den regulære
  syntaks det muligt at lave effektiv preprocessing uden alt for meget
  smerte (C++ tilbyder template metaprocessing, der er en svagere og
  mere smertefuld implementation i en grammatisk syntaks). Dog ville
  jeg til et on-and-off scriptsprog til små opgaver nok foretrække et
  sprog med en grammatisk syntaks propfyldt med genveje - for der er
  det ikke sandsynligt at jeg vil gå ud over hvad sproget direkte er
  designet til, og derfor ikke have behov for mange af de faciliteter
  som en struktureret syntaks tilbyder.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Thu, 14 Dec 2006 23:20:28 +0100</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/247-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Bootstrapping og design af højniveau-sprog</title>
    <link>http://sigkill.dk/blog/archives/246-Bootstrapping-og-design-af-hjniveau-sprog.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/246-Bootstrapping-og-design-af-hjniveau-sprog.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=246</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=246</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
I dag læste jeg
en &lt;a
href=&quot;http://users.ipa.net/~dwighth/squeak/oopsla_squeak.html&quot;&gt;interessant
historie&lt;/a&gt; om
hvordan &lt;a href=&quot;http://www.squeak.org&quot;&gt;Squeak&lt;/a&gt;-miljøet blev til,
og hvordan det er designet. Udvikling og vedligeholdelse af disse
højniveau-systemer interesserer mig meget, fordi det for mig at se
næsten er magi at de overhovedet kan fungere. Smalltalk, der er et
meget højniveau-sprog, bruges til at skrive sin egen virtual machine -
det er respekt. Generelt synes jeg at sprog, der afhænger af komplekse
runtime-miljøer, har nogle fascinerende detaljer omkring porting til
nye systemer, og grundlæggende bootstrapping - hvor C på triviel vis
omdannes til totalt flad og statisk maskinkode, så kræver det lidt
mere at få et Smalltalk-image op og køre. Ydermere kan der opstå
interessante komplikationer og detaljer når man laver selv-kompilering
med den slags runtime-systemer
- &lt;a href=&quot;http://www.cons.org/cmucl/&quot;&gt;CMUCL&lt;/a&gt;, den klassiske frie
implementation af Common Lisp, er berygtet for at være ekstremt
kompliceret at kompilere, og er kendetegnet ved at nye kompileringer
af CMUCL &lt;em&gt;arver karakteristika fra den CMUCL det bliver kompileret
med&lt;/em&gt; - OOP go home, det her er ægte inheritance! En af de mest
underholdende konsekvenser af dette, som jeg har læst om, er at man,
når man porter CMUCL til en ny platform - det være sig en ny maskine,
styresystem eller bare nyt sæt libraries - anbefales at rekompilere
CMUCL med sig selv et par gange, bare lige for at få ryddet ordentligt
op og få reduceret antallet af compiler-advarsler.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sat, 09 Dec 2006 22:35:01 +0100</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/246-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Hvorfor er der...</title>
    <link>http://sigkill.dk/blog/archives/228-Hvorfor-er-der....html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/228-Hvorfor-er-der....html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=228</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=228</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
... ikke flere sprog der har valgt at navngive deres standardfunktioner efter &lt;a href=&quot;http://en.wikipedia.org/wiki/IBM_704&quot;&gt;IBM 704&lt;/a&gt;-instruktionssættet? Når man ser på &lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp_programming_language&quot;&gt;de sprog der følger denne designfilosofi&lt;/a&gt; må man da formode at det er en god idé? Det kan da ikke være værre end at bruge &lt;a href=&quot;http://en.wikipedia.org/wiki/C_programming_language&quot;&gt;glorificeret PDP-11 makroassembly&lt;/a&gt;?
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 28 Sep 2006 14:38:36 +0200</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/228-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Sprogfleksibilitet versus værktøjer</title>
    <link>http://sigkill.dk/blog/archives/221-Sprogfleksibilitet-versus-vrktjer.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/221-Sprogfleksibilitet-versus-vrktjer.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=221</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=221</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
  I dag så
  jeg &lt;a
  href=&quot;http://lists.squeakfoundation.org/pipermail/seaside/2002-June/000470.html&quot;&gt;denne
  halvgamle posting&lt;/a&gt; på en
  af &lt;a href=&quot;http://www.squeak.org&quot;&gt;Squeak&lt;/a&gt;&#039;s mailing-lister
  (Squeak er et Smalltalk-miljø, prøv det, hvis du ikke allerede har -
  det kan være noget af en øjenåbner og er sjovt at lege
  med). Beskedens kerne er at Smalltalk&#039;s stringente holdning til
  hvordan et computerprogram skal designes og struktureres, betyder at
  man kan bruge utroligt avancerede værktøjer til at skrive, og
  analysere, Smalltalk-kode. Idet programmer altid er organiserede i
  objekthierarkier, kan værktøjerne gå ud fra nogle grundlæggende
  formodninger, der gør at de har let ved at gennemskue koden. Det
  hjælper naturligvis også at Smalltalk-miljøer typisk ikke bruger
  filer, og at man bare siger at man vil redigere i en given metode
  for en given klasse, og så får et editor-vindue med kildekoden. Så
  behøver værktøjerne ikke beskæftige sig med inddeling af koden i
  filer og den slags pjat.
&lt;/p&gt;

&lt;p&gt;
  Common Lisp er lidt anderledes - der har man ubegrænset
  fleksibilitet, selv den grundlæggende syntaks kan ændres, hvis man
  skulle nære trang til dette. Jeg har selv oplevet konsekvensen af
  dette i forbindelse med mit arbejde
  på &lt;a href=&quot;http://common-lisp.net/project/climacs&quot;&gt;Climacs&lt;/a&gt; -
  Lisp er (retteligt) berømt for sine muligheder
  for &lt;em&gt;introspection&lt;/em&gt; - at se ind i, og ændre, programmets
  tilstand, mens det kører, men lige så nemt som det er at analysere
  kørende kode, ligeså besværligt er det at analysere koden, mens den
  endnu blot er tekst i et editorvindue. Når syntaksen kan redefineres
  efter forgodtbefindende, er det ofte umuligt at vide hvordan et
  givent symbol og bruges, og derfor lave rigtig intelligent
  symbolfuldføring (alá Microsoft&#039;s IntelliSense). Man kan naturligvis
  lære editoren om hvordan den skal opfatte specifikke
  makroer/readermakroer, men det er umuligt at gøre det generelt for
  alle makroer programmøren kunne finde på at definere, med mindre man
  rent faktisk implementerer en halv compiler i kode-analyse-modulet.
&lt;/p&gt;

&lt;p&gt;
  Er det så værd at ofre sprogfleksibilitet, for til gengæld at få
  bedre værktøjer? Det afhænger af situationen - det er nok nødvendigt
  at have visse begrænsninger i sproget, for at gøre det muligt at
  have intelligent værktøjer i det hele taget. Men generelt er jeg af
  den oplevelse at værktøjer &lt;em&gt;altid&lt;/em&gt; kan skabes, ændres og
  forbedres (&quot;hvis en compiler kan gøre det, så kan et eksternt
  redskab også&quot;), mens man som oftest er låst fast på hvad sproget
  kan, så derfor er det vigtigst at sørge for at sproget er fleksibelt
  og kraftfuldt til at begynde med.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sun, 03 Sep 2006 20:56:21 +0200</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/221-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Denne side bør I allerede kende</title>
    <link>http://sigkill.dk/blog/archives/214-Denne-side-br-I-allerede-kende.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/214-Denne-side-br-I-allerede-kende.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=214</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=214</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
For en god ordens skyld - hvis I ikke allerede kender til &lt;a href=&quot;http://www.thedailywtf.com&quot;&gt;thedailywtf.com&lt;/a&gt;, så gør I det nu. Det er en side hvor der bliver postet eksempler på hvorfor det ikke kræver ret meget kompetence at få et job i computerindustrien, og hvor grimt man rent faktisk kan skrive Visual Basic-kode.
&lt;/p&gt;

&lt;p&gt;
Og så har jeg desuden også fundet nogle &lt;a href=&quot;
http://www.acceleratingfuture.com/michael/blog/?p=120&quot;&gt;projekter der kan holde mig beskæftiget resten af ferien&lt;/a&gt;. Det er jo godt nok.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Edit:&lt;/strong&gt; Indlæg version 2.0, link fikset.
&lt;p&gt; 
    </content:encoded>

    <pubDate>Fri, 11 Aug 2006 00:06:55 +0200</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/214-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Eksempel på CLIM</title>
    <link>http://sigkill.dk/blog/archives/196-Eksempel-pa-CLIM.html</link>
            <category>Lisp</category>
    
    <comments>http://sigkill.dk/blog/archives/196-Eksempel-pa-CLIM.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=196</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=196</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
For et stykke tid siden &lt;a href=&quot;http://www.sigkill.dk/blog/archives/137-Common-Lisp-Interface-Manager.html&quot;&gt;skrev jeg om CLIM&lt;/a&gt; og var især begejstret for &lt;em&gt;presentation types&lt;/em&gt;. Det er jeg stadigvæk, og for at konkretisere hvorfor jeg synes de er så geniale, vil jeg nu komme med et eksempel på hvorledes jeg har brugt dem i løbet af de sidste uger.
&lt;/p&gt;

&lt;p&gt;
Jeg arbejder i min fritid på &lt;a href=&quot;http://common-lisp.net/project/climacs/&quot;&gt;Climacs&lt;/a&gt; - en næstegenerations Emacs skrevet i Common Lisp. Derudover arbejder jeg også på &lt;a href=&quot;http://common-lisp.net/project/clim-desktop/&quot;&gt;CLIM-desktop&lt;/a&gt; - integration mellem en række forskellige CLIM-programmer. I CLIM-desktop har jeg skrevet kode der udnytter presentation types på en ret interessant måde - en standard presentation type er &lt;em&gt;symbol&lt;/em&gt;, som bliver brugt når et program ønsker at vise brugeren et almindeligt Lisp-symbol. Ved at definere en &lt;em&gt;presentation command translator&lt;/em&gt; har jeg kædet alle presentations af denne typer sammen med en kommando, der får Climacs til at redigere definitionen af symbolet. Resultatet af dette er at når et program producerer output, kan det blot sige at et givent stykke output repræsenterer et givent symbol, hvorefter brugeren til hver en tid kan holde ALT inde, klikke på symbolet, og blive taget til den fil, og position i filen, hvor symbolets funktion, klasse, type, osv., bliver defineret. Dette sker fuldstændigt uden at applikationsprogrammøren skal tænke nærmere over det, han kan blot gå ud fra at miljøet giver brugeren nogle relevante interaktionsmuligheder for en given presentation type (selvom programmet selvfølgelig også kan definere sine egne).
&lt;/p&gt;

&lt;p&gt;
På samme måde er andre presentation types også kædet til kommandoer - filnavne giver mulighed for at åbne filen, klassenavne mulighed for at redigere i filen, og kommandoer og kommandonavne mulighed for at redigere kommandoens definition. Det er ret komfortabelt at bruge et miljø hvor man, hvis man pludselig opdager en bug i en kommando, som regel bare kan holde ALT inde og trykke på kommandoen, og fikse den. Og denne funktionalitet kommer fuldstændigt gratis for applikationsprogrammøren, hvor det i de fleste toolkits ville være ganske besværligt at implementere.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Fri, 16 Jun 2006 11:58:00 +0200</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/196-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Go with the control-flow!</title>
    <link>http://sigkill.dk/blog/archives/187-Go-with-the-control-flow!.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/187-Go-with-the-control-flow!.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=187</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=187</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
  I dag er fælleshadet rettet imod en ellers typisk blogpost med
  titlen &lt;a
  href=&quot;http://damienkatz.net/2006/05/signs_youre_a_c.html&quot;&gt;Signs
  You&#039;re a Crappy Programmer (and don&#039;t know it)&lt;/a&gt;. Jeg forstår
  inderligt ikke hvorfor den har fået så meget opmærksomhed, så mange
  kommentarer og en så prominent placering på had-vejviserne Digg og
  Reddit. Nuvel, hvem er jeg at skulle gå imod blogosfærens
  strømninger (wow, det ord får mig til at føle mig helt metroseksuel
  og Web 2.0-sej - betyder det at jeg kan få en bog udgivet hos
  O&#039;Reilly?): Jeg må omgående ytre min mening om indlægget fra min
  egen piedestal.
&lt;/p&gt;

&lt;p&gt;
  De fleste af indlæggets punkter er ded sædvanlige, korrekte, men
  efterhånden noget almindelige, kritik af begrebet &lt;em&gt;enterprise
  ready&lt;/em&gt; og den sædvanlige parodi af &lt;em&gt;enterprise
  programmøren&lt;/em&gt;. Der er dog to punkter som jeg synes er
  interessante, og som jeg tilfældigvis går meget op i, og det er de
  to punkter der omhandler længden af funktioner og antallet
  af &lt;em&gt;exit points&lt;/em&gt; i en funktion.
&lt;/p&gt;

&lt;p&gt;
  Jeg er tilhænger af funktionsorienteret programmering, og opfatter
  derfor funktioner som små, isolerede bidder, der udfører beregninger
  eller handlinger. Det betyder også at jeg opfatter funktioner fra et
  matematisk standpunkt, og forsøger at minimere, eller eliminere,
  side-effekter og funktioners afhængighed af miljøet. Jo større
  funktioner er, desto sværre er det at undgå side-effekter, derfor
  foretrækker jeg store mængder små funktioner, der hver løser en
  enkelt opgave, og som idéelt set ikke har sideeffekter, samt en
  større interface-funktion, der organiserer kaldene til
  beregningsfunktionerne og udfører nødvendige side-effekter. De små
  side-effekt-frie funktioner tillader mig også at bruge matematisk
  logik til at ræsonnere omkring dem - f.eks. verificere deres
  korrekthed eller ændre på hvordan de bliver kaldt. Kernen i denne
  organisering af funktioner er at det som oftest er lettere at
  fejlrette, eller verificere, 3 funktioner á 10 linjer, end én
  funktion på 25 linjer.
&lt;/p&gt;

&lt;p&gt;
  Derfor er jeg &lt;em&gt;som udgangspunkt&lt;/em&gt; også imod funktioner med
  mange exit points - eller helt præcist, jeg er imod funktioner med
  mange &lt;em&gt;eksplicitte&lt;/em&gt; exit points. I funktionsorienterede sprog
  har en funktion, eller et udtryk, blot den returværdi, som sidste
  udtryk i funktionen har - returværdien, og exit pointet, bliver
  altså automatisk udledt af hvornår funktionen simpelthen ikke har
  mere kode at køre. Det er for mig den optimale løsning, og samtidigt
  en gylden regel man kan følge stort set hvor som helst: Lad
  control-flowet fremgå af logikken. Hvis man har behov for tidlig
  exit, så bør logikken formes så denne tidlige exit er en del af den,
  &lt;em&gt;ikke&lt;/em&gt; ved at lave vilkårlige exits hid og did.
&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Mon, 15 May 2006 20:14:06 +0200</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/187-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Climacs pr0n og jubilæum</title>
    <link>http://sigkill.dk/blog/archives/183-Climacs-pr0n-og-jubilum.html</link>
            <category>Lisp</category>
    
    <comments>http://sigkill.dk/blog/archives/183-Climacs-pr0n-og-jubilum.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=183</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=183</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
For præcist et år siden gik jeg i gang med at lære Common Lisp, det sprog, der sidenhed er blevet mit absolutte favoritsprog (og som tilmed var med til at introducere mig til rigtig datalogi).
&lt;/p&gt;

&lt;p&gt;
Jeg har i løbet af året arbejdet på en række mindre ting - mindre, fordi jeg ikke har været tilstrækkeligt familiær med sproget og dets redskaber til at overkomme større opgaver, men i løbet af de seneste måneder har jeg alligevel været involveret i et større projekt: &lt;a href=&quot;http://common-lisp.net/project/climacs/&quot;&gt;Climacs&lt;/a&gt; - en moderne implementation af en Emacs-editor i Common Lisp. Kombineret med &lt;a href=&quot;http://common-lisp.net/project/clim-desktop/&quot;&gt;CLIM-Desktop&lt;/a&gt; er Climacs allerede et udemærket udviklingsmiljø til Common Lisp - og det er allerede begyndt at se ganske fancy ud (&lt;a href=&quot;http://sigkill.dk/athas/climacs-pr0n.png&quot;&gt;Climacs pr0n!&lt;/a&gt;).
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 30 Apr 2006 22:34:59 +0200</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/183-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>
<item>
    <title>Webprogrammering</title>
    <link>http://sigkill.dk/blog/archives/180-Webprogrammering.html</link>
            <category>Programmering</category>
    
    <comments>http://sigkill.dk/blog/archives/180-Webprogrammering.html#comments</comments>
    <wfw:comment>http://sigkill.dk/blog/wfwcomment.php?cid=180</wfw:comment>

    <slash:comments>10</slash:comments>
    <wfw:commentRss>http://sigkill.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=180</wfw:commentRss>
    

    <author>nospam@example.com (Troels Henriksen)</author>
    <content:encoded>
    &lt;p&gt;
Jeg har før skrevet om min datalogiundervisning på gymnasiet, hvor jeg har beskæftiget mig med så fantastiske teknologier som VBA og VB.NET. Nu er vi startet på webprogrammering, og min lærer har i et svagt øjeblik ladet os bruge et hvilket som helst serverside-sprog som vi måtte ønske. Jeg har aldrig brudt mig synderligt om webprogrammering - behovet for at kæmpe med diverse browseres fejlfortolkninger og det generelt meget primitive interface har genereret mig en del. Jeg håber at dette bliver et mindre problem hvis jeg finder et tilstrækkeligt interessant webframework - jeg har kigget på Ruby on Rails, men var ikke synderligt imponeret. Det lignede mest af alt en autogenerator til databaseinterfaces... ret uinteressant. Og så er det i Ruby.
&lt;/p&gt;

&lt;p&gt;
I stedet kigger jeg på &lt;a href=&quot;http://common-lisp.net/project/ucw/&quot;&gt;UnCommon Web&lt;/a&gt;, der også har den fordel at der er utroligt lidt dokumentation, så det kan blive et helt eventyr at lave noget i det. Måske kan det give noget så dødssygt som webprogrammering en smule spænding.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Edit:&lt;/strong&gt; Holy shit, UnCommon Web er fantastisk fedt.
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 17 Apr 2006 23:20:34 +0200</pubDate>
    <guid isPermaLink="false">http://sigkill.dk/blog/archives/180-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license>
</item>

</channel>
</rss>