Almost, but not quine

As my followers will observe (do I even have any?), this blog doesn’t get updated too much, but I recently wrote a fun little variant of a quine that I thought I’d share. A quine is a computer program that prints its own source code, and has its name after the philosopher Willard Van Orman Quine. This concept is somewhat esoteric, but the theory of such programs is well described elsewhere, including how to write one.

But, briefly put: a quine is a fixed point of a programming language, since it simply prints itself when executed. Now, since we’ll need to understand this later on, I’ll include a relatively readable quine in python. The idea behind this quine is simply to write the program into a string, and print that string twice. Here goes:

code = [
"code = [",
"fnutt = chr(34)",
"print code[0]",
"for line in code:",
"    print fnutt + line + fnutt + ','",
"print code[-1]",
"for line in code[1:-1]:",
"    print line",
"]",
]
fnutt = chr(34)
print code[0]
for line in code:
    print fnutt + line + fnutt + ','
print code[-1]
for line in code[1:-1]:
    print line

Now, that’s not very interesting at all – the program simply prints itself, and others have implemented more interesting python quines, I’m sure. But I figured – hey, can’t a program instead modify itself, in order to do something more interesting? As an example, I implemented Wolfram’s rule 30 in an “almost, but not quine”. Simply put, a part of the program is modified at each execution and updated according to rule 30. This is the initial state of the program:

code = [
"code = [",
"# Add new code below here",
"x = '111'",
"rule30 = {'111': '0', '110': '0', '101': '0', '100': '1', '011': '1', '010': '1', '001': '1', '000': '0'}",
"def step(x):",
"    x = '0' + x + '0'",
"    middle = ''",
"    for i in xrange(1, len(x) - 1):",
"        key = x[i-1:i+2]",
"        middle += rule30[key]",
"    return '1' + middle + '1'",
"code[2] = code[2].replace(x, step(x))",
"# Add new code above here",
"fnutt = chr(34)",
"print code[0]",
"for line in code:",
"    print fnutt + line + fnutt + ','",
"startpoint = '1'",
"print code[-1]",
"for line in code[1:-1]:",
"    print line",
"]",
]
# Add new code below here
x = '111'
rule30 = {'111': '0', '110': '0', '101': '0', '100': '1', '011': '1', '010': '1', '001': '1', '000': '0'}
def step(x):
    x = '0' + x + '0'
    middle = ''
    for i in xrange(1, len(x) - 1):
        key = x[i-1:i+2]
        middle += rule30[key]
    return '1' + middle + '1'
code[2] = code[2].replace(x, step(x))
# Add new code above here
fnutt = chr(34)
print code[0]
for line in code:
    print fnutt + line + fnutt + ','
startpoint = '1'
print code[-1]
for line in code[1:-1]:
    print line

After running it a few times, e.g. like this:

python rule30.py | python | python | python | python | python | python

…we get the following printout:

code = [
"code = [",
"# Add new code below here",
"x = '11001000111000001'",
"rule30 = {'111': '0', '110': '0', '101': '0', '100': '1', '011': '1', '010': '1', '001': '1', '000': '0'}",
"def step(x):",
"    x = '0' + x + '0'",
"    middle = ''",
"    for i in xrange(1, len(x) - 1):",
"        key = x[i-1:i+2]",
"        middle += rule30[key]",
"    return '1' + middle + '1'",
"code[2] = code[2].replace(x, step(x))",
"# Add new code above here",
"fnutt = chr(34)",
"print code[0]",
"for line in code:",
"    print fnutt + line + fnutt + ','",
"startpoint = '1'",
"print code[-1]",
"for line in code[1:-1]:",
"    print line",
"]",
]
# Add new code below here
x = '11001000111000001'
rule30 = {'111': '0', '110': '0', '101': '0', '100': '1', '011': '1', '010': '1', '001': '1', '000': '0'}
def step(x):
    x = '0' + x + '0'
    middle = ''
    for i in xrange(1, len(x) - 1):
        key = x[i-1:i+2]
        middle += rule30[key]
    return '1' + middle + '1'
