Jeg har fået afsluttet mit tredje semester på Datamatiker-studiet. Vi har lavet et projekt i samarbejde med de andre grupper på årgangen. Vi stod for backend-delen af systemet, og så var der to andre grupper som stod for front-end delen.
Jeg blev syg til den oprindelige eksamen, så måtte til syge-eksamen, og jeg fik 10!God måde at starte sin sommerferie på
Her er en række projekter min sommerferie kommer til at gå med:
Pitch a game concept and win
Vi har i UngeSpiludviklere fået sponsoreret et par Xbox’e og HTC HD2 telefoner af Microsoft. Og vi har sammen med fagforeningen PROSA og spil-foreningen IGDA, fået stablet et arrangement på benene.
Konceptet går på at vi samler en masse danske spiludviklere, og får dem til at pitche idéer for hinanden, dem der har den bedste idé, får en Xbox eller en mobil til at lave deres spil på.
Roskilde-festival
Vi har igen i år et festivals projekt i Ungdommens Naturvidenskabelige Forening (UNF). Jeg har været koordinator og styret hele projektet. Vi laver en energivenlig netcafé, og oplade station på festivallen.
Vemod
Nu kommer vi til softwareprojekterne, det her er skrevet i C#.
Hvor tit sidder man ikke og savner muligheden for at søge efter et billede i et billede?
Jeg er ved at bygge noget software som muliggører at søge efter billeder i billeder. Den er dog ikke helt effektiv endnu, men jeg har et par tricks i ærmet. En test jeg kører lige nu giver følgende resultater:
Tid for at at søge efter billederne i det store billedet:
Jeg sidder lidt her og arbejder på en multitrådet chat-server der basalt minder lidt om IRC-protokollen. Da IRC i sit design mere bygger på stabilitet, og ikke så meget på hastighed, kan jeg ikke bare kopiere en typisk IRC-servers design.
Min første approach på at lave en multitrådet server gik med at bruge java.net.Socket, men der stødte jeg hurtigt på lidt problemer. På server-siden samler jeg alle mine klienter i forskellige rum, og broadcaster beskeder fra andre klienter til klienter i samme rum. java.net.Socket er en blocking-connection, dette kan nemt forklares ved følgende eksempel: (OBS! Pseudocode, skal du have det til at virke skal du bruge Outputstream på din socket)
class Room
{ArrayList clients =newArrayList();publicvoid broadCastToAll(String msg){foreach(Socket s : clients){
s.out.write(msg);}}}
Denne kode er lidt dum i et multi-trådet miljø, men det jeg vil fokusere på er s.out.write(), denne metode terminerer ikke før beskeden er sendt til klienten.
Det betyder at en langsom klient kan blokere for beskeder til de næste klienter i listen, derfor kaldes det blocking I/O. For at komme udenom dette bliver man nødt til at benytte java.nio.* hvilket virker nogenlunde ens, bare uden at blokere.
Jeg deltog til Copenhagen Games der forløb af stablen fra 1. til 4. April i Øksnehallen. Det var i forbindelse med et arrangement sammen med UngeSpiludviklere, vi havde en lille stand hvor vi viste vores spil frem, og vi havde også taget elektronik med fra Labitat. Prosa havde givet os mulighed for at deltage på standen, så den var beklædt med PROSA-bannere, brochurer og reklamer.
Der var også et tv-hold fra en skole der var ude og optage, og i den forbindelse blev jeg også interviewet.
Jeg sad og læste bogen “Java Concurrency in Practice” (ISBN: 9780321349606), da det slog mig at der var mange ting som jeg i dag tager for givet. Dette glemmer jeg ofte når jeg taler med mine medstuderende og nybegyndere, da jeg går ud fra at de ved det samme som mig.
For et eksempel er der reference-modellen i Java, som jeg stødte på for en del år siden, bøvlede lidt med, og forstod. Når jeg snakker med andre om fx. final-keywordet har de svært ved at forstå hvorfor og hvor det skal bruges.
Ideen bag final er at variablen som peger på referencen af et objekt kan ikke ændres efter den er blevet sat i konstruktøren. Men for at brugen af final giver mening kræver det at man forstår Javas måde at bruge referencer på.
Af andre eksempler på samme kan der nævnes volatile-keywordet.
For et par dage siden sad jeg, og ville ligge OpenWRT ned på min WRT54GL-router. Dette er for at udvide rækkevidden, hastigheden, antal SSID’s og for at køre små programmer (OpenVPN) på den.
Jeg stødte dog ind i et problem der stoppede mine installationsplaner i et par timer. Når jeg prøvede at uploade den fil som det nye styresystem ligger i, fik jeg den sjove fejlmeddelse “upgrade are failed“. Noget siger mig at Linksys udviklerne er glade for Broken-English som i “all your base are belong to us”
Efter at have prøvet at downloade diverse filer, og prøve at ligge dem op på routeren uden held, så slog det mig: Jeg bruger Safari, hvad nu hvis jeg prøver Google Chrome? Så jeg prøvede i Google Chrome, og BAM! så virkede det. Linksys udviklerne har formået at fucke et simpelt upload script op, og lave det non-crossbrowser compliant.