The Genius of Rowan Atkinson

Arcade classics

Think Different – like everybody else

I kind of like this Apple-bashing cider commercial by Somersby. It starts off like a parody of how Apple is doing product hyping, and ends with a couple of sarcastic comments.

“And it works perfectly in direct sunlight” – like the Amazon Kindle do! Somersby Cider – less apps, more apples.

But I’m sure that the Apple users can handle this, they have the perfect defense. Apple products are the best, it just can’t be measured. Apple products are secure, the tests are fixed. Apple products have the right features, nobody wants the features that it lacks. Apple products are quality items, nobody ever drops their phones. And so on.

Twitter for Windows 8!

Nice!

What Most Schools Don’t Teach – Short Film

A beautiful short film published by Code.org:

Atari Sky Raider

What the fuck is this? In 1978 Atari releases the arcade game Sky Driver. Insert a coin, and experience spectacular semi-3D graphics. You are controlling a bomber on an airplane and you fire away on objects on the ground. Suddenly, the “time is out” and the game is over. In the middle of all the fun, you are told to walk away or add more coins. So HOW do I get extended play? Why do you do this to me, Atari?

sky_raider

Public Service TV and Sean Banan

I am an obedient license payer, and I appreciate the Swedish public service media. I do not watch much television, but the license money covers the cost of public service radio, which I like to listen to. Swedish public service relies heavily on licensing money, and it is mandatory to pay. Only sometimes takes the sponsors to fund a major event.

I am a happy customer. Broadcaster SVT has produced and demonstrated the kind of program that is not always the commercial media to handle. But SVT also competes with commercial media. The song selection for the Eurovision Song Contest is one such example. It is a spectacle known as the Eurovision Song Contest, and it’s one of the TV shows that I actually watch.

After the contestants contributions played, authors usually publish their songs online. As one song, “Cocabanana” with Sean Banan, was a suspect theft, I published a YouTube clip in which I recounted a few seconds of the song so that viewers could form an opinion. This is something I have the right to do. In Sweden, we have the right to quote a piece that we are talking or writing about, and my clip had a few second from the song in question.

SVT incorrectly reported me to YouTube for copyright infringement. Anyone who uses YouTube knows that it causes a lot of problems, and I asked SVT for a comment on Twitter. I have not received any comment from them yet.

Of course I deleted the video, I respect their claims to own the copyright to the Sean Banan song. But this whole story reminds me that SVT is a company that gets their money for free, and are used to getting what they want. Fuck ‘em.

The story starts here. More on this here.

TPB AFK

Om du är en del av copyrightlobbyn eller om du av andra skäl står oförstående för tankar kring rättssäkerhet, är detta inte texten för dig.

Innan jag såg filmen TPB AFK trodde jag att Sverige kvalificerade som bananrepublik eftersom man iscensatte rättegångar på grund av att man såg ett hot man helt enkelt inte kunde hantera. Men det är något annat är problemet.

Själva idén om att torrents är ett nytt sätt att sprida information är inte en aspekt som vill samtalas, och själva idén att kommersiella företag, filmbolag, musikbolag eller vad som helst, kan tjäna pengar på att exploatera marknaden som den ser ut, hånas. Alltså, det som alla andra affärsidkare är förpassade till, hånar musikindustrin. Åklagaren vann, eftersom åklagaren och domaren var samma juridiska person. Domaren stämde, och dömde. Och vann. I många andra länder ska domaren vara en utomstående jurist, men inte i Sverige.

Avgörande för domen är inte personerna bakom The Pirate Bay, utan det faktum att ny teknik kan exploateras för olaglig verksamhet, och att tillgängliggöra ny teknik var det verkliga brottet. Och sen var det den där lilla frågan om hur förluster verkligen beräknas. Mediaindustrin är den enda bransch som på allvar påstår att de har ett negativt antal anställda, och med hjälp av “copyright math” beräknar man vilket skadestånd man ska ha.

Som upphovsman inom mjukvara och musik, skulle jag önska att jag inte hade personer som åklagare Håkan Roswall eller domare Tomas Norström på min sida. Kreativitet inom infrastruktur måste börja betraktas som en plattform och i förläningen en förutsättning för dem som producerar innehåll. Att reflexmässigt fuska inom juridiken vid minsta motgång, är ett tecken på att man inte är mogen att ta sig an branschen över huvudet taget.

Piratkopiering är fel, men upphovsrättsmännen har gjort sig själva till ett korrupt särintresse. Forskning och framsteg är verkligen ett problem, men också ett nödvändigt sådant, eftersom frånvaron av utveckling också är ett problem, om möjligt ett ännu större. Att jaga personer som illegalt delar filer, piratkopierar eller profiterar på andras verk, borde intressera upphovsrättsinnehavarna.

Är The Pirate Bay den första organisationen som representerar nya distributionskanaler som upphovsrättsindustrin ger sig på? Nej, samtliga kanaler som de exploaterat för att tjäna pengar, har de först motarbetat. Det är så man känner igen personer med tveksam affärsmoral.

Boot Hill 1977

I associate Boot Hill with cheap restaurants along country roads that I visited in the early eighties when while traveling from and to national vacation destinations. However, the game itself is excellent, especially if you consider that it came out in 1977. The idea is simple – kill your opponent with a pistol – but artwork and audio is superb. And as a kid, after spending 4-5 hours in a car reading Spiderman while the radio playing easy listening, this was great. Try it out!

Discussing the Post PC Era

Apple is keen to talk about the Post PC Era – the era where light devices like iPads will be the user’s first choice. The Macintosh does not do as well as the iPad. Even though the Mac has been around since 1984, less than one in 10 computers connected to the Internet is a Mac today, and 9 of 10 computers run Windows. But perhaps the first true Post PC isn’t an iPad, but a Surface Pro? Read this thread at MacRumors.com.

Lots of work now…

My life right now is quiet ok. I am teaching Business Intelligence to a ambitions group of students in Stockholm and DBA to a small but very talented group of Microsoft experts. Of course I miss my wife and family in my home town, but the only really dark cloud is of another (work related) kind. Occationally I stay at my brother’s, but when I don’t, I get up at five, teach for 6 hours and then prepare for a couple of hours before my journey back home – my work day ends at 7:30 in the evening. I have lots of great ideas for Commodore 64/128 projects, but everything has to wait until summer. Hope to post some cool stuff here then.

