{"id":888,"date":"2019-06-10T09:14:07","date_gmt":"2019-06-10T07:14:07","guid":{"rendered":"https:\/\/the.ericade.net\/?p=888"},"modified":"2019-06-22T12:18:45","modified_gmt":"2019-06-22T10:18:45","slug":"namnsdagskommandot-en-studie-i-arexx","status":"publish","type":"post","link":"https:\/\/the.ericade.net\/?p=888","title":{"rendered":"Namnsdagskommandot &#8211; en studie i Arexx"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"324\" height=\"37\" data-src=\"https:\/\/the.ericade.net\/wp-content\/uploads\/2019\/06\/namnsdag.png\" alt=\"\" class=\"wp-image-889 lazyload\" data-srcset=\"https:\/\/the.ericade.net\/wp-content\/uploads\/2019\/06\/namnsdag.png 324w, https:\/\/the.ericade.net\/wp-content\/uploads\/2019\/06\/namnsdag-300x34.png 300w\" data-sizes=\"(max-width: 324px) 100vw, 324px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 324px; --smush-placeholder-aspect-ratio: 324\/37;\" \/><figcaption>De var namnsdagsbarn dagen d\u00e5 detta inl\u00e4gg skrevs i alla fall.<\/figcaption><\/figure>\n\n\n\n<p>1997 lade vi till ett namnsdagskommando till basen som k\u00f6rdes vid inloggning och ber\u00e4ttade vem som hade namnsdag n\u00e4r n\u00e5gon loggade in. Det skrevs fr\u00e5n b\u00f6rjan 1994 av Mattias Appelqvist. Kommandot l\u00e4ste fr\u00e5n en textfil som inneh\u00f6ll alla namnen.<\/p>\n\n\n\n<p>En fr\u00e5ga till er som programmerar: hur skulle ni skapa ett kommando som ska h\u00e4mta ett namn ur en lista med namn baserad p\u00e5 dess position? Personligen skulle jag trycka in dem i en array och sedan ta reda p\u00e5 vilket namn i ordningen som ska plockas fram. Man f\u00e5r hitta en l\u00f6sning f\u00f6r skott\u00e5r, men annars \u00e4r det bara att plocka fram post 218 ur arrayen dag nummer 217 (arrayer b\u00f6rjar normalt p\u00e5 0!) f\u00f6rutsatt att namnen \u00e4r lagrade i ordning efter vilken dag p\u00e5 \u00e5ret de har namnsdag. Inget problem h\u00e4r. <\/p>\n\n\n\n<p>Men 1994 fungerade det lite annorlunda. F\u00f6rst och fr\u00e4mst var minnet begr\u00e4nsat. The ERICADE Network hade en Amiga med 6 MB minne. Detta minne skulle r\u00e4cka f\u00f6r att k\u00f6ra basen och operativsystemet med hundratals anv\u00e4ndare.  S\u00e5 att l\u00e4sa in alla namnen i minnet vara lite mer tveksamt. Det andra sk\u00e4let \u00e4r att Arexx arrayhantering var ganska primitiv. <\/p>\n\n\n\n<p>S\u00e5 hur l\u00f6ser man detta? Jo, kommandot m\u00e5ste l\u00e4sa fr\u00e5n disken. Detta \u00e4r i sig ett problem, f\u00f6r diskar \u00e4r sl\u00f6a j\u00e4mf\u00f6rt med minnet. Om man antar att man l\u00e4gger alla namnsdagar i ordning efter dag, skulle arexx-programmet beh\u00f6va stega ner 219 rader f\u00f6r att hitta namnet bundet till dag 219. Detta \u00e4r inte effektivt och kommer att g\u00f6ra kommandot sl\u00f6tt och resurskr\u00e4vande.<\/p>\n\n\n\n<p>N\u00e4r jag startade upp BBSen 2018, ins\u00e5g efter n\u00e5gra m\u00e5naders drift att namnsdagskommandot ofta visade fel namn. Det visade sig bero p\u00e5 att det hade en del intressanta buggar och dessutom anv\u00e4nde 1993 \u00e5rs namnl\u00e4ngd. Denna slutade g\u00e4lla p\u00e5 2000-talet. S\u00e5 jag h\u00e4mtade den senaste namnl\u00e4ngden fr\u00e5n Wikipedia och gjorde den till en textfil. Men vi har fortfarande inte svarat p\u00e5 fr\u00e5gan hur kommandot hittade dagens namn. <\/p>\n\n\n\n<p>Detta var inte helt uppenbart f\u00f6r mig n\u00e4r jag tittade p\u00e5 koden eller p\u00e5 textfilen den l\u00e4ste. I b\u00f6rjan av namnfilen s\u00e5g det ut s\u00e5h\u00e4r:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>0062 0451 0817 1216 1614 2026 2410 2817 3233 3619 4026 4425<br> *<br> SVEA SVERKER<\/p><cite>filen fortsatte sedan med alla namnen.<\/cite><\/blockquote>\n\n\n\n<p>Vad var alla dessa m\u00e4rkliga siffror? En titt i koden visade att den verkade koppla siffrorna till m\u00e5naden.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>dag   =  right(date(&#8217;s&#8217;),2)<br> man   =  substr(date(&#8217;s&#8217;),5,2)<br> sendstring lf lf<br> if ~exists(fil) then call fel(&#8217;Hittar inte &#8217;fil)<br> if ~open(&#8217;t&#8217;,fil,&#8217;r&#8217;) then call fel(&#8217;Kunde inte l\u00e4sa fr\u00e5n &#8217;fil)<br> mpos  =  readln(&#8217;t&#8217;)<br> mpos  =  word(mpos,man)<br> call seek(&#8217;t&#8217;,mpos,&#8217;b&#8217;)<\/p><\/blockquote>\n\n\n\n<p>Koden ovan tar fram m\u00e5nadens nummer i ordningen. Juni \u00e4r t.ex. m\u00e5nad nummer 6 och januari \u00e4r 1. Sen l\u00e4ser den in den f\u00f6rsta raden och plockar ur den siffergruppen som motsvarar m\u00e5naden. F\u00f6r juni tar den allts\u00e5 den sj\u00e4tte siffergruppen. Men varf\u00f6r d\u00e5? Jo, denna siffergrupp talar om hur m\u00e5nga bytes in i textfilen som m\u00e5nadens namn b\u00f6rjar. Det \u00e4r ett intressant s\u00e4tt att g\u00f6ra det p\u00e5!<\/p>\n\n\n\n<p>Men det ger ju inte hela l\u00f6sningen. Efter att den hittat f\u00f6rsta namnet f\u00f6r den aktuella m\u00e5naden, stegar den fram till korrekt dag. Om det \u00e4r den 10 juni, stegar den tio rader ner och h\u00e4mtar namnet.<\/p>\n\n\n\n<p>Detta kommando har kr\u00e5nglat r\u00e4tt mycket redan innan jag skrev om det f\u00f6r den nya namnl\u00e4ngden. Vissa dagar kraschade skriptet f\u00f6r den inte riktigt hittade r\u00e4tt. Och att r\u00e4kna ut hur m\u00e5nga bytes in i filen man g\u00e5 f\u00f6r att hitta m\u00e5nadsstarten visade sig vara en utmaning. Dessutom var man tvungen att t\u00e4nka p\u00e5 hur Amigan kodar radbrytningar n\u00e4r man gjorde jobbet. Jag skrev n\u00e4mligen filen p\u00e5 en PC.<\/p>\n\n\n\n<p>S\u00e5 jag hittade en l\u00f6sning till sist och fick allting att fungera.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1997 lade vi till ett namnsdagskommando till basen som k\u00f6rdes vid inloggning och ber\u00e4ttade vem som hade namnsdag n\u00e4r n\u00e5gon loggade in. Det skrevs fr\u00e5n b\u00f6rjan 1994 av Mattias Appelqvist. Kommandot l\u00e4ste fr\u00e5n en textfil som inneh\u00f6ll alla namnen. En fr\u00e5ga till er som programmerar: hur skulle ni skapa ett kommando som ska h\u00e4mta ett&hellip; <a class=\"more-link\" href=\"https:\/\/the.ericade.net\/?p=888\">Forts\u00e4tt l\u00e4sa <span class=\"screen-reader-text\">Namnsdagskommandot &#8211; en studie i Arexx<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3,5,4],"tags":[],"class_list":["post-888","post","type-post","status-publish","format-standard","hentry","category-basens-historia","category-diverse","category-tekniska-dokument","entry"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/paX1Ep-ek","_links":{"self":[{"href":"https:\/\/the.ericade.net\/index.php?rest_route=\/wp\/v2\/posts\/888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/the.ericade.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/the.ericade.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/the.ericade.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/the.ericade.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=888"}],"version-history":[{"count":3,"href":"https:\/\/the.ericade.net\/index.php?rest_route=\/wp\/v2\/posts\/888\/revisions"}],"predecessor-version":[{"id":920,"href":"https:\/\/the.ericade.net\/index.php?rest_route=\/wp\/v2\/posts\/888\/revisions\/920"}],"wp:attachment":[{"href":"https:\/\/the.ericade.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/the.ericade.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/the.ericade.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}