Det mest nytteløse program

Shannons "most useless machine" har for nyligt fået en revival i neo-gør-det-selv kredse og selv Steven Colbert har siddet og kigget dybt fascineret på et eksemplar.

Find selv en af de 8.192 tusinder youtube videos.

Men det kan ikke passe at hardwarefolkene skal have hele fornøjelsen, så her er en lille juleudfordring:

Hvordan ser det mest nytteløse program ud ?

Den direkte fortolkning ville være "main() { kill(getpid(), 9)); }" men det mangler totalt det barokke og humoristiske element Shannons vision besider.

Det må kunne gøres bedre.

Spar mig for vittigheder om operativsystemet under EMACS og rejsekortet og kom istedet med dit originale bidrag i debatten herunder.

Præmien er et par tusinde nørders beundring og/eller misundelse over din humor og kreative evner.

phk

Poul-Henning Kamps billede
Poul-Henning er selvstændig systemprogrammør, kernekoder, Varnish-forfatter, data-arkæolog og brokkehoved uden særlig portefølje.

Kommentarer (77)

Peter Makholm Blogger

Måske ikke helt nytteløst nok og ligner ikke maskinerne på youtube, men jeg vil alligevel nominere /bin/true.

På mit GNU-inficerede system fylder det 21K og understøtter selvfølgelig en række options (ok, kun --help og --version. Jeg mangler klart en --verbose). Kildeteksten fylder 61 linjer, hvilket i det mindste er en del mindre end licensen.

Men jeg mindes kommercielle unixer hvor /bin/true var et langt shell-script kun bestående af kommentar-linjer - Som så indeholdte copyright-angivelse, licens, ansvarsfraskriveselse og historik (dvs. hvornår der er ændret i copyright-klamamsen)

Peter Makholm Blogger

Så hvis jeg skal opfyle en funktionalitet svarende til PHK's eksempel, så vil jeg nok ganske enkelt forke true.c fra GNU coreutils og indsætte noget ala PHK's kill ind istedet for 'exit (EXIT_STATUS);'

Ove Andersen

Hvad med alle de Hello World programmer der eksisterer, som skal vise at man er begyndt at programmere noget, men egentligt har så lidt med programmering at gøre som noget kan? Ikke engang noget matematisk..

Tænkt hvor mange år folk tilsammen har brugt på at lave alle disse millioner Hello World programmer =)

Søren Bramer

Den nytteløse maskines primære formål er at returnere til den tilstand den havde inden aktivering. En quine har det ene formål at returnere kildekoden der udgør det kørende program, så det synes jeg er et rigtigt godt bud - omend ikke helt så elegant som en fysisk maskine.

Denne gut har taget spøjen til ekstremet: http://www.madore.org/~david/computers/quine.html

Jakob Holm Hansen

Jeg må sige at Torbens forslag fører. Et program der i den grad har kunnet opsluge ressourcer og skabe massehysteri er sjældent set. Og det helt uden at have skabt noget somhelst resultat.

Lasse Makholm

while (1) { fork(); } har altid været et af mine favoritprogrammer... Det er godt nok ikke helt i Shannons ånd men det må da siges at gøre ekstremt lidt nytte...

Lasse Makholm

Shell-ekvivalenten til Shannons Ultimate Machine må vel være noget i retning af:

while true; do xterm -e "set -x; sleep 1; kill -STOP $$; sleep 1; exit"; done

Vi lader det være op til læseren selv at finde ud af hvordan man "trykker på knappen"...

Carsten Sonne

Program jeg kan forestille mig, er et som tæller til 1000, eller 1.000.000.000 eller mere, og INTET ANDET! :)

En DJØF'er i selvsving f.eks.:

[code=asm]
section .data
Bank resw 1
MoreMoney:
inc Bank
jmp MoreMoney
[/code]

Når, arbejdet kalder :-)

Martin Bøgelund

Et rigtigt nytteløst program skal helst være et, der har slugt en masse maskinressourcer til ingen verdens nytte. Så jeg nominerer SETI@Home.

Helt uenig!

SETI@Home har vist os præcis én ting:
We [i]are[/i] alone!

Og så længe der er folk der benægter dette faktum, skal programmet køre på alverdens håbefulde E.T.-jægeres computere, for langsomt at suge håbet ud af dem.

Søren Nielsen

"Program jeg kan forestille mig, er et som tæller til 1000, eller 1.000.000.000 eller mere, og INTET ANDET! :)"

Det er da ikke nytteløst!
I næste udgave af programmet tæller man så lidt mindre og har derved forbedret performance! Smart.

Poul-Henning Kamp Blogger

Utroligt at Wiki siden ikke nævner at INTERCAL var det første programmeringssprog som opgave GOTO som flow-control metode.