Roliga timmen 3

Ytterligare 10 humoristiska och musikaliska klipp från YouTube:

1. Rob Reid – The $8 billion iPod

2. Jim Jefferies – Christians

3. Doug Stanhope – Fuck the Jews

4. Monty Python – Philosopher’s Song

5. Jimmy Carr – Bullying

6. Pete Seeger – What did you learn in school today?

7. Flight of the Conchords - Foux Da Fa Fa

8. South Park – Merry Fucking Christmas

9. Anders Björk positionerar sig

10. Magnus Betnér – Yttrandefrihet

Föregående lista finns här. Mycket nöje!

På allmän begäran (nåja)

Efter att ha slängt ihop en enkel digitaliseringskod i VB som exporterar Commodore 128-kod, kan jag nu tillgodose önskemålet som alla Commodore-användare har: En idolbild på mig!

Detta är koden som genererades. Notera hur digitaliseraren lagrar två instruktioner per rad, och att den skapar “tända” pixlar som DRAW-instruktioner. Flera tända pixlar på raden, genereras som horisontella linjer.

10 COLOR 1,16:COLOR 2,12:GRAPHIC 1,1
20 DRAW 1,147,4 TO 150,4:DRAW 1,144,5 TO 152,5
30 DRAW 1,155,5 TO 161,5:DRAW 1,142,6 TO 164,6
40 DRAW 1,139,7 TO 166,7:DRAW 1,138,8 TO 167,8
50 DRAW 1,136,9 TO 169,9:DRAW 1,135,10 TO 170,10
60 DRAW 1,134,11 TO 171,11:DRAW 1,132,12 TO 172,12
70 DRAW 1,131,13 TO 172,13:DRAW 1,130,14 TO 173,14
80 DRAW 1,129,15 TO 174,15:DRAW 1,129,16 TO 175,16
90 DRAW 1,128,17 TO 176,17:DRAW 1,127,18 TO 176,18
100 DRAW 1,126,19 TO 177,19:DRAW 1,126,20 TO 178,20
110 DRAW 1,125,21 TO 178,21:DRAW 1,125,22 TO 179,22
120 DRAW 1,124,23 TO 159,23:DRAW 1,163,23
130 DRAW 1,166,23 TO 180,23:DRAW 1,124,24 TO 154,24
140 DRAW 1,170,24 TO 180,24:DRAW 1,123,25 TO 149,25
150 DRAW 1,172,25 TO 180,25:DRAW 1,123,26 TO 148,26
160 DRAW 1,173,26 TO 180,26:DRAW 1,123,27 TO 147,27
170 DRAW 1,174,27 TO 180,27:DRAW 1,123,28 TO 147,28
180 DRAW 1,175,28 TO 181,28:DRAW 1,123,29 TO 146,29
190 DRAW 1,176,29 TO 181,29:DRAW 1,122,30 TO 147,30
200 DRAW 1,176,30 TO 182,30:DRAW 1,122,31 TO 144,31
210 DRAW 1,147,31:DRAW 1,177,31 TO 182,31
220 DRAW 1,122,32 TO 144,32:DRAW 1,147,32 TO 148,32
230 DRAW 1,176,32 TO 182,32:DRAW 1,122,33 TO 145,33
240 DRAW 1,148,33:DRAW 1,150,33
250 DRAW 1,177,33 TO 182,33:DRAW 1,122,34 TO 146,34
260 DRAW 1,177,34 TO 182,34:DRAW 1,122,35 TO 146,35
270 DRAW 1,177,35 TO 181,35:DRAW 1,122,36 TO 147,36
280 DRAW 1,177,36 TO 181,36:DRAW 1,122,37 TO 147,37
290 DRAW 1,177,37 TO 181,37:DRAW 1,122,38 TO 147,38
300 DRAW 1,178,38 TO 181,38:DRAW 1,121,39 TO 149,39
310 DRAW 1,178,39 TO 181,39:DRAW 1,121,40 TO 152,40
320 DRAW 1,171,40:DRAW 1,178,40 TO 180,40
330 DRAW 1,121,41 TO 153,41:DRAW 1,165,41 TO 170,41
340 DRAW 1,178,41 TO 180,41:DRAW 1,121,42 TO 147,42
350 DRAW 1,150,42 TO 155,42:DRAW 1,166,42 TO 167,42
360 DRAW 1,121,43 TO 157,43:DRAW 1,166,43 TO 170,43
370 DRAW 1,120,44 TO 158,44:DRAW 1,164,44 TO 169,44
380 DRAW 1,173,44:DRAW 1,120,45 TO 149,45
390 DRAW 1,152,45 TO 158,45:DRAW 1,164,45 TO 165,45
400 DRAW 1,167,45 TO 168,45:DRAW 1,120,46 TO 149,46
410 DRAW 1,152,46 TO 158,46:DRAW 1,164,46 TO 165,46
420 DRAW 1,167,46 TO 168,46:DRAW 1,122,47 TO 149,47
430 DRAW 1,151,47 TO 158,47:DRAW 1,165,47 TO 166,47
440 DRAW 1,122,48 TO 158,48:DRAW 1,122,49 TO 159,49
450 DRAW 1,122,50 TO 145,50:DRAW 1,150,50 TO 159,50
460 DRAW 1,122,51 TO 140,51:DRAW 1,150,51 TO 159,51
470 DRAW 1,122,52 TO 140,52:DRAW 1,151,52 TO 159,52
480 DRAW 1,122,53 TO 123,53:DRAW 1,125,53 TO 140,53
490 DRAW 1,153,53 TO 159,53:DRAW 1,122,54 TO 123,54
500 DRAW 1,125,54 TO 141,54:DRAW 1,152,54 TO 159,54
510 DRAW 1,122,55 TO 123,55:DRAW 1,125,55 TO 141,55
520 DRAW 1,152,55 TO 158,55:DRAW 1,178,55
530 DRAW 1,125,56 TO 141,56:DRAW 1,143,56
540 DRAW 1,152,56 TO 158,56:DRAW 1,178,56 TO 179,56
550 DRAW 1,125,57 TO 142,57:DRAW 1,152,57 TO 159,57
560 DRAW 1,178,57:DRAW 1,124,58 TO 143,58
570 DRAW 1,152,58 TO 154,58:DRAW 1,156,58 TO 159,58
580 DRAW 1,178,58:DRAW 1,127,59 TO 143,59
590 DRAW 1,153,59 TO 154,59:DRAW 1,156,59 TO 160,59
600 DRAW 1,163,59 TO 164,59:DRAW 1,178,59
610 DRAW 1,128,60 TO 144,60:DRAW 1,153,60 TO 159,60
620 DRAW 1,129,61 TO 144,61:DRAW 1,153,61 TO 158,61
630 DRAW 1,130,62 TO 144,62:DRAW 1,153,62 TO 158,62
640 DRAW 1,131,63 TO 146,63:DRAW 1,152,63 TO 157,63
650 DRAW 1,132,64 TO 146,64:DRAW 1,151,64 TO 157,64
660 DRAW 1,161,64:DRAW 1,132,65 TO 156,65
670 DRAW 1,132,66 TO 156,66:DRAW 1,133,67 TO 154,67
680 DRAW 1,133,68 TO 160,68:DRAW 1,162,68
690 DRAW 1,133,69 TO 147,69:DRAW 1,150,69 TO 157,69
700 DRAW 1,134,70 TO 146,70:DRAW 1,149,70 TO 156,70
710 DRAW 1,134,71 TO 155,71:DRAW 1,135,72 TO 155,72
720 DRAW 1,135,73 TO 153,73:DRAW 1,136,74 TO 156,74
730 DRAW 1,136,75 TO 156,75:DRAW 1,136,76 TO 156,76
740 DRAW 1,136,77 TO 155,77:DRAW 1,135,78 TO 155,78
750 DRAW 1,134,79 TO 156,79:DRAW 1,133,80 TO 155,80
760 DRAW 1,133,81 TO 155,81:DRAW 1,132,82 TO 155,82
770 DRAW 1,131,83 TO 143,83:DRAW 1,146,83 TO 149,83
780 DRAW 1,131,84 TO 144,84:DRAW 1,148,84 TO 149,84
790 DRAW 1,130,85 TO 135,85:DRAW 1,137,85 TO 144,85
800 DRAW 1,129,86 TO 136,86:DRAW 1,138,86 TO 144,86
810 DRAW 1,128,87 TO 137,87:DRAW 1,140,87 TO 143,87
820 DRAW 1,173,87:DRAW 1,128,88 TO 137,88
830 DRAW 1,141,88 TO 144,88:DRAW 1,173,88 TO 174,88
840 DRAW 1,127,89 TO 138,89:DRAW 1,142,89 TO 144,89
850 DRAW 1,173,89 TO 175,89:DRAW 1,126,90 TO 139,90
860 DRAW 1,144,90 TO 145,90:DRAW 1,173,90 TO 175,90
870 DRAW 1,126,91 TO 140,91:DRAW 1,173,91 TO 176,91
880 DRAW 1,125,92 TO 140,92:DRAW 1,174,92 TO 178,92
890 DRAW 1,123,93 TO 141,93:DRAW 1,174,93 TO 184,93
900 DRAW 1,122,94 TO 142,94:DRAW 1,174,94 TO 187,94
910 DRAW 1,119,95 TO 143,95:DRAW 1,174,95 TO 190,95
920 DRAW 1,117,96 TO 145,96:DRAW 1,175,96 TO 192,96
930 DRAW 1,115,97 TO 145,97:DRAW 1,176,97 TO 179,97
940 DRAW 1,181,97 TO 195,97:DRAW 1,113,98 TO 146,98
950 DRAW 1,176,98 TO 198,98:DRAW 1,111,99 TO 147,99
960 DRAW 1,173,99:DRAW 1,176,99 TO 202,99
970 DRAW 1,110,100 TO 148,100:DRAW 1,171,100 TO 173,100
980 DRAW 1,176,100 TO 205,100:DRAW 1,108,101 TO 149,101
990 DRAW 1,171,101 TO 173,101:DRAW 1,177,101 TO 184,101
1000 DRAW 1,186,101 TO 204,101:DRAW 1,206,101 TO 209,101
1010 DRAW 1,106,102 TO 149,102:DRAW 1,170,102 TO 173,102
1020 DRAW 1,177,102 TO 184,102:DRAW 1,186,102 TO 206,102
1030 DRAW 1,208,102 TO 210,102:DRAW 1,105,103 TO 150,103
1040 DRAW 1,170,103 TO 173,103:DRAW 1,177,103 TO 184,103
1050 DRAW 1,186,103 TO 211,103:DRAW 1,103,104 TO 117,104
1060 DRAW 1,120,104 TO 151,104:DRAW 1,170,104 TO 173,104
1070 DRAW 1,177,104 TO 185,104:DRAW 1,188,104 TO 212,104
1080 DRAW 1,101,105 TO 121,105:DRAW 1,125,105 TO 151,105
1090 DRAW 1,170,105 TO 173,105:DRAW 1,178,105 TO 185,105
1100 DRAW 1,189,105 TO 212,105:DRAW 1,100,106 TO 121,106
1110 DRAW 1,125,106 TO 151,106:DRAW 1,170,106 TO 173,106
1120 DRAW 1,178,106 TO 186,106:DRAW 1,190,106 TO 213,106
1130 DRAW 1,99,107 TO 112,107:DRAW 1,115,107 TO 122,107
1140 DRAW 1,126,107 TO 152,107:DRAW 1,169,107 TO 172,107
1150 DRAW 1,178,107 TO 186,107:DRAW 1,191,107 TO 213,107
1160 DRAW 1,98,108 TO 113,108:DRAW 1,117,108 TO 122,108
1170 DRAW 1,126,108 TO 153,108:DRAW 1,170,108 TO 172,108
1180 DRAW 1,178,108 TO 189,108:DRAW 1,191,108 TO 214,108
1190 DRAW 1,96,109 TO 110,109:DRAW 1,113,109
1200 DRAW 1,115,109 TO 124,109:DRAW 1,127,109 TO 154,109
1210 DRAW 1,170,109 TO 172,109:DRAW 1,178,109 TO 186,109
1220 DRAW 1,188,109 TO 190,109:DRAW 1,192,109 TO 214,109
1230 DRAW 1,95,110 TO 112,110:DRAW 1,116,110 TO 124,110
1240 DRAW 1,128,110 TO 155,110:DRAW 1,169,110
1250 DRAW 1,171,110 TO 172,110:DRAW 1,178,110 TO 187,110
1260 DRAW 1,190,110 TO 215,110:DRAW 1,94,111 TO 112,111
1270 DRAW 1,115,111 TO 125,111:DRAW 1,128,111 TO 155,111
1280 DRAW 1,171,111 TO 172,111:DRAW 1,178,111 TO 188,111
1290 DRAW 1,192,111 TO 215,111:DRAW 1,94,112 TO 124,112
1300 DRAW 1,128,112 TO 156,112:DRAW 1,171,112 TO 172,112
1310 DRAW 1,178,112 TO 189,112:DRAW 1,193,112 TO 215,112
1320 DRAW 1,92,113 TO 124,113:DRAW 1,129,113 TO 157,113
1330 DRAW 1,171,113 TO 172,113:DRAW 1,179,113 TO 190,113
1340 DRAW 1,193,113 TO 215,113:DRAW 1,91,114 TO 125,114
1350 DRAW 1,129,114 TO 157,114:DRAW 1,171,114
1360 DRAW 1,179,114 TO 216,114:DRAW 1,91,115 TO 126,115
1370 DRAW 1,129,115 TO 158,115:DRAW 1,170,115 TO 171,115
1380 DRAW 1,179,115 TO 216,115:DRAW 1,90,116 TO 112,116
1390 DRAW 1,114,116 TO 118,116:DRAW 1,121,116 TO 127,116
1400 DRAW 1,130,116 TO 158,116:DRAW 1,169,116 TO 171,116
1410 DRAW 1,179,116 TO 216,116:DRAW 1,90,117 TO 113,117
1420 DRAW 1,116,117 TO 118,117:DRAW 1,121,117 TO 128,117
1430 DRAW 1,130,117 TO 159,117:DRAW 1,169,117 TO 171,117
1440 DRAW 1,179,117 TO 216,117:DRAW 1,89,118 TO 113,118
1450 DRAW 1,117,118 TO 119,118:DRAW 1,121,118 TO 129,118
1460 DRAW 1,131,118 TO 160,118:DRAW 1,170,118 TO 171,118
1470 DRAW 1,179,118 TO 216,118:DRAW 1,88,119 TO 114,119
1480 DRAW 1,122,119 TO 129,119:DRAW 1,132,119 TO 160,119
1490 DRAW 1,170,119 TO 171,119:DRAW 1,180,119 TO 218,119
1500 DRAW 1,88,120 TO 119,120:DRAW 1,126,120 TO 129,120
1510 DRAW 1,133,120 TO 161,120:DRAW 1,180,120 TO 219,120
1520 DRAW 1,88,121 TO 113,121:DRAW 1,115,121 TO 119,121
1530 DRAW 1,127,121 TO 130,121:DRAW 1,134,121 TO 162,121
1540 DRAW 1,180,121 TO 219,121:DRAW 1,87,122 TO 114,122
1550 DRAW 1,116,122 TO 121,122:DRAW 1,127,122 TO 131,122
1560 DRAW 1,135,122 TO 162,122:DRAW 1,180,122 TO 219,122
1570 DRAW 1,87,123 TO 122,123:DRAW 1,128,123 TO 133,123
1580 DRAW 1,137,123 TO 163,123:DRAW 1,181,123 TO 220,123
1590 DRAW 1,87,124 TO 123,124:DRAW 1,128,124 TO 134,124
1600 DRAW 1,138,124 TO 163,124:DRAW 1,176,124
1610 DRAW 1,181,124 TO 221,124:DRAW 1,87,125 TO 124,125
1620 DRAW 1,128,125 TO 137,125:DRAW 1,139,125 TO 164,125
1630 DRAW 1,173,125 TO 177,125:DRAW 1,181,125 TO 222,125
1640 DRAW 1,87,126 TO 125,126:DRAW 1,129,126 TO 165,126
1650 DRAW 1,173,126 TO 177,126:DRAW 1,181,126 TO 222,126
1660 DRAW 1,87,127 TO 126,127:DRAW 1,130,127 TO 165,127
1670 DRAW 1,174,127 TO 178,127:DRAW 1,181,127 TO 218,127
1680 DRAW 1,220,127 TO 222,127:DRAW 1,87,128 TO 127,128
1690 DRAW 1,131,128 TO 166,128:DRAW 1,174,128 TO 177,128
1700 DRAW 1,181,128 TO 222,128:DRAW 1,87,129 TO 128,129
1710 DRAW 1,132,129 TO 166,129:DRAW 1,176,129 TO 177,129
1720 DRAW 1,181,129 TO 222,129:DRAW 1,87,130 TO 129,130
1730 DRAW 1,133,130 TO 166,130:DRAW 1,176,130 TO 177,130
1740 DRAW 1,181,130 TO 222,130:DRAW 1,87,131 TO 130,131
1750 DRAW 1,134,131 TO 167,131:DRAW 1,181,131 TO 222,131
1760 DRAW 1,87,132 TO 131,132:DRAW 1,135,132 TO 167,132
1770 DRAW 1,181,132 TO 222,132:DRAW 1,87,133 TO 132,133
1780 DRAW 1,138,133 TO 168,133:DRAW 1,176,133
1790 DRAW 1,181,133 TO 224,133:DRAW 1,87,134 TO 133,134
1800 DRAW 1,136,134:DRAW 1,139,134 TO 168,134
1810 DRAW 1,176,134:DRAW 1,181,134 TO 224,134
1820 DRAW 1,87,135 TO 134,135:DRAW 1,139,135 TO 168,135
1830 DRAW 1,181,135 TO 225,135:DRAW 1,88,136 TO 135,136
1840 DRAW 1,140,136 TO 169,136:DRAW 1,181,136 TO 225,136
1850 DRAW 1,88,137 TO 136,137:DRAW 1,141,137 TO 169,137
1860 DRAW 1,181,137 TO 226,137:DRAW 1,88,138 TO 137,138
1870 DRAW 1,142,138 TO 170,138:DRAW 1,181,138 TO 226,138
1880 DRAW 1,88,139 TO 137,139:DRAW 1,142,139 TO 170,139
1890 DRAW 1,182,139 TO 227,139:DRAW 1,88,140 TO 138,140
1900 DRAW 1,142,140 TO 170,140:DRAW 1,182,140 TO 228,140
1910 DRAW 1,89,141 TO 139,141:DRAW 1,143,141 TO 170,141
1920 DRAW 1,182,141 TO 228,141:DRAW 1,89,142 TO 140,142
1930 DRAW 1,143,142 TO 170,142:DRAW 1,182,142 TO 229,142
1940 DRAW 1,89,143 TO 140,143:DRAW 1,144,143 TO 171,143
1950 DRAW 1,182,143 TO 230,143:DRAW 1,89,144 TO 141,144
1960 DRAW 1,144,144 TO 171,144:DRAW 1,182,144 TO 230,144
1970 DRAW 1,89,145 TO 142,145:DRAW 1,145,145 TO 171,145
1980 DRAW 1,182,145 TO 231,145:DRAW 1,89,146 TO 143,146
1990 DRAW 1,146,146 TO 171,146:DRAW 1,182,146 TO 231,146
2000 DRAW 1,90,147 TO 144,147:DRAW 1,146,147 TO 172,147
2010 DRAW 1,182,147 TO 231,147:DRAW 1,90,148 TO 144,148
2020 DRAW 1,147,148 TO 172,148:DRAW 1,182,148 TO 232,148
2030 DRAW 1,90,149 TO 146,149:DRAW 1,148,149 TO 172,149
2040 DRAW 1,182,149 TO 232,149:DRAW 1,90,150 TO 146,150
2050 DRAW 1,148,150 TO 172,150:DRAW 1,182,150 TO 233,150
2060 DRAW 1,90,151 TO 173,151:DRAW 1,182,151 TO 233,151
2070 DRAW 1,90,152 TO 148,152:DRAW 1,150,152 TO 173,152
2080 DRAW 1,183,152 TO 214,152:DRAW 1,218,152 TO 234,152
2090 DRAW 1,90,153 TO 148,153:DRAW 1,151,153 TO 173,153
2100 DRAW 1,183,153 TO 215,153:DRAW 1,219,153 TO 235,153
2110 DRAW 1,91,154 TO 149,154:DRAW 1,152,154 TO 174,154
2120 DRAW 1,183,154 TO 215,154:DRAW 1,219,154 TO 236,154
2130 DRAW 1,91,155 TO 150,155:DRAW 1,152,155 TO 174,155
2140 DRAW 1,183,155 TO 214,155:DRAW 1,219,155 TO 220,155
2150 DRAW 1,222,155 TO 237,155:DRAW 1,91,156 TO 151,156
2160 DRAW 1,153,156 TO 174,156:DRAW 1,183,156 TO 214,156
2170 DRAW 1,219,156:DRAW 1,223,156 TO 237,156
2180 DRAW 1,91,157 TO 151,157:DRAW 1,154,157 TO 174,157
2190 DRAW 1,182,157 TO 213,157:DRAW 1,218,157 TO 219,157
2200 DRAW 1,224,157 TO 237,157:DRAW 1,92,158 TO 152,158
2210 DRAW 1,154,158 TO 175,158:DRAW 1,182,158 TO 213,158
2220 DRAW 1,218,158 TO 219,158:DRAW 1,224,158 TO 238,158
2230 DRAW 1,92,159 TO 153,159:DRAW 1,155,159 TO 175,159
2240 DRAW 1,182,159 TO 213,159:DRAW 1,217,159 TO 219,159
2250 DRAW 1,223,159 TO 238,159:DRAW 1,92,160 TO 154,160
2260 DRAW 1,156,160 TO 175,160:DRAW 1,182,160 TO 211,160
2270 DRAW 1,216,160 TO 218,160:DRAW 1,223,160 TO 239,160
2280 DRAW 1,92,161 TO 155,161:DRAW 1,157,161 TO 176,161
2290 DRAW 1,182,161 TO 211,161:DRAW 1,216,161 TO 218,161
2300 DRAW 1,223,161 TO 239,161:DRAW 1,93,162 TO 156,162
2310 DRAW 1,158,162 TO 176,162:DRAW 1,182,162 TO 211,162
2320 DRAW 1,216,162 TO 218,162:DRAW 1,222,162 TO 240,162
2330 DRAW 1,93,163 TO 176,163:DRAW 1,182,163 TO 211,163
2340 DRAW 1,215,163 TO 217,163:DRAW 1,222,163 TO 240,163
2350 DRAW 1,93,164 TO 176,164:DRAW 1,182,164 TO 210,164
2360 DRAW 1,215,164 TO 216,164:DRAW 1,221,164 TO 241,164
2370 DRAW 1,93,165 TO 176,165:DRAW 1,182,165 TO 210,165
2380 DRAW 1,214,165 TO 216,165:DRAW 1,221,165 TO 241,165
2390 DRAW 1,94,166 TO 177,166:DRAW 1,182,166 TO 209,166
2400 DRAW 1,213,166 TO 216,166:DRAW 1,221,166
2410 DRAW 1,224,166 TO 242,166:DRAW 1,94,167 TO 177,167
2420 DRAW 1,182,167 TO 209,167:DRAW 1,213,167 TO 215,167
2430 DRAW 1,220,167:DRAW 1,224,167 TO 243,167
2440 DRAW 1,94,168 TO 177,168:DRAW 1,182,168 TO 209,168
2450 DRAW 1,212,168 TO 215,168:DRAW 1,219,168
2460 DRAW 1,224,168 TO 237,168:DRAW 1,239,168 TO 243,168
2470 DRAW 1,95,169 TO 177,169:DRAW 1,182,169 TO 209,169
2480 DRAW 1,211,169 TO 214,169:DRAW 1,218,169 TO 219,169
2490 DRAW 1,223,169 TO 237,169:DRAW 1,240,169 TO 244,169
2500 DRAW 1,96,170 TO 177,170:DRAW 1,182,170 TO 215,170
2510 DRAW 1,217,170 TO 219,170:DRAW 1,222,170 TO 245,170
2520 DRAW 1,96,171 TO 178,171:DRAW 1,182,171 TO 246,171
2530 DRAW 1,97,172 TO 147,172:DRAW 1,149,172 TO 178,172
2540 DRAW 1,182,172 TO 246,172:DRAW 1,97,173 TO 178,173
2550 DRAW 1,182,173 TO 246,173:DRAW 1,98,174 TO 178,174
2560 DRAW 1,182,174 TO 247,174:DRAW 1,98,175 TO 178,175
2570 DRAW 1,182,175 TO 216,175:DRAW 1,218,175 TO 221,175
2580 DRAW 1,224,175 TO 247,175:DRAW 1,99,176 TO 179,176
2590 DRAW 1,182,176 TO 217,176:DRAW 1,219,176 TO 223,176
2600 DRAW 1,226,176 TO 247,176:DRAW 1,99,177 TO 179,177
2610 DRAW 1,183,177 TO 184,177:DRAW 1,195,177 TO 202,177
2620 DRAW 1,204,177 TO 224,177:DRAW 1,226,177 TO 247,177
2630 DRAW 1,99,178 TO 179,178:DRAW 1,195,178 TO 201,178
2640 DRAW 1,205,178 TO 248,178:DRAW 1,100,179 TO 179,179
2650 DRAW 1,195,179 TO 203,179:DRAW 1,207,179 TO 248,179
2660 DRAW 1,100,180 TO 176,180:DRAW 1,194,180 TO 204,180
2670 DRAW 1,208,180 TO 220,180:DRAW 1,222,180 TO 249,180
2680 DRAW 1,101,181 TO 175,181:DRAW 1,180,181 TO 182,181
2690 DRAW 1,195,181 TO 207,181:DRAW 1,210,181 TO 249,181
2700 DRAW 1,101,182 TO 176,182:DRAW 1,178,182 TO 189,182
2710 DRAW 1,196,182 TO 209,182:DRAW 1,211,182 TO 249,182
2720 DRAW 1,102,183 TO 171,183:DRAW 1,175,183 TO 192,183
2730 DRAW 1,196,183 TO 211,183:DRAW 1,213,183 TO 250,183
2740 DRAW 1,102,184 TO 171,184:DRAW 1,176,184 TO 193,184
2750 DRAW 1,197,184 TO 203,184:DRAW 1,205,184 TO 212,184
2760 DRAW 1,214,184 TO 250,184:DRAW 1,102,185 TO 152,185
2770 DRAW 1,154,185 TO 171,185:DRAW 1,176,185 TO 195,185
2780 DRAW 1,198,185 TO 204,185:DRAW 1,206,185 TO 214,185
2790 DRAW 1,216,185 TO 249,185:DRAW 1,102,186 TO 166,186
2800 DRAW 1,169,186 TO 171,186:DRAW 1,177,186 TO 197,186
2810 DRAW 1,199,186 TO 204,186:DRAW 1,207,186 TO 215,186
2820 DRAW 1,219,186 TO 235,186:DRAW 1,238,186 TO 249,186
2830 DRAW 1,102,187 TO 151,187:DRAW 1,156,187 TO 164,187
2840 DRAW 1,169,187 TO 171,187:DRAW 1,177,187 TO 198,187
2850 DRAW 1,201,187 TO 205,187:DRAW 1,208,187 TO 217,187
2860 DRAW 1,221,187 TO 236,187:DRAW 1,240,187 TO 249,187
2870 DRAW 1,102,188 TO 148,188:DRAW 1,157,188 TO 159,188
2880 DRAW 1,167,188 TO 172,188:DRAW 1,174,188 TO 200,188
2890 DRAW 1,203,188 TO 206,188:DRAW 1,209,188 TO 219,188
2900 DRAW 1,222,188 TO 238,188:DRAW 1,241,188 TO 249,188
2910 DRAW 1,103,189 TO 149,189:DRAW 1,151,189 TO 155,189
2920 DRAW 1,165,189 TO 166,189:DRAW 1,170,189 TO 172,189
2930 DRAW 1,174,189 TO 201,189:DRAW 1,205,189 TO 206,189
2940 DRAW 1,210,189 TO 222,189:DRAW 1,224,189 TO 239,189
2950 DRAW 1,242,189 TO 249,189:DRAW 1,104,190 TO 155,190
2960 DRAW 1,170,190 TO 173,190:DRAW 1,180,190 TO 206,190
2970 DRAW 1,211,190 TO 249,190:DRAW 1,104,191 TO 155,191
2980 DRAW 1,170,191 TO 173,191:DRAW 1,181,191 TO 190,191
2990 DRAW 1,193,191 TO 207,191:DRAW 1,211,191 TO 249,191
3000 DRAW 1,104,192 TO 158,192:DRAW 1,172,192 TO 173,192
3010 DRAW 1,182,192 TO 184,192:DRAW 1,186,192 TO 191,192
3020 DRAW 1,194,192 TO 208,192:DRAW 1,212,192 TO 249,192
3030 DRAW 1,104,193 TO 159,193:DRAW 1,173,193 TO 174,193
3040 DRAW 1,181,193 TO 184,193:DRAW 1,187,193 TO 191,193
3050 DRAW 1,196,193 TO 209,193:DRAW 1,213,193 TO 248,193
3060 DRAW 1,104,194 TO 160,194:DRAW 1,173,194
3070 DRAW 1,181,194 TO 185,194:DRAW 1,189,194 TO 193,194
3080 DRAW 1,197,194 TO 210,194:DRAW 1,214,194 TO 248,194
3090 DRAW 1,104,195 TO 162,195:DRAW 1,183,195 TO 186,195
3100 DRAW 1,190,195 TO 195,195:DRAW 1,199,195 TO 212,195
3110 DRAW 1,215,195 TO 248,195:DRAW 1,104,196 TO 163,196
3120 DRAW 1,183,196 TO 187,196:DRAW 1,193,196 TO 196,196
3130 DRAW 1,200,196 TO 213,196:DRAW 1,216,196 TO 248,196
3140 DRAW 1,105,197 TO 165,197:DRAW 1,181,197 TO 188,197
3150 DRAW 1,195,197 TO 197,197:DRAW 1,202,197 TO 214,197
3160 DRAW 1,218,197 TO 248,197:DRAW 1,105,198 TO 169,198
3170 DRAW 1,173,198:DRAW 1,182,198 TO 189,198
3180 DRAW 1,197,198 TO 200,198:DRAW 1,203,198 TO 216,198
3190 DRAW 1,219,198 TO 236,198:DRAW 1,238,198 TO 248,198
3200 DRAW 1,105,199 TO 174,199:DRAW 1,182,199 TO 190,199
3210 DRAW 1,198,199 TO 201,199:DRAW 1,205,199 TO 217,199
3220 DRAW 1,222,199 TO 237,199:DRAW 1,240,199 TO 247,199

