{"id":18,"date":"2025-12-18T08:28:07","date_gmt":"2025-12-18T08:28:07","guid":{"rendered":"https:\/\/degrowthdage.dk\/?page_id=18"},"modified":"2026-02-24T09:24:23","modified_gmt":"2026-02-24T09:24:23","slug":"simpelt-skriveprogram","status":"publish","type":"page","link":"https:\/\/degrowthdage.dk\/index.php\/simpelt-skriveprogram\/","title":{"rendered":"Simpelt skriveprogram"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Hvorfor?<\/h2>\n\n\n\n<p>Den f\u00f8rste begrundelse for at v\u00e6lge at afpr\u00f8ve et simpelt skriveprogram er at det er en af det mest almindelige arbejdspraksisser i mit virke som forsker. En stor del af min arbejdstid g\u00e5r med at producere tekst enten i&nbsp;form af akademiske artikler, bogkapitler, formidlede tekster om min forskning eller mindre skriftlige arbejder. Det er derfor en indgribende \u00e6ndring i min arbejdshverdag ikke at anvende de af min arbejdsplads&nbsp;tilg\u00e6ngeliggjorte v\u00e6rkt\u00f8jer, men i stedet arbejde i et selvgjort og&nbsp;degrowth&nbsp;sensitivt&nbsp;v\u00e6rkt\u00f8j.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Derudover afpr\u00f8ver vi v\u00e6rkt\u00f8jet af f\u00f8lgende \u00e5rsager der s\u00e6rligt taler ind i principperne om&nbsp;Conviviality&nbsp;og&nbsp;Sufficiency.&nbsp;&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I mods\u00e6tning til&nbsp;eksempelvis&nbsp;word&nbsp;tillader det simple tekstprogram at&nbsp;vi&nbsp;tilg\u00e5r hele dets kode og&nbsp;vi&nbsp;kan derfor \u00e6ndre programmet skulle&nbsp;vi&nbsp;\u00f8nske det&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>De tekstfiler&nbsp;vi&nbsp;opretter bliver ikke automatisk lagret p\u00e5 en given&nbsp;techgigants&nbsp;servere&nbsp;\u2013 hvilket slider mindre p\u00e5 milj\u00f8et&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Word er pr\u00e6get af un\u00f8dvendig feature-overflod, hvor st\u00f8rstedelen af funktionerne aldrig bruges, mens et simpelt tekstprogram bedre underst\u00f8tter&nbsp;sufficiency&nbsp;ved kun at tilbyde det der er n\u00f8dvendigt for os&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Et simpelt tekstprogram g\u00f8r det muligt for os kun at tilf\u00f8je funktioner, n\u00e5r vi selv v\u00e6lger det&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>Tekstprogrammet er et fors\u00f8g p\u00e5 at efterleve princippet om&nbsp;<em>software&nbsp;sufficiency,<\/em>&nbsp;som er&nbsp;udvikling af software, der reducerer un\u00f8dvendig datatrafik, processorkrav og digitalt ressourceforbrug ved kun at levere det n\u00f8dvendige. Det simple offline tekstprogram underst\u00f8tter dette ved at fungere uden cloud-infrastruktur og uden overfl\u00f8dige funktioner, hvilket mindsker b\u00e5de kompleksitet og milj\u00f8belastning.&nbsp;<\/p>\n\n\n\n<p>Alt det bedste, <\/p>\n\n\n\n<p>-Peter <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hvordan?<\/h2>\n\n\n\n<p>Ved hj\u00e6lp af en lokalt afviklet kunstig intelligens, har vi lavet en simpel HTML-teksteditor med basale funktioner: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>skrive i et tekstfelt<\/li>\n\n\n\n<li>mulighed for fed, kursiv og underline<\/li>\n\n\n\n<li>give dokumentet et navn<\/li>\n\n\n\n<li>samt gemme og \u00e5bne<\/li>\n<\/ul>\n\n\n\n<p>Programmet er simpelt og kan let redigeres af andre &#8211; med eller uden lokal kunstig intelligens. Kan tilg\u00e5s her:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/degrowthdage.dk\/skriv\"><strong>https:\/\/degrowthdage.dk\/skriv<\/strong><\/a><\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"da\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;title&gt;ConvivialSkriver&lt;\/title&gt;\n    &lt;style&gt;\n        \/* Grundl\u00e6ggende styling for body og editor *\/\n        body {\n            font-family: Arial, sans-serif;\n            margin: 20px;\n        }\n        #editor {\n            border: 1px solid #ccc; \/* Gr\u00e5 kant rundt om editoren *\/\n            padding: 10px; \/* Indvendig margen *\/\n            min-height: 500px; \/* Minimum h\u00f8jde for editoren *\/\n            width: 100%; \/* Bredde p\u00e5 editoren *\/\n            outline: none; \/* Ingen kant, n\u00e5r den er valgt *\/\n        }\n        \/* Styling for v\u00e6rkt\u00f8jslinjen *\/\n        .toolbar button,\n        .toolbar input&#91;type=\"file\"],\n        .toolbar input&#91;type=\"text\"] {\n            margin-right: 5px; \/* Margen mellem knapper og inputfelter *\/\n            padding: 5px; \/* Indvendig margen for knapper og inputfelter *\/\n        }\n    &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n\n&lt;h2&gt;ConvivialSkriver&lt;\/h2&gt;\n\n&lt;!-- V\u00e6rkt\u00f8jslinje til formatering og filh\u00e5ndtering --&gt;\n&lt;div class=\"toolbar\"&gt;\n    &lt;input type=\"text\" id=\"titleInput\" placeholder=\"Indtast titel...\" \/&gt;\n    &lt;button onclick=\"formatText('bold')\"&gt;Fed&lt;\/button&gt;\n    &lt;button onclick=\"formatText('italic')\"&gt;Kursiv&lt;\/button&gt;\n    &lt;button onclick=\"formatText('removeFormat')\"&gt;Normal&lt;\/button&gt;\n    &lt;button onclick=\"saveFile()\"&gt;Gem&lt;\/button&gt;\n    &lt;input type=\"file\" id=\"fileInput\" accept=\".html\" onchange=\"openFile()\" \/&gt;\n&lt;\/div&gt;\n\n&lt;!-- Redigeringsomr\u00e5de, hvor brugeren kan skrive og formatere tekst --&gt;\n&lt;div id=\"editor\" contenteditable=\"true\"&gt;&lt;\/div&gt;\n\n&lt;script&gt;\n    \/\/ Funktion til at formatere tekst i editoren\n    function formatText(command) {\n        document.execCommand(command); \/\/ Udf\u00f8rer den valgte formateringskommando\n    }\n\n    \/\/ Funktion til at gemme indholdet af editoren som en HTML-fil\n    function saveFile() {\n        const editorContent = document.getElementById('editor').innerHTML; \/\/ Henter indholdet fra editoren\n        const title = document.getElementById('titleInput').value.trim() || 'tekst'; \/\/ Henter titlen, eller s\u00e6tter 'tekst' som standard\n        const filename = `${title}.html`; \/\/ Opretter filnavnet\n        \n        const blob = new Blob(&#91;editorContent], { type: 'text\/html' }); \/\/ Opretter en blob med HTML-indholdet\n        createDownloadLink(blob, filename); \/\/ Kalder funktionen for at oprette downloadlink\n    }\n\n    \/\/ Funktion til at oprette og klikke p\u00e5 downloadlinket\n    function createDownloadLink(blob, filename) {\n        const link = document.createElement('a'); \/\/ Opretter et hyperlink-element\n        link.href = URL.createObjectURL(blob); \/\/ Genererer URL for blob'en\n        link.download = filename; \/\/ S\u00e6tter downloadnavnet\n        link.click(); \/\/ Simulerer klik for at starte download\n    }\n\n    \/\/ Funktion til at \u00e5bne en eksisterende HTML-fil og indl\u00e6se indholdet i editoren\n    function openFile() {\n        const file = document.getElementById('fileInput').files&#91;0]; \/\/ Henter den valgte fil\n        if (!file) return; \/\/ Hvis ingen fil er valgt, afslut funktionen\n\n        const reader = new FileReader(); \/\/ Opretter en FileReader til at l\u00e6se filindholdet\n        reader.onload = (e) =&gt; {\n            document.getElementById('editor').innerHTML = e.target.result; \/\/ Indl\u00e6ser indholdet i editoren\n        };\n        reader.readAsText(file); \/\/ L\u00e6ser filen som tekst\n    }\n&lt;\/script&gt;\n\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Hvorfor? Den f\u00f8rste begrundelse for at v\u00e6lge at afpr\u00f8ve et simpelt skriveprogram er at det er en af det mest almindelige arbejdspraksisser i mit virke som forsker. En stor del af min arbejdstid g\u00e5r med at producere tekst enten i&nbsp;form af akademiske artikler, bogkapitler, formidlede tekster om min forskning eller mindre skriftlige arbejder. Det er [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-18","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/degrowthdage.dk\/index.php\/wp-json\/wp\/v2\/pages\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/degrowthdage.dk\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/degrowthdage.dk\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/degrowthdage.dk\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/degrowthdage.dk\/index.php\/wp-json\/wp\/v2\/comments?post=18"}],"version-history":[{"count":7,"href":"https:\/\/degrowthdage.dk\/index.php\/wp-json\/wp\/v2\/pages\/18\/revisions"}],"predecessor-version":[{"id":108,"href":"https:\/\/degrowthdage.dk\/index.php\/wp-json\/wp\/v2\/pages\/18\/revisions\/108"}],"wp:attachment":[{"href":"https:\/\/degrowthdage.dk\/index.php\/wp-json\/wp\/v2\/media?parent=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}