I stedet for indførte de COMEFROM

Poul-Henning

Søren Koch

Ja COMEFROM har jeg længe moret mig over og følt mig fristet til at bruge..... ;-)

(om end ikke andet så bare for at forestile mig ansigtsudtrykket når den næste udvikler endelig finder ud af hvad jeg har lavet.. )

Søren

Hans Schou

JAN HARRIES,

Program jeg kan forestille mig, er et som tæller til 1000, eller 1.000.000.000 eller mere, og INTET ANDET! :)

Det hedder 'seq'

Fx sådan:
[code=bash]seq 12 | parallel ncal {} 2011[/code]

Og /bin/true bruger jeg også tit:
[code=bash]while true; do foo ; done[/code]

Robert Larsen

Mit forslag, som jeg tit står og mangler, er /bin/maybe:

[code=c]

include <time.h>

include <stdlib.h>

int main (int argc, char ** argv) {
srand(time(NULL));
exit(rand() & 1);
return 0;
}
[/code]

Carsten Sonne

We don't know where to GOTO if we don't know where we've COME FROM...

[code=freebasic ]
COME FROM Unknown
REM Level 1 accomplished here
INPUT "Level done. Were to go now? "; ANSWER$
IF ANSWER$ = "2" THEN
GOTO Level2
ELSE
Unknown:
PRINT "Wrong answer. Continuing on same level."
[/code]

Måske Intercal er nytteløst, men stadig ganske spøjst og underholdende :-)

Michael Deichmann

IEFBR14 har i princippet kun een statement:

BR 14

som betyder "branch til adressen i register 14. Register 14 indeholder returadressen på det kaldende program - dvs. programmet gør ingenting!

Programmet har existeret siden de allertidligste udgaver af forløberne for det der idag hedder z/OS.

IEF delen af navnet hidrører fra at de 3 bogstaver identificerer IBM z/OS utilities.

Til trods for at programmet ikke laver noget kan jeg oplyse de yngre læsere, der endnu ikke har arbejdet med rigtig EDB :-) at IEFBR14 er meget brugt i driftsafdelingerne idet man kan lave et jobstep der allokerer eller sletter diverse datasets - noget som operativsystemet kan instrueres til at gøre via nogle parametre til data description.

Nå - skulle der også være humor I? Ja men så lad mig tilføje at der faktisk engang er rejst en fejlrapport på programmet! Strengt taget mangler der en statement som resetter/clearer nogle af registrene ved exit og det gjorde den oprindelige udgave af IEFBR14 ikke.
IBM accepterede faktisk denne APAR (Authorized Problem Analysis Report) og der kom et fix til denne!
Det er da ret god værkstedshumor!

Henrik Kramshøj Blogger

Mit forslag er nok en simpel fork-bombe, som i shell vist nok så sådan ud:

[code=text]

! /bin/sh

doe.sh &
doe.sh &
doe.sh
[/code]

Det er komplet nyttesløst, idet programmet kalder sig selv og blot formerer sig, uden at lave noget som helst.

NB: Den virker ikke så godt mere, idet de fleste OS'er idag begrænser antallet af processer en given bruger kan få lov til at starte.

Loke Dupont

Den nytteløse maskines primære formål er at returnere til den tilstand den havde inden aktivering. En quine har det ene formål at returnere kildekoden der udgør det kørende program, så det synes jeg er et rigtigt godt bud - omend ikke helt så elegant som en fysisk maskine.

I så fald ville det mest optimale vel være et quine der istedet for at outputte sin source skrev sin source til den fil det blev eksekveret fra? Således at selve filen blev til source igen?

Jesper Sørensen

Husker en gammel stribe i et eller andet computerblad hvor en udvikler praler af sit nye program der kan tage en hvilken som helst fil og sortere den således alle 0 bits kommer først og derefer alle 1 bits. Hvorefer han udtalte: "For så ved man hvor man har dem"...

Morten Hattesen

SETI @ Home har vist os præcis én ting: We are alone

Overhovedet ikke!
Det, at SETI @ Home ikke har bevist tilstedeværelsen af fremmed intelligens, er ikke et bevis for, at vi er alene.

Det morsomme er jo netop, at det ikke er muligt at bevise, at vi er alene, på samme måde som det ikke er muligt at bevise at Gud ikke findes.

Henrik Kramshøj Blogger

Det morsomme er jo netop, at det ikke er muligt at bevise, at vi er alene, på samme måde som det ikke er muligt at bevise at Gud ikke findes.

Til gengæld kan man jo prøve at antage at gud ikke findes, og det er nu svært at finde beviser på det modsatte .... og verden ændrer sig sgu ikke.