Resultatet visas på bilden ovan.

Varför jag tänker satsa på Microsoft Surface Pro

En tre månader lång spellista

Jag har dokumenterat vad radiostationen Rockklassiker har spelat för låtar under första kvartalet 2012. Vi pratar alltså om en tre månader lång spellista bestående av 26510 poster. Med denna information kan den som är intresserad ställa frågor och göra statistiska analyser.

Hur stor andel av låtarna är Europe-låtar? Hur många olika låtar med Queen väljer de bland? Vilken låt spelas mest? Vilka låtar spelas bara en gång? Hur förändras valet av låtar över veckor?

Mycket nöje!

Du kan ladda hem spellistan i Microsoft SQL Server-format här.

Yes 1969-2011

An introduction to the music of Yes, 1969 to 2011, in Swedish.

Bakery (Windows game)

I have just finished my indie game Bakery. It’s a simple 2D arcade game for Windows, based on Open GL.

The installer does not spread out any files, and full uninstallation is supported from the Control Panel.

Check it out here.

80 megapixel photo

Using a few exposures on my Nikon D3200 and a fabulous little program called Microsoft ICE (Image Composite Editor), I have created this 80 mexapixel picture of a tarn, close to where I live. You can download the full 70 MB picture from here. I have also a smaller preview version here (9 megapixel, 5 MB).