code[2] = code[2].replace(x, step(x))
# Add new code above here
fnutt = chr(34)
print code[0]
for line in code:
    print fnutt + line + fnutt + ','
startpoint = '1'
print code[-1]
for line in code[1:-1]:
    print line

Notice that line 4 was changed several times, according to rule 30. Neat, huh?

I hope someone can tell me how this is useful for anything what so ever!

Posted in Uncategorized | Tagged , , , , | 1 Comment

Vibrasjoner

I dag oppdaget jeg en iPad app som heter Data Collection. Denne noe nerdete appen lar deg ta opp akselerasjonsdata fra iPaden din og lagre til fil. For moro skyld slengte jeg iPaden på vaskemaskina og satte den på sentrifugering, og tok opp akselerasjonsdata. Det ser ikke særlig vettugt ut ved første øyekast.

Akselerasjonsdata

Akselerasjonsdata fra iPad liggende på vaskemaskin.

(For ordens skyld: En akselerasjon på 1.0 tilsvarer tyngdeakselerasjonen, altså at iPaden ligger i ro.)

Det har kommet mye rart ut av Frankrike, og ikke alt er ost eller vin. Rundt år 1800 kom matematikeren Fourier på noe helt genialt, nemlig Fourier-transformen. Denne forteller hvordan et signal (slik som akselerasjonskurven over) avhenger av frekvens, heller enn tid. Etter å ha overtalt laptopen til å regne ut Fouriertransformen for meg, ser signalet slik ut:

Fouriertransformert akselerasjon

Den Fouriertransformerte av akselerasjonen.

Aha! Etter en liten zoom-operasjon ser vi nærmere på den høyeste toppen:

Zoom av Fouriertransformen

Et nærbilde av toppen med lavest frekvens.

Vi ser at vaskemaskina vibrerer med en grunnfrekvens på mellom 6.6 og 6.7 Hz. Den grønne linja viser 400 omdreininger per minutt, eller ca. 6.67 Hz, som er det vaskemaskina var innstilt på. Tydeligvis er sentrifugen min litt latere enn oppgitt av produsenten. Jeg lurer på om jeg kan kreve å få tilbake pengene for vaskemaskina mi på grunn av dette?

Dagens utfordring til deg, kjære leser, blir enten å forklare resten av toppene i Fouriertransformen, eller å måle noe annet morsomt med din iPad/iPhone/Android/laptop! Godt nytt nerde-år!

Posted in Uncategorized | Leave a comment

Organdonasjon

Jeg har nylig donert et organ. Ikke hvilket som helst organ, men hjernen. Dette høres kanskje ut som det rene tøv, men det er det ikke. Jeg har nemlig donert den til forskning, og det mens jeg fremdeles er i live. Forskningen det er snakk om bruker fMRI til å kartlegge hvilke deler av hjernen som aktiveres når forsøkspersonen blir stimulert, hva nå det enn betyr. I mitt tilfelle stirret jeg på en skjerm som vekselvis blinket og ikke blinket. Det var kanskje ikke så stimulerende for meg, men hjernen ble i alle fall aktivert på ett eller annet vis.

For å være forsøkskanin må en klare å ligge stille inni en MR-maskin, som ikke er særlig vanskelig. En må også klare å stirre på en skjerm, men det går jo greit for de fleste. Det eneste ubehaget med forsøket var at lyden inni en MR-maskin kan være rimelig øredøvende, men ettersom du får utdelt dobbelt hørselvern er heller ikke dette noe stort problem.

Som belønning for strevet, det vil si å ligge i ro og slappe av en stund, fikk jeg en fin 3D-modell av hjernen min. Kort sagt kan jeg nå se hvordan hodet mitt ser ut i alle tre kartesiske dimensjoner, og som et eksempel slenger jeg ut et bilde. Her kan du blant annet se linsa i øyet, hjernebarken og bihulene. Som konklusjon vil jeg oppfordre folk til å donere sine organer til forskning før de dør, ettersom bildene du får kan være oppklarende. Jeg har ennå til gode å oppklare den store svarte saken midt inni skallen, så hvis noen vet noe, er det bare å legge til en kommentar!