BTW I deny the Holy Spirit.

Morten Hattesen

Til gengæld kan man jo prøve at antage at gud ikke findes

Ja, det er klart det logiske at lægge bevisbyrden på den antagelse, der er mulig at bevise, nemlig at "Gud findes". Og det bevis er ikke ført (med videnskabelig holdbarhed) endnu.

"I deny any spirit, that does not contain significant amounts of alcohol"

Martin Bøgelund

Overhovedet ikke!
Det, at SETI @ Home ikke har bevist tilstedeværelsen af fremmed intelligens, er ikke et bevis for, at vi er alene.

... så længe vi ikke har skabt kontakt, eller bare fundet intelligent liv, er vi alene.

Og jo længere tid SETI @ Home kører, jo mindre bliver den del af universet, hvor E.T.-romantikere kan postulere der findes intelligent liv.

Bemærk også at jeg ikke påstår at SETI @ Home har [i]bevist[/i] noget som helst. Det har kun [i]vist[/i] at vi er alene. Og at vi er alene er en realitet, så længe vi ikke kan påvise, at vi ikke er det(!)

Morten Hattesen

Det har kun vist at vi er alene

Det mener jeg heller ikke at SETI @ Home har vist.
Projektet har vist, at VI ikke kunne finde nogen spor af andre "intelligenser", der hvor vi ledte, og på den måde vi ledte på.
Og jeg mener (som du), at projektet er tåbeligt og nyttesløst. Men det har sikkert underholdt en del mennesker, og givet dem følelsen af at samarbejde om et fælles projekt.

PS: Jeg er på den anden side helt enig i at vi har bevæget os væsentligt off-topic, og det undskylder jeg min andel i.

Martin Bøgelund

Det morsomme er jo netop, at det ikke er muligt at bevise, at vi er alene, på samme måde som det ikke er muligt at bevise at Gud ikke findes.

For det første skal du skelne skarpt mellem at [i]vise[/i] og at [i]bevise[/i].

For det andet er det en overkommelig sag at beskrive hvad vi forstår ved (jordisk) intelligens, og kan derfor relativt enkelt afgøre om vi står overfor (ikke-jordisk) intelligens, når vi ser det.

I sagens natur kan du ikke lave en videnskabelig beskrivelse af en metafysisk eller emotionelt-abstrakt entitet, så du kan derfor heller ikke påvise videnskabeligt hvorvidt du er rendt ind i Gud eller ej - måske kunne du bare ikke se det var ham, fordi han ikke matchede [i]din[/i] forestilling om ham.

Og endnu værre: Hvis din forestilling om ham er at han ikke eksisterer, tror du så helt ærligt du ville kunne spotte ham ud fra den ene beskrivelse af ham du accepterer; at han [i]ikke[/i] eksisterer?

Come on... "Bevis" og "Gud" hører ikke til i samme afdeling af vores verdensbeskrivelser...

Personligt mener jeg iøvrigt at ordet "bevis" er kraftigt udvandet, når det anvendes i ikke-matematiske sammenhænge - og selv i matematikken kan vi påvise bevis-systemers begrænsninger via Gödels ufuldstændighedssætninger.

Læg dertil umuligheden i at [i]bevise[/i] vores egen - menneskers - eksistens. Vi må ty til billige definitioner a la "[i]Cogito ergo sum[/i]" for at lave et axiom, der overhovedet kan kickstarte hele det bevis-bårne univers vi selv bygger.

At vi kan stille spørgsmålstegn ved realiteterne omkring vores egen eksistens´ beskaffenhed ("Welt am Draht", "The Matrix"), diskvalificerer desuden på forhånd ethvert forsøg på at bevise Guds (ikke-) eksistens.

Carsten Sonne

Og at vi er alene er en realitet, så længe vi ikke kan påvise, at vi ikke er det(!)

Rent logisk er det en ugyldig konklusion - så længe vi ikke kan påvise om vi er enten alene eller ikke alene, er det [b]uvist[/b].

Peter Mogensen

Hvorfor er det lige at det er mere muligt at bevise at Gud findes end at han ikke findes?

http://en.wikipedia.org/wiki/Falsifiability

"Gud findes" er ikke en falsificerbar påstand.

Ligesom man ikke kan bevise at der kun findes hvide svaner.
Det kan derimod modbevises.

"gud findes ikke", kan modbevises. Ergo giver det ingen mening at lægge evidensbyrden andre steder.

John Vedsegaard

Eller denne version som vil fylde mere, så man er sikker på at harddisken bliver HELT fyldt op.

cd c:\windows
copy con useless.txt
:start
copy explore.exe + useless.txt useless.txt
goto start

