Dette indlæg er alene udtryk for skribentens egen holdning.

Det mest nytteløse program

77 kommentarer.  Hop til debatten
Blogindlæg20. december 2010 kl. 15:19
errorÆldre end 30 dage

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 ?

Artiklen fortsætter efter annoncen

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.

Artiklen fortsætter efter annoncen

phk

77 kommentarer.  Hop til debatten
Fortsæt din læsning
Debatten
Log ind for at deltage i debatten.
settingsDebatindstillinger
43
21. december 2010 kl. 17:57

Lidt for brugbart...

6
20. december 2010 kl. 17:08

#!/bin/sh set -v

sleep 0.1 xterm -C $0 & sleep 1

9
20. december 2010 kl. 17:25

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

39
21. december 2010 kl. 14:40

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?

40
21. december 2010 kl. 14:49

for (;;) { try { return; } finally { continue; } }

41
21. december 2010 kl. 15:05

Næsten korrekt: Control cannot leave the body of a finally clause

[code=csharp] for (;;) { try { return; } finally { continue; } } [/code]

Kode-tags finder her:http://www.version2.dk/debat/guide

42
21. december 2010 kl. 16:56

Omvendt kan vi spørge, hvordan vil hardware udgaven af en quine være? Den må vel skrive sit eget diagram ud, altså en printer.

:)

45
21. december 2010 kl. 18:23

Så vidt jeg ved er målet for diverse plastic-3d-printere at de skal kunne genskabe sig selv.

Poul-Henning

47
22. december 2010 kl. 11:45

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"...

48
22. december 2010 kl. 13:03

Det sjove af det hele er at det ikke er helt ulig hvorledes bzip2 algoritmen virker...

Poul-Henning

44
21. december 2010 kl. 18:23

Ville nu hellere bruge eksemplet med en robot der bygger en robot magen til. Altså en dommedagsrobot.

59
23. december 2010 kl. 14:27

Ville nu hellere bruge eksemplet med en robot der bygger en robot magen til.

Ved at bruge dele af sig selv som byggematerialer.

10
20. december 2010 kl. 17:43

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.

70
27. december 2010 kl. 11:51

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.

23
21. december 2010 kl. 09:51

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.

49
22. december 2010 kl. 14:26

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.

56
23. december 2010 kl. 12:09

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.

57
23. december 2010 kl. 12:19

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].

64
25. december 2010 kl. 14:56

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"?

65
25. december 2010 kl. 17:40

cp er da langt mere effektiv end at oversætte ;)

54
23. december 2010 kl. 11:16

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(!)

55
23. december 2010 kl. 11:36

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.

50
22. december 2010 kl. 14:44

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.

51
22. december 2010 kl. 16:05

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"

52
22. december 2010 kl. 19:48

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

60
23. december 2010 kl. 14:58

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.

11
20. december 2010 kl. 19:15

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.

13
20. december 2010 kl. 19:46

og så lige den med character encoding

16
20. december 2010 kl. 23:00

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...

17
20. december 2010 kl. 23:26

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"...

18
21. december 2010 kl. 00:03

:start echo Bent.bat -> Bent.bat goto start

61
23. december 2010 kl. 17:40

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.

62
25. december 2010 kl. 11:48

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.
63
25. december 2010 kl. 12:15

Now we're talking...

Poul-Henning

67
26. december 2010 kl. 21:52

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?

68
26. december 2010 kl. 22:00

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.
74
28. december 2010 kl. 18:52

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...

75
30. december 2010 kl. 00:02

#!/bin/sh

yes PHK

76
30. december 2010 kl. 12:58

[code=bash] #!/bin/sh echo "Usage: $0" exit 1 [/code]

77
22. januar 2011 kl. 09:25

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.

72
27. december 2010 kl. 13:08

...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 :-)

69
27. december 2010 kl. 10:52

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.

19
21. december 2010 kl. 00:30

[code=asm] section .data ReadyForFuture resb 1 Beginning: mov ReadyForFuture, 0xFF inc ReadyForFuture jne Beginning Future: ; The work is done here [/code]

20
21. december 2010 kl. 00:38

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

30
21. december 2010 kl. 11:00

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]

31
21. december 2010 kl. 11:04

telnet://towel.blinkenlights.nl Så meget kode, mest kontant dog, men giver det mening? Nej vel!

25
21. december 2010 kl. 09:56

"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.

27
21. december 2010 kl. 10:21

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

29
21. december 2010 kl. 10:33

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

22
21. december 2010 kl. 09:30

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 :-)

24
21. december 2010 kl. 09:52

Malbolge fortolkeren. Se http://en.wikipedia.org/wiki/Malbolge.

Dette er Hello World i Malbolge: [code=text] ('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"CB]V?Tx<uVtTRpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@> [/code]

21
21. december 2010 kl. 09:07

[code=asm] NextDay: NOP JMP NextDay [/code]

4
20. december 2010 kl. 16:54

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)

33
21. december 2010 kl. 11:43

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]

36
21. december 2010 kl. 13:49

Og vel måske verdens mindste program.

35
21. december 2010 kl. 13:19

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 :-)

37
21. december 2010 kl. 13:51

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!

73
27. december 2010 kl. 23:10

Paradoxet må ligge i APAR Management omkring "Do Nothing" Compliance... ;-)

38
21. december 2010 kl. 14:23

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.

8
20. december 2010 kl. 17:21

Under System III var /bin/true bare en tom exekverbar fil...

Poul-Henning

5
20. december 2010 kl. 17:06

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);'

7
20. december 2010 kl. 17:11

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 =)