October 27, 2008

__autoload i PHP5

Lei av å inkludere hauger av klassefiler i PHP? Prøv __autoload!

Obs! Autload fungerer kun i PHP5

Autoload er en funksjon som kalles ved bruk av en udefinert klasse eller interface.

Eks:

<?php
function __autoload($class_name) {
    require_once $class_name . '.php';
}

$obj = new MyClass1();
$obj2 = new MyClass2();
?>

Høres dette skummelt ut? Som alltid bør slike funksjoner brukes med fornuft.
Her er et par ting å tenke på:

  • Vurder å vaske $class_name-parameteren. For å minimere hacker-muligheter.
  • Feil kan ikke fanges med catch inne i __autoload-funksjonen.

Tenk også på kodens lesbarhet. I noen tilfeller kan include være nyttig for å synliggjøre avhengighet til visse klasser.

Selv bruker jeg autoload på løse avhengigheter som f.eks Log, Profiler eller Cache-klassene, men lar include gjerne stå ved sterke knytninger.

Her er min autoload-funksjon med whitelist-vasking av $class_name parameteren:

function __autoload($class_name) {

	// Whitelist-vasking
	$class_name = preg_replace( "/[^a-zA-Z0-9_]/", "", $class_name );

	// Sjekk etter filene i alle include-kataloger
	$include_path_tokens = explode(':', get_include_path() );

	// Aktuelle underkataloger
	$dirs = array("classes","models","controllers");

	foreach($include_path_tokens as $prefix){

		if ($prefix==".")
		continue;

		foreach($dirs as $dir){
			$path = $prefix . '/'.$dir.'/' . $class_name . '.php';
			if(file_exists($path)){
				require_once $path;
				return;
			}
		}
	}
}

Les mer om autoload i PHP-dokumentasjonen.

posted by andreeide October 27, 2008 12:30 pm     |     read comments (0)
September 23, 2008

Javazone 2008


Hurra Torpedo slo og dæljet Javazone i gang med sitt underholdende show tidlig onsdag morgen.

Spring, SOA og Agile programvareutvikling var dominerende temaer også på årets Javazone, men med syv parallelle forelesninger var det allikevel noe for enhver smak.

Sjekk gjerne også bilder fra Javazone 2008 i min fotoblogg.

Drift med Amazon EC2

Morten Undæs gjennomgikk sine erfaringer med drift på Amazons EC2-plattform. Her får man root-aksess på virtuelle maskiner, med stor mulighet for å skalere. Prisingen virker interessant, da man kun betaler for forbruket, men systemet sliter med ujevn stabilitet.


Morten Udnæs demonstrerte Amazon EC2

The Lean Paradox

Kan man utvikle flere løsningsforslag, forkaste alle unntatt en og ende opp med å bruke mindre tid enn utviklingen av kun et system? Det mener Mary Poppendieck, og hennes Paradox of Lean Software Development-foredrag var, som alltid fra den kanten, meget interessant. Påstanden ble begrunnet med at flere løsninger gir økt kunnskap, minsker risiko, sikrer tidsfrister og fremmer systemoptimalisering. Hun henviste til store suksessfirmaer som Southwest Airlines, 3M og Toyota.


Mary Poppendieck foreslo teknikker for økt produktivitet og bedre softwarekvalitet.

Der Mary var fleksibel og oppfordret, kom Robert C. Martins Clean Code III inn med en rekke strenge formaninger: “Har du boolean-parametere i et funksjonskall? Katastrofe!, “Har du kommentarer i koden?” Katastrofe!”. Men, han hadde mange fine poeng. “Må jeg skrive en kommentar, så føler jeg at jeg har feilet. Koden skal være selvforklarende”, sier Robert og ser ut til å mene det, og fortsetter så med “boolean i funksjonsparametere er et klart tegn på at funksjonen gjør to ting, og dermed bør skrives om til to funksjoner”. Høres dette interessant ut kan du sjekke hans bok om samme tema.

Takk for i år

Da er det bare å takke for i år, og ikke minst innsatsen til alle i arrangør-teamet. Vi gleder oss allerede til neste år.

posted by admin September 23, 2008 10:11 am     |     read comments (0)

De siste ukene har jeg frisket opp mine nettsteder med ny navigering, nye logoer og designelementer.