Radio Houdi

I have just finished editing the final episode och the podcast i do with John Houdi, Radio Houdi, so if you are in to entertainment and skepticism in Swedish, this is the podcast for you. Perhaps we will do this again sometime.

A sample from episode 16 and 17 och science and religion:

Ozma Wars review

Ozma Wars is one of those infamous time thieves from my childhood. Ozma Wars is a classical shoot’em up game like Space Invaders but with two major differences. In Ozma Wars, you don’t have lifes, you have energy. You off start by docking something that looks like a boat in space, and that gives you the energy you need until next time it shows up. The second difference is that different enemies have different movement patterns, and one aspect of the game is to know what enemies are moving in what pattern. Also, some of them have target seeking missiles.

You might want to avoid the soundtrack, that basically consists of one loud annoying sound, but as usual, the sound effects contribute to the game.

As in Space Invaders, enemy movement speed is very dependent on how busy the main processor is, so you may be surprised by a sudden increase of speed from one enemy when you’ve just killed another. Some videos can be found here, here and here.

The sound is annoying, but the most annoying thing is that collision detection fails from time to time and enemies randomly doesn’t get drawn. I like the game, and these glitches adds to the excitement.

Up’n Down (in-game)

A cover version of the C64 version of the Up’n Down soundtrack. Originally written by Tony Vece.

