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?
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.
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
3. Doug Stanhope – Fuck the Jews
4. Monty Python – Philosopher’s Song
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.
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.
Första dagarna med Windows 8 på jobbet
Jag uppgraderade från Windows 7 till Windows 8 på jobbdatorn i förra veckan – en netbook från HP. Installationen var smärtfri när den väl kom igång, men innan jag fick påbörja, fick jag en rapport på saker som skulle avinstalleras först. Lågnivåsgrejer. Omstart efter varje avinstallation. När installationsprogrammet väl jobbade, var uppgraderingen gjord på ett par minuter, men sen skulle allt gås igenom. Alla installerade program, alla inställningar, allt. Det tog sin lilla tid, men det gick ju bra att äta lunch under tiden. Och väl tillbaka från lunchen möttes jag av inloggningsskärmen. Allt var på plats. Visst, jag ville ta bort några “tiles” från startskärmen och jag ville lägga till några, innan jag var helt nöjd, men det var bara kul.
När jag körde Windows 7 på min jobbdator, tog det ett par minuter från det att jag tryckt Ctrl-Alt-Delete till dess att jag kunde börja jobba. Windows 8 har laddningstider på några sekunder, även efter kallstart, så vänta är just inget man gör längre.
Skrivbordet är så snyggt! Skuggorna är nästan helt borta, alla runda hörn är borta, alla texturer är borta. Det som ska användas, är det som visas. Däremot ska jag säga att Windows-användare redan börjat uttrycka missnöje med att systemet har ett skrivbord. Det känns lite retro. Som vanlig användare är det bara att låta bli att gå dit om man inte skulle vilja. Du kan ju även ta bort den tilen från startskärmen. Men som professionell användare, vill du kanske in i kontrollpanelen eller komma åt dina desktopapplikationer.
Att söka efter program eller filer funkar som en klocka. Tryck Win, och skriv vilket program du vill starta, eller tryck Win+F och skriv in vilken fil du vill öppna. Den gamla hederliga trädbaserade filhanteraren Utforskaren finns också kvar under Win+E. Jag har ingen förståelse för dem som gnäller över att Utforskaren har ribbons istället för rullgardinsmenyer. Klicka inte fram dem, så slipper du se dem.
Hittills har Windows 8 varit en ljuvlig upplevelse, och jag är övertygad att det kommer att fortsätta så. Och för min del, njuter jag av en ren arbetsyta och av alla de små kvalitetsförhöjande detaljerna som man stöter på under vägen. Och apropå det, jag passade även på att uppgradera från Visual Studio 2010 till 2012. Detta är förvisso en annan historia, men även där är alla texturer borta. En ren, fin och vit arbetsyta är vad man ser. Symbolspråket är lite annorlunda, så jag får läsa mig till var allt sitter, och det tog ett bra tag innan jag fattade hur man kom igång med byggandet av det som kallas för Windows Store Apps, alltså de som körs i det nya gränssnitett istället för på desktopen. Men det är nog där man vill hålla sig ändå. Härlig hårdvarurenderad grafik och stora, rena arbetsytor.
Windows 8 är ett klockrent operativsystem. Som Windows 7, fast snabbare, snyggare och med tillgång till det nya gränssnittet med Windows Store Apps. På bilden visar jag en twitterklient för Windows 8 som heter MetroTwit.
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).
SRT Tool 1.3
SRT Tool version 1.3 (download link on the Download page) has drag and drop support, and new functions for easy left and right time shifting.
One of the reasons I love WP7
A short video in Swedish. I show one of the reasons why I love my Windows Phone. Here I demonstrate how I close apps and switch between apps. Both phones in the demo are old, but their software is up to date.
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!
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.
Making music in Basic 7.0 part 5
You can add pitch bending using the SOUND command. By itself, you cannot use envelopes, just flat sounds in any given pitch. The arguments are voice (1, 2 or 3), frequency (0 to 65535), duration (16 = one second), pitch bend direction (0 = up, 1 = down, 2 sine up and down), minimum frequency, pitch bend speed, waveform (0 = triangle, 1 = saw tooth, 2 = square, 3 = noise) and finally pulse width (if waveform is 2).
This will make a straight beep, that will play for two seconds:
SOUND 1, 4000, 32
And now for something completely different, a hysterical vibrato!
SOUND 1, 5000, 32, 2, 3000, 800, 1
To add an envelope to the sound, you use what you know on the PLAY command, and add the SOUND command immediatly before. Make sure you trigger them on the same voice.
Both the SOUND command and the PLAY command (in combination with the ENVELOPE command and the T synthesize control character) allows you to control the waveform that is being used. When combining them, PLAY decides, not SOUND. Type in this in your Commodore 128. You might want to reset your machine first, to set all parameters to default.
10 SOUND 1, 5000, 32, 2, 3000, 800, 1 20 PLAY "V1T5C"
Cool, right? Click here to listen.
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.
Rob Reid: The $8 billion iPod
A new kind of science. Rob Reid talks about Copyright Math.
Thanks, Klas Dahlén!
Making music in Basic 7.0 part 4
Apart from PLAY, the commands that are available for making sounds and music are TEMPO, ENVELOPE, SOUND and FILTER.
TEMPO lets you control playback speed. The slowest is 1 and the fastest is 255.
ENVELOPE lets you modify the ten predefined instruments. You set the instruments using the T control character (0 to 9). The arguments are:
- The instrument you want to overwrite (0 to 9)
- Attack rate (0 to 15)
- Decay rate (0 to 15)
- Sustain level (0 to 15)
- Release rate (0 to 15)
- Waveform (0=triangle, 1=sawtooth, 2=square with adjustable pulse width, 3=noise, 4=ring modulation)
- Pulse width (0 to 4095) – only relevant if waveform is set to 2.
This program creates 5 similar instruments that differ in pulse width, and uses them in a simple riff.
10 ENVELOPE 0,0,5,0,0,2,100 20 ENVELOPE 1,0,5,0,0,2,300 30 ENVELOPE 2,0,5,0,0,2,500 40 ENVELOPE 3,0,5,0,0,2,700 50 ENVELOPE 4,0,5,0,0,2,900 60 TEMPO 40 70 PLAY "V1O2Q" 80 FOR I=1 TO 2 90 PLAY "T0CCT1CCT2CCT3CCT4CCT3CCT2CCT1CC" 100 NEXT
Click here to listen.
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.)
Making music in Basic 7.0 part 3
When you use the other synthesizer control characters (O, T, U and X), they apply no matter of what voice (V) you have chosen. So when you for example use O to set the octave (0 to 6), all the following notes, regardless of voice, will be played in that octave. This example will play the notes C, D and E in voice 1, octave one. C, D E in voice 1, octave 2, and finally C (at the same time as the previous E), D and E in voice 2, octave 2.
PLAY "V1O1 CDE O2 CDE V2 CDE"
T (0 to 9) lets you chose from 10 predefined envelopes. The predefined envelopes emulates different instruments (0 is piano, 1 is accordion and so on). Envelopes differ in attack rate, decay rate, sustain level, release rate and waveform. This song uses a harpsichord bass (T6), a drum (T3) and some xylophone (T9).
10 FOR I=1 TO 4 20 PLAY "V1O2T6QCCT3O5CO2T6C" 30 PLAY "V2O5T9CV3G" 40 NEXT
U (0 to 15) controls the volume, but not on the next note, but also on any playing note. This will therefore play both C notes using volume 2.
PLAY "U15 C U2 C"
Finally, X (0 or 1) is used to turn the frequency filter on (1) or off (0).
Making music in Basic 7.0 part 2
The synthesizer control characters (V, O, T, U and X) always take one integer argument and always affect all the rest of the notes that are played. V stands for Voice and is the key to polyphonic music. Since polyphonic music is achieved by playing notes in different voices, you will use V a lot.
Each note will be played when the previous note is done, but if you switch voices, the next note will be played immediately (if the voice you switch to is free). This will play the C note, followed by E and G at the same time. There are three voices available: 1, 2 and 3.
PLAY "V1 CE V2 G"
This program gives you a nice riff:
10 FOR A=1 TO 4 20 PLAY "V1 CE CV2EV3G" 30 PLAY "V1 CGCC V2EV3G" 40 PLAY "V1CV2EV3G" 50 NEXT
Making music in Basic 7.0 part 1
In Commodore Basic 7, music is made using the PLAY command. PLAY takes one string, and that string contains the notations that you want the Commodore 128 to play. The string “CDE” will play the note C, and then the note D and finally then note E.
PLAY "CDE"
Possible notes are C, D, E, F, G, A and B. R is for Rest. Rests take up time, but does not make any sound. Spaces are ignored, so you can add spaces to make your string more readable. When you add a note control character to your note, this might be of interest. There are three note control characters that you can use. Control characters operates only on the note immediately to the right, spaces ignored.
Sharp (#) will play the note a half tone higher, flat ($) will play the note a half tone lower and period (.) will increase note duration by 50%. Since note control chars only apply to the next note, this will play 4 C notes, but only the third note will be longer.
PLAY "CC.CC"
The synthesizer control characters and the duration control characters do not just apply to the next note to the right, but to all preceding notes. All synthesizer control characters take numeric arguments, but none of the duration control characters take any arguments. I will get back to the synthesizer control characters, but these are the duration control characters:
W for whole note, H for half note, Q for quarter note (default), I for eight note and S for sixteenth note. This will play two bars. The first bar will consist of two quarter notes and one half note. The next bar will consist of one half note and two quarter notes.
PLAY "QCCHCCQCC"
With this much knowledge, you can do Smoke on the water by Deep Purple. Something like this:
PLAY "QC#D.FC#DI#FHF"
Declaring multiple variables
In PowerShell, variables are created when they are first used. Just by assigning a value to a variable, that variable is created.
$x = 4
If you assign a different kind of value to that same variable, the type of the variable is changed.
$x = 4 Write-Output $x.GetType() $x = "Hello" Write-Output $x.GetType()
To lock a variable to a desired type, you can specify the type on the line where the variable is created. Now, this will fail, because “Hello” is a string value, not an integer.
[int]$x = 4 Write-Output $x.GetType() $x = "Hello" #fails here! Write-Output $x.GetType()
However, you can still change the type, if you declare the new type. This change to line 3 will make the code run again:
[int]$x = 4 Write-Output $x.GetType() [string]$x = "Hello" #Success! Write-Output $x.GetType()
Multiple variables can be created in one line of code. The first line will assign 1 to $a, 2 to $b and 3 to $c.
$a, $b, $c = 1, 2, 3 Write-Output $a Write-Output $b Write-Output $c
If you want type checking enforced on these variables, the type name are added next to each variable.
[int]$a, [int]$b, [int]$c = 1, 2, 3 Write-Output $a Write-Output $b Write-Output $c
The output is:
1 2 3
XQT 1.3
XQT, the XPath Query Tool, is updated to version 1.3. This version lets you select a node in the tree, and copy it’s path. Also, some bugs are fixed and a few interface inprovements are made. Check the Programs page for download link.
The easiest way to get started with Basic
Let’s say that you’re not really a programmer, but perhaps an old Sinclair-user or Commodore user. What is the easiest way to get started with programming on a modern PC?
Install Microsoft Small Basic from here (it’s completely free). Click Download Small Basic, and just follow the instructions. When the installation is complete, you will have a start menu item that looks like this:
Now, things are really easy. A document is a program. Write your code and hit F5 to run it. Here I have written a Hello world program, started it, and the result is this:
Press any key to continue editing.
Context help is always displayed to the right in the main windows of Small Basic, so that you will always know what the code you write actually does. And if you don’t know what to write at all, an easy tutorial can be found here.
Are you looking for a random number generator, try Math.GetRandomNumber. Specify the largest number you want. This code will display 100 numbers between 1 and 10.
For I=1 To 100 TextWindow.WriteLine(Math.GetRandomNumber(10)) EndFor
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!
SRT Tool 1.2
SRT Tool is upgraded to version 1.2. You can download it from the Programs page.
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.)
Sequential data on 5.25 inch floppies
If you have an actual 1571 disk drive for your Commodore 128, insert a blank disk, format it using the HEADER command. Something like this:
HEADER "MY DISK", I44, D0
(Formatting a disk takes a while.)
If you are running a virtual Commodore 128 in VICE, click File, Attach disk image, Drive 8. Create a d64 image file and attach that image. To create the file, enter a desired filename, like test.d64, provide a name, click Create Image, then click Attach.
(The commands I use are available Commodore Basic 4.0 on Commodore PET, but I run Commodore Basic 7 on a C128.)
Your disk is now inserted and completely empty. You can check the content using the DIRECTORY command.

