Första Launchpad-uppladdningen genomförd!

28 juli 2009

Jag håller på att lära mig Launchpad.net/bazaar, som är en hemsida för öppen mjukvara. Alltså en ”project host” ungefär som SourceForge.net (störst och äldst?) eller code.google.com (googles initiativ – enklast att använda). På Launchpad huserar t.ex. Linux-varianten Ubuntu, bland många andra OSS (Open Source Software)-projekt.

Det jag laddat upp (kallas att ‘pusha’ i Bazaar/LP-terminologi) är vad jag hittills åstadkommit i mitt minispel som du kanske läst om i något av mina tidigare inlägg.

Hurra! Ska bli skoj att lära mera..

Uppdatering: Jag har hittat till kommandoraden för att ladda hem projektet. Så om du har Bazaar (bzr) installerat, är det bara att dra igång en kommandoprompt och klistra in följande:

bzr branch lp:~objarni/fortressdefender/wip-first-commit

Taggar: , ,


Veckoutmaning, kort update

18 juli 2009

Ibland måste man vara lite praktiskt.

utvmiljö

Utvecklingsverktyg

Min utvecklingsmiljö är en WinXP-dator med Pythons inbyggda editor IDLE. Detta för att jag jobbar på min brorsas dator och inte vill skräpa ned alltför mycket med en massa program. Dessutom gillar jag att använda så få verktyg som möjligt, eftersom jag med åldern blivit lite ”anti-install/konfigg” rent allmänt. Denna hållning kommer egentligen från insikten ”ju fler steg tills miljön är uppsatt, desto fler felkällor att leta i när något fallerar”. (Förvisso ett mera verkligt problem först vid långtidsprojekt/många utvecklare!)

Nå denna miljö må uppfylla mina minimalism-krav, men den har också sina skavanker i form av att IDLE brukar ”hänga sig” ibland när man trycker F5 (kör). Det är något med sockets-connections hit och dit (IDLE verkar använda sockets för att kommunicera mellan texteditor och shell-fönster). Den praktiska lösning jag läst på nätet var att ta kol på alla python-processer mha. task manager, och sedan starta IDLE igen.

Denna morgon hängde sig IDLE osedvanligt många gånger, vilket ledde till frustration. Så jag bestämde mig för att lösa problemet en gång för alla. Jag kom på att om dödandet av processerna var ett dubbelklick istället för harangen — Ctrl+Alt+Delete — sortera om namnlist — döda en process i taget mha musklick — så hade gräset varit grönare.

Sagt och gjort, jag fixade en .bat-fil som gjorde jobbet åt mig: killpythonw.bat. Här är dess innehåll:

TASKKILL /F /IM "pythonw.exe"

Så om du råkar ha samma problem som jag nån gång vet du att det finns en smidig lösning!

Taggar: , ,


Veckoutmaning: Litet spel med Pygame (6/7)

17 juli 2009

Läs tidigare delar: Ett Två Tre&Fyra Fem

En liten uppdatering. Nu har jag fått rätt på muspekare och ”sikte”. Siktet är helt enkelt en liten röd halvgenomskinlig kanonkula:

screenshot

Nu börjar det röra sig lite på skärmen äntligen!

Det som kvarstår innan det ska vara någorlunda spelbart är egentligen bara fartygen. Fast för att få ett komplett spel behövs såklart smått&gott som ”Press to begin” och snyggare grafik&ljud (just nu har jag bara en sampling när man ”släpper” en kanonkula, en sampling av något slags fjäder som släpps upp!). Och så explosioner/vattenkaskader när man missar!

Taggar: , , ,


Veckoutmaning: Litet spel på IPhone (2/7)

12 juli 2009

(detta är del 2 av 7 i en serie om hur jag bygger ett litet spel till IPhone på en vecka. Läs del ett som beskriver spelidén och reglerna.)

Den här dagen har blivit lite av en ”reality check” för mig. Jag började med att sätta ihop en lång lista med ”items” jag behövde för att kunna bygga spelet. Den blev längre än jag trodde, och det är lätt att bli lite missmodig.

Här är valda delar från den listan, som beskriver det jag behöver lära/bygga/designa:

  • Grafik: teknik. Använda texturer eller bara trianglar? Om texturer: lär om hur läsa in bitmappar i Objective-C, implementera texturuppladdning till OpenGLES (GLES = Graphics Library Embedded Systems; en strippad version av vanliga OpenGL som används på ”små enheter” som mobiltelefoner)
  • Grafik: data. Oavsett metod, måste bilderna/triangelinformation skapas.
  • Ljud: teknik. Läs om hur man spelar upp ljud på IPhone., och hur man läser in samplingar i minnet/laddar upp till ljudkortet (eller hur det nu funkar på IPhone). Prototypa/implementera.
  • Ljud: data. Skapa samplingar, eller hitta på nätet.
  • TDD. Jag är såpass invand med TDD-tekniken att jag helst av allt vill ha vettiga enhetstestmöjligheter. Ja faktiskt har jag svårt att se hur jag skulle trivas med att utveckla någonting utan enhetstester nuförtiden.