Play some music COM music

PowerShell can make use of the .NET Framework, and can load assemblies using the Load function in System.Reflection.Assembly. Also, PowerShell can also use any COM class that is registered on your system. This feature gives you the ability to automate applications like Microsoft Word and Excel, or why not Windows Media Player? An error will be thrown if you specify an unexisting COM type name. This code will create an instance of Windows Media Player, if you have it installed:

$player = New-Object -ComObject WMPLAYER.OCX

Then, the Windows Media Player API is at your fingertips, as described on MSDN. This command will give you some kick ass rock:

$player.URL = "F:\Music\ACDC - Who made who.mp3"

Enjoy!

Meanwhile in Belgrade…

Title photo by Artur Andrzej.

From Åsa Avdic:

Car polo

Car Polo is an excellent bar game. In one player mode, you control the red car and the other three are controlled by the computer. The object is to push the yellow ball in to the red goal. The purple car is on your team whereas blue and cyan cars are in the opposing team.

In two player mode, each player controls one car and the other two cars are computer controlled. The arcade version allowed up to four players, two in each team. This is the hardware from 1977 (image stolen from www.arcade-history.com):

The controls are lovely and this game goes well with cheap Miller beer, cigarettes and good friends. I have the ROM image from the machine, but if anyone still have the original hardware: Yes, I’d like to come to dinner!