Organdonasjon, epilog

I relaterte nyheter har jeg også ordnet meg med donorkort. Donorkortet finnes nå som iPhone- og Android-app, og den koster selvsagt ingen ting. Så min oppfordring til deg er å donere organer villig vekk, for etter døden har du faktisk ikke bruk for organene dine lenger. En død person har flere organer til overs og kan være til nytte for mange levende personer.

Posted in Uncategorized | Leave a comment

Ugler i mosen, del 2

Nå er det ikke meningen at dette skal bli en ornitologi-blogg, men her kommer en liten oppfølger til min forrige blogg-post. Nok en gang hjelper det å kunne litt om fysikk for å lukte ugler i mosen, men sunn fornuft hjelper som vanlig veldig mye. Først tar vi en diskusjon om hva elektromagnetisk stråling er. Poenget vil vise seg fort nok.

For de som ikke kan noe om fysikk, kan det være greit å se på denne oversikten over hva elektromagnetisk stråling er. Elektromagnetisk stråling inkluderer flere fenomener. “Til høyre” for synlig lys har vi gammastråling (en type radioaktivitet), røntgenstråling (slike som tannleger sender ut) og UV-stråling (sola(rium)). Alle disse typene stråling kan forårsake kreft eller sikker død ved uvettig innvortes eller utvortes bruk. Synlig lys, derimot, er trygt. Grunnen til dette er at lys med frekvenser høyere enn synlig lys består av fotoner med høy energi, som enkelt sagt kan røske elektroner løs fra de fleste atomer og molekyler. Dette kalles ioniserende stråling. Spesielt interessant er dette i forbindelse med DNA – ødelegg DNA-et med stråling og du kan få kreft. Dette skjer selvsagt til stadighet uansett, men det er jo greit å holde seg unna store mengder atomavfall for helsa sin skyld.

“Til venstre” for synlig lys har vi ymse varianter av stråling som ikke kan ødelegge DNA eller andre molekyler, fordi fotonene er av den late typen. Grovt sett kalles disse typene stråling enten infrarød stråling eller radiobølger. Infrarød stråling sendes ut av alt som er varmt – bare hold hånda over ei varm steikepanne og du skjønner hva jeg mener. Radiobølger sendes blant annet ut av mikrobølgeovner, mobiltelefoner og slikt. På grunn av at fotonene her er ekstremt slappe i fisken kan ikke slik stråling ødelegge atomer og molekyler, så du trenger ikke å være nevneverdig redd for mobiltelefonen din.

Vi prøver å benytte vår nyvunne kunnskap i praksis, og hopper rett i det med å se på et eksempel fra denne nettsida. Her tar Dr. Robert Young for seg 14 måter vi blir utsatt for elektromagnetisk stråling på, med overraskende konsekvenser. Prøv gjerne å lukte uglene i mosen selv før du leser fasiten!

Punkt 1 gjelder flyging. Ja, en får i seg mer stråling fra verdensrommet på grunn av at atmosfæren over flyet er heller tynn. Ettersom folk lever av å være flyvertinner og piloter har du kanskje gjettet at problemet likevel ikke er ekstremt stort. Sunn fornuft tilsier derfor noen grad av uglelukt her.

Punkt 2 gjelder hvor du bor. Ja, enkelte steder får du i deg mer stråling enn andre. Dette kan ha med blant annet hva som fins i fjell og så videre i nærheten, eller hvor høyt over havet du befinner deg – igjen, luft stopper stråling fra verdensrommet. Igjen, folk som er mye i fjellet er likevel ikke merkbart dårligere i formen enn vi som lever i lavlandet, så ikke bekymre deg så mye her heller. Lav grad av uglelukt.