Jag hittade en artikel som beskriver googles approach till TDD på IPhone, den har jag skummat plus en introduktion till OCTest som är ett enhetstestramverk för XCode.

Installation + första testet med OCTest blir en bra början imorgon tror jag!

Taggar: , , , ,


Veckoutmaning: Litet spel på IPhone (1/7)

11 juli 2009

Ganska långt ned i en tråd på OpenTK.com* skrev jag (du får gissa mitt alias själv!) att två erfarenheter jag dragit när det gäller att ”slutföra projekt” är följande:

  1. Skriv ned ”visionen” först av allt (typ spelregler i ett brädspel)
  2. Tidbegränsa! (aka time-boxing)

Och nu ska jag leva som jag lär! Jag utmanar mig själv att, på time-boxen en vecka, bygga ett litet spel till IPhone.

Så idag har jag tänkt ihop en liten spelidé som jag presenterar med bild & regelbeskrivning.

Skydda fortet!

Skydda fortet!

Så till spelreglerna:

  • Spelet går ut på att skydda fortet i mitten av skärmen
  • Fortet attackeras av små fartyg som kommer inseglande
  • Till skydd har man en ”slangbella-kanon”
  • Man drar i kulan, och släpper för att avfyra!
  • Efterhand kommer det fler och snabbare segelfartyg
  • Så fort ett fartyg nuddar vid ön fortet står på, är spelet slut

Om jag skulle skriva en hiscore-lista är det antalet sekunder man lyckas försvara fortet som gäller som ”poäng”.

* OpenTK är ett multimediabibliotek för .NET, opensource! Det wrappar OpenGL, OpenAL så man kan skriva plattformsoberoende grafik- och ljudaccelererade spel i C#/Visual Basic.

Taggar: , , , ,


Två kollaborativa textprogram

05 juli 2009

För några veckor sedan letade jag febrilt efter något onlineprogram för att editera texter med flera användare samtidigt.

Anledningen var att jag och en kille från andra sidan världen (nåja, Italien var det iof men ändå långt från Götet!) tränat på parprogrammering+TDD tillsammans ett par gånger tidigare i vår, men lackat ur pga de stora fördröjningar den ena hela tiden utsätts för. Tekniken vi använde då var s.k. Desktop Sharing, t.ex. via Fjärrskrivbord eller VNC. Läs detta inlägg om du vill veta mera om vad vi använde för verktyg och hur det funkade.

I alla fall; jag kände ju till Google Docs sedan tidigare, som är utmärkt för att t.ex. skriva uppsats tillsammans (skolarbete/grupparbete/förening…) men det kräver att alla har så kallat google-konto. Dessutom är det ganska nedsmetat med funktioner man inte är speciellt intresserad av som programmerare.

Nåväl, jag hittade till slut ett par olika alternativ för ”kollaborativt textskrivande”. Det första är Etherpad:

etherpad

Etherpad - varje användare använder viss bakgrundsfärg

Etherpad kräver ingen inloggning, och varje deltagares text färgas efter dennes val av färg. Det ger en tydlig och enkel översikt över ”vad som händer”. Det är helt klart ett attraktivt alternativ för ”remote pair programming” som är målet. Nackdelen med etherpad är att det bara stödjer så kallad syntax highlighting för språket JavaScript.

Eftersom jag kodar C#/Python/C++ mestadels, letade jag vidare. Min Italienske vän hittade följande program: Collabedit:

collabedit

Collabedit - rent användargränssnitt

I Collabedit finns det stöd för färgkodning (som syntax highlighting heter på svenska) i alla de språk jag vardagligen använder, och många fler. Inte heller Collabedit kräver inloggning utan funkar rakt upp och ned.

Det som återstår för att uppfylla målet ”remote pair programming” är ett script som gör föjlande:

1. Laddar ned dokumentet från nätet (t.ex. med hjälp av wget)

2. Kör dokumentet i ”testläge” (t.ex. via någon flagga så att dokumentets tester körs)

3. Väntar på användarens knapptryckning

4. Hoppar till ett

På så sätt kan varje deltagare köra testerna vid behov. Alternativet är att byta ut (3) mot lämplig paus, t.ex. 10 sekunder, så behöver man inte ens trycka tangent för att köra om testerna. Jag kallar denna teknik ”kontinuerlig testkörning” och använder den ofta på jobbet. Det blir som en ”hjärtmonitor” på programsystemets ”hälsa”.

Det ska bli intressant att experimentera med dessa verktyg! Jag kommer att återrapportera hur det känns och funkar när jag kommit längre.

Taggar: , , , , , ,


Objective-C: Objekt med enkel metod

30 maj 2009