Roland’s Ratrace (track 2)

Another C64 cover. Track 2 from Roland’s Ratrace by Martin Galway.

Zoids by Rob Hubbard

A cover version of Zoids by Rob Hubbard.

What’s all this then?

This might look strange to a C programmer:

Dim I(10) As Integer
Console.WriteLine(I.Length)
Dim J(I.Length - 1) As Integer
Console.Write(J.Length)

This will give the output 11 and 11. The array named I has 11 elements because the last index (10) is given when the array is created. The array named J has 11 elements bacause Length (11) – 1 equals 10, and a 0-based array with last element 10 gives you 11 elements. Confusing.

Non-related implicit type casting

As always, I use Visual Basic in strict mode. I have this function that expects a Foo array:

Sub DoSomething(X() As Foo)
   Console.WriteLine(X.Length)
End Sub

What I’m showing here is true for single variables too, but I am showing this using arrays. This cannot be called using an Integer array as follows:

DoSomething({1, 2, 3})

Adding a Integer constructor to the Foo class does not help. However, you can add a widening operator to the Foo class, and define how an implicit conversion is done, like so:

Public Class Foo

   Private mX As Integer

   Public Sub New(X As Integer)
      Me.mX = X
   End Sub

   Shared Widening Operator CType(X As Integer) As Foo
      Return New Foo(X)
   End Operator