Punkt 3 tar for seg farge-TV. Fargene i TV-en er jo så klart elektromagnetisk stråling, det kan lett ses fra oversikten over det elektromagnetiske spektrum. Vi husker heldigvis at synlig lys ikke er ioniserende, så ingen grunn til bekymring. Jeg kan også røpe at lys fra TV-en ikke er ulikt annet lys, men det har du sikkert skjønt på egen hånd. Den oppmerksomme leser med god luktesans vil her begynne å lukte at ugler kan ha slått reir i mosen.

I punkt 4 påstås det at tobakk er fullt av stråling. Dette er nok likevel et mindre problem enn at du puster inn varm tjære når du røyker. Røyking er uansett usunt, så det er ingen grunn til å blande inn elektromagnetisk stråling.

Når vår venn Young tar for seg punkt 5, snakker han om militæret. Uten å si noe spesifikt, henviser han til en artikkel som skriver om utarmet uran. Utarmet uran er et tungmetall og som sådan ikke noe du vil ha på brødskiva, men er ikke særlig mer radioaktivt enn gråstein. Grunnen er jo at den mest radioaktive delen av uranet er fjernet, herav navnet utarmet. Som en sidekommentar kan det nevnes at uran nedbrytes ved alfa-stråling, som ikke er elektromagnetisk stråling. Manglende fagkunnskap hos forfatteren gir ikke økt troverdighet, så her slår ugle-telleren ut igjen.

Ferdigmat får mye pepper for tida, og ikke bare i bokstavelig forstand. Punkt 6 hevder at ferdigmat er radioaktivt. Igjen begynner vår sunne fornuft å rynke på nesen – hvorfor er ikke ferske jordbær, som i enkelte land blir bestrålt, like utsatt som frysetørket posesuppe? Uansett sender ikke bestrålt mat ut stråling, på samme måte som sofaen din ikke lyser etter at du har slått av lyset på stua. Ugler, ugler, ugler.

Leger og sykepleiere er i følge punkt 7 svært utsatt for stråling. Det forbløffende med bløffmakere er at de alltid snakker om hjernekreft. Hvorfor får ikke sykepleiere kreft i øynene eller lungene av røntgenapparatet? Uansett så har du kanskje fått med deg at sykepleieren alltid går ut av rommet når det tas røntgenbilder, nettopp for å fjerne risikoen for stråling. Dette var kanskje ikke så opplagt for hvem som helst, så vi kan kanskje frikjenne vår venn Dr. Young for uglelukt på dette punktet.

Røykvarslere er faktisk radioaktive, som beskrevet i punkt 8. De sender ut alfa-stråling. Fordelen med alfa-stråling er at den ikke går gjennom papir, langt mindre plastboksen rundt røykvarsleren. Det frarådes riktignok å spise røykvarsleren, men strålingen fra en som henger på stua trenger du ikke tenke på. Misvisende nok er ikke alfa-stråling elektromagnetisk stråling, så her har Young vært frampå med ugle-parfymen sin og dusjet så det holder.

Punkt 9 inneholder påstander som bør få et åndsfriskt menneske til å tenke seg om minst et par ganger. At teltlivet er tungt belastet med stråling er vel ikke akkurat det største samfunnsproblemet vi har. Å ta med seg ryggsekk og telt på fjelltur gir nok større helsegevinst enn helseproblemer. Ta en tur i skogen og lukt på uglene, sier nå jeg.

Radon-gass er faktisk en av de største helseproblemene i Norge relatert til radioaktivitet, og gir oss mer stråling enn Tsjernobyl og slikt. Spesielt gjelder dette enkelte områder på Østlandet. Young blander igjen sammen alfa-stråling og elektromagnetisk stråling, for radon sender ut mest av det første. Rådene han gir er også helt tullete, for radon siver opp fra grunnen. Det er derfor ingen hjelp i å tette huset sitt mest mulig. Vi deler ut nok et ugle-poeng for punkt 10.

Elektriske biler sender som kjent ut elektromagnetisk stråling. Lys, for eksempel. Det er imidlertid ingen fare med å sitte på batteriet. Dette skjønte du sikkert selv. Her flesker vi til med to ugle-poeng.