Det hele placeres så i en batfil der simpelthen bare køres.

Skulle man ønske at se resultatet efterhånden, tilføjer man bare type useless.txt efter start.

Per Michael Jensen

SW udgaven af Shannons maskine må være et GUI program der fungerer således:

  1. Programmet startes ved klik på en ikon.
  2. Programmet åbner er vindue.
  3. Programmet overtager cursoren, flytter den stille og roligt op til 'krydset' og klikker på det, hvorved vinduet (og programmet) lukkes.
Martin Bøgelund

Rent logisk er det en ugyldig konklusion - så længe vi ikke kan påvise om vi er enten alene eller ikke alene, er det uvist.

Sålænge du ikke har påvist der er andre, er du pr. definition alene.

Hvordan vil du ellers definere "alene"?

Per Michael Jensen

Carsten, det var lige som jeg havde tænkt programmet!

Det er efterhånden længe siden jeg har kodet sidst, nu gør jeg mig nyttig med kvalitetssikring :-o Så der kommer ingen kode fra min hånd!

Jeg undrer mig, kan ingen lave det til *nix?

Per Michael Jensen

v2 udgaven af Shannons maskine må være et GUI program der fungerer således:

  1. Programmet startes ved klik på en ikon.
  2. Programmet åbner er vindue. Vinduet har en 'start'-knap og en 'stop'-knap.
  3. Ved tryk på 'stop'-knappen sker er ikke noget.
  4. Ved tryk på 'start'-knappen overtager programmet cursoren og flytter den stille og roligt over til 'stop'-knappen og trykker på den.
Carsten Sonne

Hvordan vil du ellers definere "alene"?

Problemet er ikke definitionen af alene. Problemet er præmissen: Hvis du bor i et hus uden vinduer, kan du ikke se om det er dag eller nat. Hvis dit hus tilmed ikke har lys, er det jo nemt at konkludere at det er evig nat. Og det har du jo sådan set også ret i, set ud fra det perspektiv.

Fra et større perspektiv kan siges: At du ikke kan se lyset er ikke det samme som det ikke er der. At menneskeden ikke har fundet andet intelligent liv end os selv, er ikke det samme som de ikke er der. Præmisserne, eller forudsætningerne om du vil, definere i høj grad konklusionen.

Martin Berg

Og ubrugeligheden forøges til det absurde, hvis det som en ansat ved CERN fortalte mig for nogle år siden er korrekt: SETI@Home indeholdt en regnefejl, som gjorde at de fleste af (alle?) resultaterne var forkerte og derfor ubrugelige.
Han var ikke helt sikker på den bedste måde at kommunikere dette på ;-)

Jeg var nede på CERN for at høre noget om deres anvendelse af grid-computing i forbindelse med analysen af data fra LHC'en.
SETI@Home dukkede op i samtalen, da dette projekt jo netop nævnes som et folkeligt genkendeligt eksempel på grid-computing.

Og nej: Jeg har ikke flere detaljer om den påståede regnefejl.

Carsten Sonne

...som gjorde at de fleste af (alle?) resultaterne var forkerte og derfor ubrugelige.

Mon ikke de gode mennesker på CERN har lært en del af SETI@Home, om end det måske ikke lige var det formål, som motiverede de medvirkende til at støtte projektet. Det uforventede bliver sjælent modtaget med kyshånd.

Hvorvidt noget er ubrugeligt eller ej, kan være svært at afgøre. Med det "rette" successkriterier kan alt gøres til en fiasko, og ligeledes omvendt :-)

Per Michael Jensen

Rasmus,

Linket du henviser til gør næsten som v2 maskinen. Men den mangler den absurde, helt Monty Python-agtige måde, Shannons maskine slukker for sig selv på.

Shannons maskine slukker sig selv udenfor dens egne rammer, på e kontakt den ikke formodes at pille ved. Det er ikke nemt at implementere i software, mit bedste bud var at bruge cursoren og 'krydset'.

En maskine hvis eneste funktion er at den tænder en lampe når den aktiveres, og derefter slukker sig selv (og lampen), kan findes i enhver opgang. Så det er ikke en ubrugelig maskine...

Thorbjørn Andersen

Hvis kravet er at maskinen skal slukke sig selv, er det vel shutdown kommandoen vi skal have fat i:

Unix: shutdown -f now, Windows: shutdown /s

Kynikere vil formentlig straks påpege at det er alt for langsommeligt og pænt, hvorfor at processen bør optimeres. Umiddelbart vil jeg formode at det kald der beder ACPI modulet - x86 - om at gå i tilstand G3 (mechanical off) må være det vi skal gå efter.

Log ind eller opret en konto for at skrive kommentarer