End Class

Now, both the above method call is accepted. And because this also works on arrays, this simple line constructs three Foo objects:

Dim X() As Foo = {4, 5, 6}

The equivalent with a single (non arrayed) object would look like this:

Dim Y As Foo = 7

The opposite to Widening is called Narrowing and is used to define explicit type casts.

Shadow of the Beast

The 1989 mega hit Shadow of the Beast, a run through of the different versions.

Shame on you, Microsoft!

This is Deepak Chopra:

Chopra is an pseudo scientist and a magical healer who uses (or missuses) scientific buzzwords to make his mumbo jumbo sound plausible. Now, guess who Microsoft hires to inspire their partners in this years world wide partner conference? The charlatan himself! Money well spent? It’s a shame, Microsoft!

(Thanks Jesper Johag.)

Calling methods on uninitiated variables

If you don’t assign a value to an object variable, it will have the value Nothing (equivalent to null in C#). These two lines of code will therefore effectively do exactly the same thing, even though the second version will produce slightly more assembly:

Dim MyString As String

…and…

Dim MyString As String = Nothing

If you create an extension method on the String class, and you write it in such fashion that it can handle uninitialized variables, it will be able to do so. The extension is done to the type, not to the object. This is an example of a function that checks if a string is empty:

<System.Runtime.CompilerServices.Extension()> _
Public Function IsEmpty(ByVal S As String) As Boolean
   If S Is Nothing Then
      Return True
   Else
      Return (S = "")
   End If
End Function

When the above extension is present, the following piece of code…

Dim MyString As String = Nothing
Console.WriteLine(MyString.IsEmpty())

…displays the word True in your console window!

Reading sequential data from your 5.25 inch floppy

Continued from here.

Once you have some sequential data in a file on your disk, you can write a program to read it back. How this is done, varies between different Commodore machines, and can be quite tricky. On the C128, it is as easy as writing the data. You have to remember the structure of the data you were writing – in my case one string, one integer and one string.

This is a new program (clear any existing program by typing NEW), and it is assumed that you have your floppy with the data you created in the earlier post.

Use OPEN to open a file, but this time, specify that you want to READ the sequential file TEST.DAT.

10 OPEN 1, 8, 2, "TEST.DAT,SEQ,READ"

Then, use INPUT# to read each stored record. Just remember the data types. PRINT# supports writing multiple records in one call, and INPUT# supports multiple reads. So instead of writing three lines, I can read three records in one line, like so:

20 INPUT#1, A$, B, C$

Use CLOSE to close the file.

30 CLOSE 1

These line will display the file content on screen:

40 PRINT A$
50 PRINT B
60 PRINT C$

And if everything is correct, you will now se this:

ONE STRING
 5
ANOTHER STRING

(The commands I use are available Commodore Basic 4.0 on Commodore PET, but I run Commodore Basic 7 on a C128.)

Skeptikerforum stänger 2012-06-01

Skeptikerforum, inklusive mediasidan, stängs permanent 2012-06-01. För den som vill debattera eller läsa om det senaste inom skeptikerrörelsen rekommenderas:

Om du har inlägg eller länkar som du vill spara, ska det göras före juni 2012. Fram till 2012 går det bra att posta nya inlägg, såvida du inte registrerat från någon publik e-posttjänst (typ Hotmail eller gMail),

Reading out SQL Data with named columns

This code reads out names from the Employees table of the Northwind database. You must correct the Data Source property in the connection string for it to run.

#Create a connection object and open it.
[String]$cns="Data Source=XXX;Initial Catalog=Northwind;
   Integrated Security=True"
[System.Data.SqlClient.SqlConnection]$connection=New-Object 
   -TypeName System.Data.SqlClient.SqlConnection -ArgumentList $cns
$connection.Open()

#Create a command and execute it.
[String]$query="SELECT FirstName, LastName
   FROM dbo.Employees ORDER BY LastName, FirstName" 
[System.Data.SqlClient.SqlCommand]$command=New-Object
   -TypeName System.Data.SqlClient.SqlCommand
$command.Connection=$connection
$command.CommandText=$query
$r=$command.ExecuteReader()

#Iterate the result.
while($r.Read()) {
    
    #Read out first name.
    [String]$firstname=""
    if( -not $r.IsDBNull(0)) {
        $firstname=$r.GetString(0)
    }
    
    #Read out last name.
    [String]$lastname=""
    if( -not $r.IsDBNull(1)) {
        $lastname=$r.GetString(1)
    }
    
    #Display.
    Write-Output ($firstname + " " + $lastname)
}

#Close the reader.
$r.Close()

$connection.Close()
$connection.Dispose()

Here I use column indexes when referring to columns. A change in the SQL query will produce errors in the code that reads out the result. The solution is to call the GetOrdinal function of the reader to get the indexes of the columns, like this:

#Create a connection object and open it.
[String]$cns="Data Source=XXX;Initial Catalog=Northwind;
   Integrated Security=True"
[System.Data.SqlClient.SqlConnection]$connection=New-Object 
   -TypeName System.Data.SqlClient.SqlConnection -ArgumentList $cns
$connection.Open()

#Create a command and execute it.
[String]$query="SELECT FirstName, LastName
   FROM dbo.Employees ORDER BY LastName, FirstName" 
[System.Data.SqlClient.SqlCommand]$command=New-Object 
   -TypeName System.Data.SqlClient.SqlCommand
$command.Connection=$connection
$command.CommandText=$query
$r=$command.ExecuteReader()

#Get use named columns.
[int]$Index_FirstName=$r.GetOrdinal("FirstName")
[int]$Index_LastName=$r.GetOrdinal("LastName")

#Iterate the result.
while($r.Read()) {
    
    #Read out first name.
    [String]$firstname=""
    if( -not $r.IsDBNull($Index_FirstName)) {
        $firstname=$r.GetString($Index_FirstName)
    }
    
    #Read out last name.
    [String]$lastname=""
    if( -not $r.IsDBNull($Index_LastName)) {
        $lastname=$r.GetString($Index_LastName)
    }
    
    #Display.
    Write-Output ($firstname + " " + $lastname)
}

#Close the reader.
$r.Close()

$connection.Close()
$connection.Dispose()

Now, if you change the the query, the reader will still find the desired columns.

Five reasons to choose Windows before Mac

5. Design. There are a huge number of computers to choose from. The only constant is change. The few Mac machines on the market are OK, but you can find lots and lots of machines running Windows, including masterpieces Mac users only can dream of.

4. Software. The “killer software” that makes a Mac worth owning (Safari, Cubase, Photoshop, Propellerheads Reason, Firefox) is perfectly available on Windows. Also, for each Mac specific application you can find, there are at least ten Windows specific alternatives.

3. Memory cost. A larger number of vendors and in some cases larger vendors, provides customer value.

2. Ease of use. Windows is well documented, logically constructed. To install an application on Windows, you download it and confirm that you want to install it. You don’t have to know what drag and drop operations that you expect to perform, and therefore, you don’t need any experience to get by. Experience gives you advantages, but is not required.

1. Customisation and extensibility. The smallest edition of the extremely powerful code editor is free to use for any purpose, and just about any Microsoft application comes with a well documented programming interface. And if you want to start from scratch, the .NET Framework is without competition. In both cases, no matter what programming language you know.