I punkt 12 bør det gå opp for alle og enhver at Dr. (virkelig?) Young farer med ugleparfyme i bøtter og spann. En kjapp analyse av setningen “hair dryers are deadly” forteller oss at her må det være skrevet sprøyt opp og i mente. Hvor mange kjenner du som har blitt grillet av hårføner-stråling? Et annet problem er at stråling ikke måles i milli-Gauss, som han har brukt her. Det som måles i Gauss er magnetfelt. 20000 mG, eller 20 Gauss, er heller ikke et sterkt felt. Hvis du har en magnet på kjøleskapet ditt har du nok blitt utsatt for mer magnetisme enn dette. Jordmagnetfeltet er på litt under 1 Gauss, og dette utsettes du for hver dag hele livet, uten at dette medfører helseproblemer. Vi holder oss for nesen – her lukter det svidd ugle!

Punkt 13 tar opp klassikeren stråling fra mobiltelefoner. Som vanlig forårsaker stråling hjernekreft, og ikke andre krefttyper. Ettersom mobiltelefoner ligger langt “til venstre” for synlig lys er dette ikke ioniserende stråling, så du kan godt ringe til du er lei. Bare husk å sett til side penger til mobilregninga.

Nå er det opp til leseren å tro hva han eller hun vil om punkt 14. Bruk ditt sunne fornuft, så kommer du trolig til riktig konklusjon. Som et hint kan det nevnes at små dyr som frosker kan sveve i magnetfelt uten å ta skade av dette. Har du noen gang svevd i et magnetfelt fra en strømkabel?

Posted in Uncategorized | Leave a comment

Hvordan lukte ugler i mosen

Ugler i mosen lukter helt spesielt, og med god luktesans kan du kjenne lukta på mils avstand. Jeg tenker ikke på verken flora eller fauna i skog og mark akkurat nå. Jeg tenker egentlig mer på alternativ medisin, slik som Kvante Skalar Energi og lignende. For min del begynner det å lukte ugler cirka fem sekunder etter at du åpner nettsida. Dessverre er det mange blant oss som mangler denne finstemte luktesansen. Så, hvordan fungerer denne særegne ugle-luktesansen? Vel, den krever egentlig en viss grad av naturvitenskapelig kunnskap. For å forklare videre, la oss ta “Kvante Skalar Energi” som eksempel (uten at det er noe spesielt med denne ugle-arten i forhold til andre).

Når du først ser tittelen, så begynner du jo å tenke på hva ordene betyr. Ordet “skalar” er det ikke mange som bruker til daglig, men en skalar er simpelthen noe som ikke har en retning. Et eksempel er temperatur: Hvis du står opp og sier “oj, det er 17 minusgrader ute!” er det sjelden folk spør “åja, til venstre eller høyre?” Derfor er temperatur en skalar. Motsetningen til en skalar er en vektor. Et eksempel på dette er krefter, som har retning. Når du gir gass går bilen framover, ikke ned eller opp. Når du hopper ut fra en bygning, faller du ned, ikke til venstre. Et glimrende eksempel på en skalar er energi. Tenk på en stor pose smågodt: Det er mye energi i smågodt (det er jo derfor det er lett å bli småtjukk av sånt), men den har ingen bestemt retning. Bare se på små barn som får smågodt, de løper rundt i alle retninger uten mål og mening. Av denne grunn vil det aldri falle meg inn å si “skalar energi”, for det er den eneste formen for energi som finnes. Det blir som å si “mat-brød” eller “bokhylle-bøker”, for det fins bare brød som er mat, og det fins bare bøker som passer i bokhyller. Vel, okei, så fins det noen ekstremt store bøker og muggent brød, men du skjønner poenget: Ordbruken er rett og slett svært merkelig.

Neste påstand på nettsidene ser kanskje ut til å være rimelig for den ufaglærte:

Vet du at vi utsettes for 1 MILLION ganger mer elektromagetisk stråling enn våre besteforeldre?