I Objective-C särskiljer man på .h och .m filer. .h-filer innehåller gränssnitt till objekt, kallade interface. .m-filer innehåller implementationen av gränssnittet, kallad implementation. Det är precis enligt den gängse litteraturen! För en gångs skull! (Vanligare i programspråk är namnen ”klassdeklaration” eller ”typdeklaration” för .h-filens innehåll, och ”definition” för .m-filens innehåll)

Nåväl, jag ska exemplifiera dessa begrepp genom att visa ett minimalt objekt Simple. Simple innehåller bara ett meddelande ”Hello”, som inte tar några argument och inte heller returnerar något värde. Det enda Hello gör är att skriva ut ”Hello” med hjälp av printf.

Vi börjar med .m-filen, alltså implementationen:


@implementation Simple
-(void)Hello {
    printf(@"Hello!");
}
@end

Själva innehållet omsluts allstå av @implementation … @end. Objektnamnet följer direkt efter implementation, och sedan raddas meddelandeimplementationerna upp.

I vårat fall har vi bara meddelandet Hello. Hello returnerar inte något värde, därför skriver man -(void) före namnet. ‘void’ har alltså samma betydelse i ObjC som i vanlig C/C++. Minustecknet betecknar meddelandets början.

Därefter skrivs meddelandekroppen inom måsvingar, och vi skriver dit våran printf().

Vi vänder oss till .h-filen, som är något mer komplicerad.

@interface Simple : NSObject {
}

-(void)Hello;

@end

Även i detta fall används snabela och två nyckelord för att omsluta informationen: @interface .. @end.

Notera att efter Simple står det kolon NSObject. Detta betyder att Simple baseras på objektet NSObjekt, vanligt objektorienterat arv alltså.

De ensamna måsvingarna därefter betyder inget i detta exempel; däri ska man lägga medlemsvariabler för objektet, men några sådana har inte Simple.

Sedan kommer Hello som skrivs väldigt likt .m filen och precis som i C/C++ avslutas raden med semikolon.

Taggar: ,


Objective-C: Minsta möjliga nytta

28 maj 2009

Så jag försökte göra något ”nyttigt”: slå ihopa två strängar.

Det visade sig vara hyffsat krångligt att slå ihop två strängar; mitt naiva försök ”Olof”+”B” funkade inte. Till att börja med heter typen för strängobjekt NSString, inte ”string” som är populärt i andra spårk. NSString-klassen har en metod stringByAppendingString som tar ett argument, strängen att lägga till, och returnerar resultatet:

self.text = [@"ab" stringByAppendingString:@"12"];

‘self’ motsvarar ”this” i andra språk (self används ju i Python också så det känns lagom hemma), och text är alltså deklarerad så här:

NSString *string;

Förresten heter det inte ”metod” i ObjC, utan ”meddelande”. Det är från OO-rötterna i Smalltalk, där nomenklaturen objekt och meddelanden används flitigt.

De två vanligaste filtyperna i ObjC är ”.h” (interfacefiler) och ”.m” (implementationsfiler), jag tror det löst motsvarar .h och .c/.cpp i C/C++-världen. Java och C# är ju lyckligt förskonade den typen av uppdelning, med allt filjoximojs som följer därav. Får gå igenom interface och implementation i en annan postning; det är kul med så tydliga namn på saker i alla fall! Istället för att kalla saker ”klasser” som är lite halvkrångligt namn i min mening.

Taggar: ,


Objective-C: Hello World!

25 maj 2009

OK det här programmet måste man ju kunna i ett nytt språk. Och det visar sig vara busenkelt; nästan identiskt med C/C++:

#import <stdio.h>
int main() {
   printf("Hello world\n");
   return 0;
}

Enda skillnaden är användningen av ”import” istället för ”include”. Tydligen fungerar ”import” likt ”include med ifdefs’ runt” alltså inkluderad/importerad fil läggs till max en gång.
Taggar: ,


Objective-C: Stapplande steg

25 maj 2009

Jag håller på att lära mig Objective-C, som är en ”objektorienterad utökning av C”. Anledningen är att det används som programmeringsspråk i Apples IPhone.

Nåväl, jag tänkte dokumentera i korta inlägg medans jag lär mig koncept från språket, mest för min egen skull, men om det är till nytta för någon annan är det ju kul!

För det första verkar ObjC vara icke-skräpsamlande; man får skriva avallokering själv, till skillnad från i C# eller Java, men i likhet med C++:

void main()
{
   id printer = [[Printer alloc] init];
   [printer addStringValue:"Hello World!"];
   [printer print];
   [printer free];
}

‘alloc’ skapar ett objekt av typen Printer, och ‘free’ på sista raden avallokerar detta objekt. ‘id’ är typen för ett allmänt objekt i ObjC, ungefär som ‘object’ i C# eller void* i C++.

Nu ska jag läsa vidare…

Taggar: ,


%d bloggare gillar detta: