__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.
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.
Nytt design – høstrengjøring i porteføljen
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.
Hvordan tjene penger på nettsider
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:
- The myth of “keeping up”
- Can marketing be honest AND motivating?
- Do something scary
- Death by risk-aversion
- The Quantum Mechanics of Users
- It’s the [?], stupid!
- Being Brave is Tricky
- Never Underestimate the Power of Fun
- …but is it interesting?
- My passion is awesome, your passion is lame
- Passionate Users Talk Different
- When only the glib win, we all lose
- How to be an expert
- Rethinking testimonials
- Don’t give in to feature demands!
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 |
Browserstatistikk – juli 2008 – IE stadig svak nedgang
| 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.
Backup-løsninger på nettet
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.
StatSVN – nyttig info 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.
Ryddigere kode med php_include_path
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:"
RubyFools 2008 i Oslo
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.
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.