Det snakkes jo stadig om all mobiltelefon-strålingen og så videre, så dette må vel være sant? Vel – ikke akkurat. Det elektromagnetiske spekteret inneholder mange ulike typer stråling, som røntgenstråling, UV-stråling, synlig lys, infrarød stråling, og radiobølger. Enkelt sagt er UV-stråling og synlig lys akkurat som rundstykker og brød: Det er grunnleggende snakk om samme fenomen, bare at de har ulik størrelse (eller bølgelengde) og lages på litt forskjellig måte, og overgangen mellom de to er flytende. Ettersom mine besteforeldre arbeidet mye ute, antar jeg de ble bestrålt mye mer av sola enn jeg blir, som sitter inne på et kontor. Et par lysstoffrør gjør ikke akkurat samme nytten, det vet alle som har prøvd å sole seg på kontoret. For ordens skyld: solstrålingen utgjør godt over 1 kilowatt stråling per kvadratmeter, og en mobiltelefon sender normalt ut mindre enn 1 watt.

Interessant nok har våre venner Skalar-energi-folket en løsninger på alle våre “problemer”: Kjøp et Kvante Skalar Energi Skjold og beskytt deg mot strålingen fra mobiltelefonen! Synes du 600 kroner var dyrt for et slikt skjold? Det har du forsåvidt rett i. Frykt ei, for du kan lage ditt eget for cirka 1 krone! Det du trenger finner du her. Ja, du leser riktig, aluminiumsfolie. Pakk inn mobiltelefonen din i aluminiumsfolie, og prøv å ring den. Hva skjer? Jo, aluminiumsfolien stopper strålingen fullstendig, og du får opptattsignal. Problemet er selvsagt at hvis strålingen stoppes, så kan du ikke ringe med mobiltelefonen. Det samme gjelder enten strålingen blir stoppet av et Kvante Skalar Energi Skjold eller aluminiumsfolie. Tips: Det er enklere og billigere å bare slå av mobiltelefonen!

Jeg tror du har skjønt poenget nå. Det finnes omtrent tusen eksempler på rar ordbruk og oppdiktede påstander i “fagfeltet” Kvante Skalar Energi, og jeg trenger ikke gå inn på alle. Uglelukta er overveldende allerede. Hvis du har luktet ugler selv, eller lest noe morsomt om ugler, legg gjerne igjen en kommentar under!

Posted in Uncategorized | 2 Comments

Fortran made easy

No, sorry, it is not true, it is simply advertising. Fortran will never be easy! However, you can make it slightly easier if you use vim and the snipMate.vim extension. Yesterday, I wrote the fortran.snippets file that was missing from snipMate, and put it here. To use it, simply copy the fortran.snippets file and put it in your ~/.vim/snippets folder. Happy hacking!

Posted in Uncategorized | Leave a comment

Plagiarismatic

Sometimes, uncomfortable things happen. One of these is cheating on exams by students. A hard thing to catch is cheating by software plagiarism; this typically occurs when students are given a take-home exam where they are expected to produce a working computer program. It is, of course, easier to copy someone else’s program than writing the whole thing yourself.

Without explaining my motivation right now, I recently wrote my own little plagiarism detection program in python, which is (usually) my programming language of choice. For no good reason at all I named the script plagiarismatic. The bad news is that it is too primitive to really impress anyone – the program simply uses string comparison on lines of programming code. The… Um… Well, the good and bad news, is that the script has nonetheless proven itself to be useful in the near past. If you happen to be interested in either using the program, or helping me develop it, you can visit my repository located at gitorious. The really nice thing about my script is that it consists of one single standalone text file, and runs Fast Enough™ on your local computer. I have sketched some possible ways of improving my script on the gitorious wiki – time will show if that ever happens.

A much better way of detecting software plagiarism than my naive program is the free service Moss maintained by Alex Aiken at Stanford. It is better than my program in every conceivable way save for two: (1) my script is free software, and (2) it runs locally everywhere you can run python (e.g. Windows, Mac, and Linux), so there is no need to upload files to a server and all that hassle.

Posted in Uncategorized | 1 Comment