Salsanorge har fått nye by-sider. Nå kan man enklere se hva som skjer på salsafronten i Oslo, Stavanger, Bergen etc. Løsningen er en skreddersydd php-løsning. Vurderte å gå over til Rails, men det gikk så altfor fort å gjøre dette i php til at overgangen ville vært lønnsom.


1001 Spill har endelig fått den nye logoen på plass, med den gamle geipefyren på hedersplass i midten.


Fotogal bruker nå Wordpress i bunn, og har fått flunkende nytt design og forbedret gallerivisning.


Alle logoene er laget av Sindre Rosness, med unntak av geipefyren i midten av 1001spill som er laget av pip.

posted by admin September 2, 2008 10:15 am     |     read comments (0)
David Heinemeier Hansson foredrag om å lykkes med oppstartsfirmaer
Sjekk David Heinemeier Hansson foredrag om å lykkes med oppstartsfirmaer.

Det er ikke vanskelig å tjene penger på nettsider i dag – så fremt man har brukere.

Annonsemarkedet er enormt, og handel på nettet er vanlig, så har du et godt produkt eller mange brukere er det ingen sak å tjene penger.

Problemet er selvfølgelig å få nok brukere, eller finne noen som er villig til å betale.

Å leve av annonseinnteker

Skal du leve av annonseinntekter trenger du mange brukere. Nøyaktig hvor mange er avhengig av brukergruppen du sikter mot.

Mine nettsider gir fra 3 til 30 kr per 1000 annonsevisninger. 1000 annonsevisninger høres kanskje lite ut, men kan være vanskelig nok. Med 30 000 sidevisninger månedlig, tjener du 90-900 kr på én annonse med slike provisjonstall. Det er selvfølgelig mulig å tjene mye mer og også mindre enn dette.

Annonser kan selges av firmaer som f.eks AdSense, AdBrite, Advertising, GoViral eller en rekke andre aktører.

Vent gjerne til du har litt trafikk, før du ordner annonseavtale.

Hvordan få brukere

Tålmodighet er en dyd. Selv tok det meg 6-7 år før jeg kunne leve fulltid av nettsidene. Søkemotorer og jungeltelegrafer er gode kilder, men det kan ta lang tid før disse trer i kraft, og gjerne et halvår fra lansering til søkemotorer begynner å gi trafikk.

Kvalitet og stabilitet er viktig. Hold ambisjonsnivået stabilt. Å oppdatere daglig i begynnelsen for så å dabbe av, tar seg dårlig ut. Kanskje holder det med ukentlige oppdateringer? Når jeg startet forgjengeren til 1001 Spill, hadde jeg en “ukens spill”-spalte. Det var en god start og passet fint ved siden av min faste jobb.

Innhold er viktigere enn form. Innholdet og kjernen i produktet er alltid viktigst. Legg inn arbeidskapasiteten der. Kanskje kan Blogger eller en enkel publiseringsløsning som Wordpress være godt nok for å komme i gang?

Jobb med noe du liker. Er målet å bli rik eller skape en god og trivelig arbeidsplass? Jobber du med interessante oppgaver, øker sannsynligheten for å lykkes.

Videre lesning

Sjekk Rails utvikler David Heinemeier Hansson videoforedrag om å lykkes med oppstartsfirmaer

Les og bli inspirert av Kathys fantastiske arkivinnlegg i Creating Passionate Users:

posted by andreeide July 28, 2008 2:18 pm     |     read comments (11)
July 17, 2008

svnrepository vs cvsdude

Etter ett år som kunde av cvsdude.com har jeg nå valgt å flytte mitt svn-repository til svnrepository.com.

Sjekk gjerne også samlesiden min for backup-løsninger på nett.

Jeg har vært fornøyd med cvsdude, men ved å gå for en rimeligere prisplan hos svnrepository sparer jeg ca 1500,- årlig, pluss jeg får gleden av å teste og støtte nok en slik leverandør.

svnrepository tilbyr også Git. Jeg har selv aldri prøvd det, men ser at Rails-folka bruker Git.

Her er en kort sammenligning av tjenestene de tilbyr:

svnrepository cvsdude
Pris $9.95 per måned for 5 GB $14.95 per måned for 5 GB
$29.95 om man trenger Trac/Bugzilla.
svn ja ja
git ja nei
cvs nei ja
Trac ja ja, men pris blir da $29.95 per måned.
Bugzilla ja ja, men pris blir da $29.95 per måned.
Nedlastbar backup ja ja, som tilleggtjeneste
posted by andreeide July 17, 2008 3:57 pm     |     read comments (0)
IE7 IE6 Firefox Opera Safari
1001spill.no 63,35 % 18,26% 14,44% 2,51% 1,08%

Tallene er basert på 134 794 besøkende på nettsiden 1001 Spill. 93% er fra Norge.

IE7 er den desidert største nettleseren med over 60%, mens IE6 nå nærmer seg Firefox med sine 18%. Totalt sett taper IE og har ca 81% av alle brukere. Både Firefox, Opera og Safari har litt fremgang.

posted by andreeide July 16, 2008 10:59 am     |     read comments (5)

De siste årene har jeg jaktet på nettbaserte backup-løsninger. Her er mine erfaringer med noen slike tjenester.

Oppdatert 23 juli 2008

Behovet mitt er todelt, og jeg har derfor inndelt løsningene i to.

Versjonskontrollsystemer

Til kildekode og dokumenter

  • svnrepository – tilbyr SVN, Git og Trac.Pris: Ca. 600 kr årlig for 5 GB.
    Førsteinntrykk: Enkelt og greit brukergrensesnitt for oppsett av SVN og Trac. Tilbyr nedlasting av repository-backup. Har nå lastet opp ca 1GB over https uten problem. Raskt svartid på support, og de hjalp også til med selve feilrettingen.
  • cvsdude – tilbyr SVN, CVS, Trac og Bugzilla med mere.Pris: Ca 2000,- kr årlig for 10 GB lagringsplass.
    Konklusjon: Litt dyr tjeneste, og litt rotete men funksjonsrikt brukergrensesnitt (som skrives om nå). Jeg har brukt tjenesten problemfritt i et år. Rask svartid på support. Download av repository og Trac-database gir tilleggspris. Både opplastingshastighet og nedlastingstid er godkjent.
    Trac-løsningen er veldig treg og ikke noe jeg ville brukt til større systemer.
  • Oppdatert 23 juli
    github – tilbyr git og Wiki.

    Pris: Ca 6100,- kr årlig for 10 GB lagringsplass.
    Jeg har ikke testet denne tjenesten.

Sjekk også funksjonssammenligning mellom cvsdude og svnrepository.

Duplikatløsninger

Til foto og musikk

  • rsync.net tilbyr diskplass via rsync, ftp, sftp etc.Pris: Ca 2000,- kr årlig for 20 GB
    Førsteinntrykk: Kun for deg som liker å sette opp alt selv. rsync-synkroniseringen gir opplastingshastigheter rundt 80-120 KB per sek. over krypert linje. Har gode hjelpesider for oppsett på Mac og Windows, og selv om oppsett av automatisert backup må gjøres manuelt, er eksempler på dette godt dokumentert. Hadde vært perfekt med noe lavere pris og bedre opplastingshastighet.
  • Apples mobileme (het tidligere .mac) synkroniserer kontakter, kalender, mail i tillegg til selve fillagringen på Mac, PC og Iphone.Pris: Ca 700,- kr årlig kr for 20 GB lagring (vises som 10 GB når du starter, men du kan selv redusere epost-plassen for å øke iDisk-størrelsen).
    Førsteinntrykk: Brukervennlig løsning som er meget enkel å sette opp i OSX. Windows-løsningen mangler innebygd mulighet til å dumpe all data til disk, men kan aksesseres som nettverksdisk. Ekstremt treg opplasting med hastigheter ned mot 30 KB per sekund. Vi får håpe Apple får fart på serverene etter hvert.
  • Oppdatert 15. juli – takk til Espen for tips!
    iDrive tilbyr diskplass via egen programvare, inklusiv noe versjonering.

    Pris: 2GB gratis, 250,- kr årlig for 150 GB.
    Førsteinntrykk: Enkel og fin programvare. Opplastingshastighet mellom 90-130 KB.
    Obs! Mac-backuper kan ikke lastes ned til Windows og vice versa, så har du begge plattformene (slik som meg), er denne løsningen litt upraktisk.

Konklusjon

23. juli 2008:Jeg har nå flyttet all min kode og Trac-databaser til svnrepository. Fikk rask supporthjelp til å importere Trac-databasen, så importen gikk problemfritt. Gjenstår å se om tjenesten er stabil i bruk.