As a Commodore user, you know that you sometimes have to refer to your disk drive using its drive number (the first disk drive is 0) and sometimes you have to use the device number (the first disk drive is 8). The OPEN command operates on any device, therefore a device number is required in this case. The first parameter is the logical file number (just a number that identifies the file), the second is the device number (8). The third argument is a channel number – enter 2. Then, in one single string argument, you type in the file name, the file type and the file mode. I want to create a file called TEST.DAT as a sequential file and I want to write to it, so I my string holds “TEST.DAT,SEQ,WRITE”.
10 OPEN 1, 8, 2, "TEST.DAT,SEQ,WRITE"
To fill your file with data, use the PRINT# command. Anything goes here. This will print one string, one integer, and then yet another string. You provide your logical file number so that PRINT# knows what file you are targeting.
20 PRINT#1, "ONE STRING" 30 PRINT#1, 5 40 PRINT#1, "ANOTHER STRING"
If you like, more data can be added in one line.
When you are done writing, close the file using the CLOSE command. Again, provide your logical file number.
50 CLOSE 1
After running this program, you should have a small sequential file called TEST.DAT on your disk. If any disk error occurred, the lamp on your drive is flashing now – it shouldn’t do that.
Continued here.
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.
Vic 20 software
The Vic 20 is not dead yet. I just found this lovely site packed with Vic 20 games and tools. To run a game in the Vice emulator, just download the prg file (download link might be hard to find for some of the programs) and autostart it from the File menu in Vice. Happy hacking in 176 x 184 pixels!
Vic 20 photo by Sven Petersen.




Comments