14. juli 2008: Per i dag bruker jeg cvsdude til SVN og Trac, og rsync.net til mine bilder. Likte veldig godt mobileme, men 30 KB opplastingshastighet er ikke til å leve med når man har mange gigabyte med data.

Har du erfaring med nettbaserte backupløsninger eller andre tips til hvordan man kan sikre sin data, så ta gjerne kontakt, da jeg ennå har til gode å finne den ultimate backup-løsningen. Litt bedre hastighet hadde ikke vært å forakte.

posted by andreeide July 14, 2008 11:22 am     |     read comments (5)
StatSVN File Counts
StatSVN gir nyttig informasjon om kodebasen.

Hvor stor er kodebasen din, og hvor mange filer eller kodelinjer fjernet du ved siste opprydding? Kommet mange nye filer i det siste, og i så fall, i hvilke deler av systemet?

Har du koden din i SVN, kan StatSVN gi deg svar.

På 1001 Spill-koden viser StatSVN at over 500 filer ble fjernet ved siste kodeopprydding. Meget bra! Men samtidig økte gjennomsnittlig antall kodelinjer per fil med 125 linjer, slik at snittet nå er 284. Ikke bra! Kan kodeoppryddingen ha gått på bekostning av kodekvaliteten? Absolutt noe som bør granskes.

StatSVN er foreløpig kun i versjon 0.4.0, men artig og nyttig å teste allerede nå.

Sjekk gjerne også intallasjonsbeskrivelsen.

posted by admin June 6, 2008 12:26 pm     |     read comments (0)

Når php inkluderer en fil, leter den etter filen i alle kataloger angitt i php_include_path.

I .htaccess-fila kan du f.eks sette php_include_path slik:
php_value include_path "/app:/public:."

Her vil php lete etter filene i /app-katalogen, i /public-katalogen eller i lokal katalog (angitt av punktumet på slutten)

Dermed kan du enkelt skille applikasjonen din i flere deler.

En vanlig metode er å dele i to:

App-katalogen – Her ligger alle applikasjonsspesifikke filer som ikke skal være tilgjengelig på nettet
/app/
/app/config/
/app/classes/
/app/models/
etc.

Public-katalogen – Tilgjengeliggjøres på nettet, og alt som ligger her kan kjøres eller lastes ned.
/public/
/public/css/
/public/images/
etc.

F.eks vil følgende nå fungere overalt, også fra public-katalogen:

require ("config/database.php");
require ("classes/ReviewDAO.php");
include ("views/header.php");

om man bruker den tidligere angitte php_include_path.

Sette php_include_path

php_include_path kan settes i:

  • php.ini
    eks: include_path = ".:/usr/local/lib/php/pear:"
  • .htaccess
    eks: php_value include_path ".:/usr/local/lib/php/pear:"
posted by andreeide April 11, 2008 1:34 pm     |     read comments (0)
April 4, 2008

RubyFools 2008 i Oslo

IMG_8337
Ole Friis Østergaard gjennomgår versjonshåndtering på databaseinnhold.

Endelig har jeg fått kose meg med Ruby-seminar i Oslo, og det ble en liten men hyggelig og interessant seanse.

Spesielt interessant fant jeg Ole Friis Østergaards gjennomgang av Rails plugins til versjonshåndtering av databaseinnhold. Noterte meg acts_as_versioned, acts_as_paranoid, deleted_at og acts_subversive. Disse kan logge databaseendringer og f.eks tilby undo/redo-funksjonalitet.

IMG_8333
Matz gjennomgår Rubys fortid og fremtid

Også fint å høre jordnære Matz, Rubys grunnlegger, beskrive Rubys begynnelse. Hvordan Japans økonomiske problemer på 1990-tallet, medførte masse fritid for den programmeringsspråk-interesserte japaneren, som dermed satte i gang med å lage språket som nå hylles av dataentusiaster over hele verden.

Dave Thomas keynote første dag var som alltid underholdende, og spesielt flott og merke at halleluja-stemningen som ofte preger slike arrangement ikke var tilstedeværende. Kanskje ikke så rart med tanke på at dette språket allerede har eksistert i 15 år.

Vi gleder oss til de 15 neste.

posted by andreeide April 4, 2008 10:00 pm     |     read comments (0)