Alt om programmering som jeg selv finner interessant. No more, no less. Trolig vil det være mest om webprogrammering, .NET og andre ting jeg jobber med fast.
torsdag, august 24, 2006
Gode ideer som ikke er så gode likevel
Det syntes som en svært god ide klekket ut av en brilliant mesterhjerne da jeg kodet en webside til å ikke å akseptere direkte kall -- kun ved klikk på lenker under samme domene skulle funksjonaliteten igangsettes. Det uheldige var selvsagt at jeg ikke sjekket grundig nok om ideen lot seg omsette i praksis. Så hva var det jeg hadde gjort og hva ble galt?
I webprogrammering har en tilgang til en rekke variable som sendes med forespørsler fra nettlesere. Den jeg benyttet meg av var URLREFERRER. For å sikre mot lenker fra andre domener kontrollerte jeg at denne inneholdt samme domene som applikasjonen kjørte på. Applikasjonen er forøvrig en butikkløsning og det kom snart undrende spørsmål fra kunder som ikke kunne handle i butikken. Unødvendig å nevne at dette fikk fart på både meg og andre.
Det som skjedde var at kundene hadde brannmurer som filtrerte bort URLREFERRER fra forespørsler, og koden "trodde" dermed at noen hadde forsøkt å få tilgang til siden ved å skrive inn adressen direkte i adresselinjen i en nettleser. Huff!
Moralen i historien må vel bli at fokus på sikkerhet er viktig, men det er like viktig å undersøke at sikkerheten som etableres faktisk ikke ødelegger for vanlige brukere. Jeg bommet stygt på det siste.
(I lukkede løsninger tror jeg imidlertid at denne teknikken kan benyttes som et av flere tiltak. Så det så.)
lørdag, august 05, 2006
Artikkel om sikkerhet i webapplikasjoner
Følgende lenke er til en artikkel skrevet av Sverre H. Huseby som tar for seg ulike former for angrep med interessante og faktiske eksempler. Artikkelen er et godt utgangspunkt for å utvikle en forståelse for hvilke farer som lurer ”der ute”. Han foreslår at utviklere tar til seg følgende mantra når de utvikler programvare: "All clients are evil". Ingen inndata må tas for gitt. Har du sendt en verdi til klienten, for eksempel en informasjonskapsel eller et skjult felt, så må ikke applikasjonen blindt akseptere verdien når den postes tilbake. Den kan ha blitt endret.
Common Security Problems in the Code of Dynamic Web Applications http://www.webappsec.org/projects/articles/062105.shtml
mandag, juli 24, 2006
Google Copernicus Center
"I read your great plans for a truly inspiring workplace on the moon. Since I am constantly searching new job opportunities, I would like to apply for the position as the sushi chef’s fish-chopper assistant (I work as a programmer here on earth, but I’m a fast learner).
As a descendant of the true discoverers (Norwegians) of America, and as such a proven earthling, I hope you’ll find my application of interest.
Regarding my physical shape…I hope your review stays in the digital domain.
Cheers,
Kenneth Lykkås
Happy programmer"
Jeg fikk et automatisert svar fra Google om at alle stillinger allerede var besatt, men nye søknader ville bli tatt opp til vurdering 1. april 2104.
Informasjon om Google Copernicus Center er å finne på følgende adresse: http://www.google.com/jobs/lunar_job.html
torsdag, juli 20, 2006
Generere dokumentasjon fra assembly og kodekommentarer
Utviklere har derfor "skreket" etter en oppgradering, og svaret har kommet fra uventet hold: Microsoft slipper sitt eget verktøy for generering av dokumentasjon!
Sandcastle er navnet på Microsofts interne verktøy, og det er benyttet til å generere dokumentasjonen for .NET Framework. Sandcastle slippes før utgangen av juli i følge Anand Raman hos Microsoft. Sjekk linken nedenfor for mer informasjon. Klarer nesten ikke å vente, jeg!
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=517576&SiteID=1
Oppdatering 5. august 2006
Ja, nå er SandCastle klar for nedlasting. Jeg må innrømme at jeg forventet et like enkelt brukergrensesnitt som NDoc, men der tok jeg veldig feil. Det er imidlertid en del utviklere som har kastet seg rundt for å lage både GUI'er og skript.
SandCastle July CTP kan lastes ned fra http://www.microsoft.com/downloads/details.aspx?FamilyID=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en.
Ellers virker dette Add-in-prosjektet for Visual Studio 2005 svært interessant: http://dotnetpret.blogspot.com/2006/08/sandcastle-continued-documentation.html.
tirsdag, juli 18, 2006
Regne ut ny høyde og bredde for miniatyrbilder
Disse formlene løser problemet greit:
Ny bredde beregnes slik:
ny bredde = bredde * ny høyde / eksisterende høyde
Ny høyde beregnes slik:
ny høyde = høyde * ny bredde / eksisterende bredde
Formlene kan også kombineres for å sørge for at et miniatyrbildet har både en maksbredde og en makshøyde.
I kodeeksemplet nedenfor er maks bredde og høyde 200 piksler. Ny størrelse vil beregnes (til 200 X 150) fra original størrelse (400 X 300).
Dim hoydeEksisterendeBilde As Integer = 400
Dim breddeEksisterendeBilde As Integer = 300
Dim maksBredde As Integer = 200
Dim maksHoyde As Integer = 200
Dim nyBredde As Integer = maksBredde
Dim nyHoyde As Integer = hoydeEksisterendeBilde * nyBredde / breddeEksisterendeBilde
If nyHoyde > maksHoyde Then
nyHoyde = maksHoyde
' beregn bredde siden bildet var for høyt
nyBredde = breddeEksisterendeBilde * nyHoyde / hoydeEksisterendeBilde
End If
Oppdatering
Jeg har siden funnet et eksempel på det samme i "Personal Web Site Starter Kit" som følger med VS 2005. Prosjektet kan også lastes ned fra http://www.asp.net/downloads/starterkits/default.aspx?tabid=62.
fredag, juli 14, 2006
Visual Basic Compiler - irriterende problem
Dette føltes som en god idè når jeg satte det opp, men det begynte snart å dukke opp en svært irriterende feil som ser slik ut:

Når denne starter slutter den virkelig ikke. Melding popper opp gang på gang og legger seg over alle andre vinduer i Windows. Eneste løsning er å stoppe Visual Studio.
Nei. Konsollprosjektet er trolig årsaken til alle interne uroligheter og stemmes derfor UT. Testkoden skal jeg flytte over i en Code-behind fil i ASP.
torsdag, juli 13, 2006
Krigsgrisene
http://www.bushflash.com/warpig.html.
NB: Det legges ingen fingre mellom i denne presentasjonen av Irak-krigen!
onsdag, juli 12, 2006
Endelig en film å glede seg til igjen!
Sjekk traileren på IMDB: http://www.imdb.com/title/tt0405296/trailers-screenplay-E26723-10-2
Nullstille Identity-felt i SQL Server
I SQL Server gjøres dette med kommandoen dbcc checkident som har følgende syntaks (Takk, Helge!):
dbcc checkident('Tabellnavn', reseed, 0)
Argumentene er navnet på tabellen med identity-feltet som skal startes på nytt, hva som skal gjøres ("så" på nytt), og sist hva den skal begynne på. Settes den til 0 som i eksempelet vil den første verdien som brukes være 1.
Det er flere operasjoner som kan utføres med dbcc. For mer informasjon se MSDN-dokumentasjon: http://msdn2.microsoft.com/en-us/library/ms176057.aspx
Nyttig artikkel om identity-felt generelt: http://www.databasejournal.com/features/mssql/article.php/10894_3307541_1
Kjapp diskusjon om relevante problemer: http://weblogs.sqlteam.com/billg/archive/2003/10/21/337.aspx
onsdag, juni 28, 2006
Lagring av ConnectionString i ASP .NET
Trace brukes ved debugging og skriver ut bl.a. alle data i Application nederst på websiden som ber om det. Dette kan skrus av og på for hele applikasjonen i Web.Config, men individuelle sider kan også gjøre det uten at det overstyres av innstillingene i Web.Config.
Artikkelen som lenkes til nedenfor anbefaler at en bruker Web.Config eller evt. Machine.Config til dette. Sjekk artikkel på aspalliance.com for mer informasjon. Ganske gammel artikkel. Bør finne flere kilder!
onsdag, april 26, 2006
Robots.txt og søkemotorer
Robots.txt
Den første muligheten til å hinte til roboter er å sette opp noen regler i en fil som heter robots.txt. Den skal ligge på nettstedets rot.
http://www.dittdomene.com/robots.txt
Filens oppgave er å fortelle robotene hvilke deler av nettstedet som IKKE skal indekseres. Eksempel:
User-agent: *
Disallow: /bin/
Disallow: /Admin/
Hver linje er en egen regel. I eksempelet sier første linje at alle (*) roboter skal lystre reglene på de etterfølgende linjene.
De neste linjene sier at roboter ikke skal indeksere filer i katalogene bin og Admin. I praksis betyr dette at dersom roboten finner en lenke på nettstedet til en fil i en av disse katalogene så skal den ikke følge den ei heller indeksere den.
Det kan lages ulike regler for ulike søkemotorer ved å angi navn på dem istedenfor asterisk (*) etter User-Agent som gjort her. Dersom det lages ulike regler for ulike roboter må disse være først i robots.txt. Årsaken er at en robot leser fra toppen og slutter når den har nok informasjon.
Spesielle regler må settes opp før generelle regler.
SSL
For sikre forbindelser der https-protokollen benyttes skal det være en egen robots.txt fil. Denne bør (trolig!) be roboten om ikke å indeksere filer:
User-agent: *
Disallow: /
Fjerne individuelle websider
Websider kan fjernes fra søkeresultater ved at websider selv har informasjon om at roboter skal overse dem ved å bruke en META-tagg. Eksempelet viser at roboter ikke skal indeksere siden og at de heller ikke skal følge lenker og indeksere dem.
<html>
<head>
<title>Ikke indekser denne siden...</title>
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
</head>
<body>-</body>
</html>
Mer informasjon
http://www.google.com/webmasters/remove.html
Forklaring på tilpassing av nettsted for Google’s robot.
http://www.searchtools.com/
Informasjon om søkemotorer til bruk på nettsteder. Informerer også om håndtering av roboter.
http://www.robotstxt.org/
The Web Robots Pages med informasjon om roboter og ulike søkemotorer.
torsdag, april 20, 2006
Sammenligne versjoner av filer i TortoiseCVS
Å sammenligne filer under versjonskontroll er nyttig, men TortoiseCVS støtter ikke dette direkte. En kan imidlertid fortelle TortoiseCVS hvilket program en vil bruke til dette.
Et gratis verktøy som lar en se ulikheter mellom to filer heter ExamDiff. Programmet kan lastes ned og installeres fra http://www.prestosoft.com/ps.asp?page=edp_examdiff.
Når ExamDiff er installert kan TortoiseCVS settes opp til å bruke det på følgende måte:
- Klikk Start Alle programmer TortoiseCVS Settings (Eller høyreklikk i Windows utforsker og velg CVS Settings…).
Klikk arkfanen Tools. - Feltet Diff application skal inneholde banen til ExamDiff. Dersom du har norsk operativsystem og installerte ExamDiff til standardplassering, skal banen være C:\Programfiler\ExamDiff\ExamDiff.exe.
- Det neste feltet er kommandolinje-argumenter som skal sendes til diff-programmet. ExamDiff trenger å vite navn på filene som skal sammenlignes. For at TortoiseCVS skal gi navnet på begge filene til ExamDiff må det stå "%1" "%2" i feltet.
Dersom du har filer under kildekontroll kan du høyreklikke på en av dem og velge CVS History… Merk to versjoner av filen ved å holde CTRL-tasten nede, høyreklikk på dem og velg Diff på hurtigmenyen. TortoiseCVS starter ExamDiff og versjonene sammenlignes visuelt. Nyttig!
Versjonskontroll i Windows med TortoiseCVS
Total kontroll på versjoner av kode er ikke noe alle programmerere er forunt å ha sånn helt av seg selv. Men mangel på versjonskontroll kan få svært kjedelige konsekvenser når endringer overskriver kode som var viktigere enn antatt og den gamle versjonen ikke lenger… fins. Au. Jo da, jeg har opplevd dette.
Dette temaet er viktig for heltidsprogrammerere, men studenter innen informasjonsteknologi bør absolutt også lære dette (”Den skal tidlig krøkes…” osv.).
I det siste har jeg brukt et program for versjonskontroll som heter TortoiseCVS og er under GPL-lisens. Det kan brukes alene eller knyttet opp til et sentralt oppbevaringssted (repository). TortoiseCVS integreres på hurtigmenyen i Windows Utforsker og er enkelt i bruk. Jeg har laget en kjapp steg-for-steg introduksjon til programmet nedenfor slik at det blir enklere å komme i gang.
Klikk OK.
Hvis du tar en titt i mappen CVSfiler vil du se at det er opprettet to mapper inne i den. Mappen CVSROOT inneholder endringer som er gjort på filer. Mappen EtProsjekt inneholder filene til modulen. (Husk at det er filene i arbeidsmappen du skal arbeide med og ikke filer i denne mappen!)
Filer kan nå legges til i arbeidsmappen. Disse må manuelt tas med i kildekontroll. Eksempel:
For å se at filen virkelig er lagt til under kildekontroll kan vi åpne mappen C:\CVSfiler\EtProsjekt\ og se at den er der med en modifisert filendelse.
Gå tilbake til mappen C:\EtProsjekt og åpne tekstfilen. Skriv ”Heisann!”, lagre og lukk filen. Ikonet til filen får nå en over seg en pil som peker til venstre som indikerer at filen er endret siden den ble sjekket inn sist.
Høyreklikk på filen og velg CVS Commit… Skriv ”Jeg la til ordet Heisann i filen.” som kommentar og klikk OK. Merk at ikonet på filen har endret seg til en avkrysning igjen!
Nå eksisterer det to versjoner av denne filen. Høyreklikk filen og velg CVS History... I listen ligger versjon 1.1 og versjon 1.2 av filen. Kommentarene som ble lagt til vises også her når en velger versjon.
Det er selvsagt mye mer å sette seg inn i, men en kan komme i gang med det som er gjennomgått over. Kanskje skriver jeg noe mer i en senere post ;-)
Om bloggen
Linux har jeg fremdeles til gode å stifte et seriøst bekjentskap med selv om jeg har arbeidet i it-bransjen i mange år. Windows-plattformen og Microsoft-teknologier er (og har vært) mitt område. Webprogrammering med ASP .NET er primært i fokus på jobben, og i dag bruker jeg stort sett Microsoft Visual Web Developer 2005 Express Edition som utviklingsmiljø til dette.
(Reklame: WDE er forøvrig et veldig bra IDE med god debugger og til og med en liten webserver for lokal testing. Fri nedlasting av programmet for alle ut november 2006 fra http://msdn.microsoft.com/vstudio/express/vwd/.)
PS: Dersom du faktisk ønsker å vite ALT om programmering vil jeg anbefale deg å sjekke ut www.google.com ;-)
Oppdatering 5. august 2006
I dag benytter jeg Visual Studio 2005 Professional som gir større fleksibilitet og muligheter enn Express-utgavene. Har jeg skjønt ting riktig, er forøvrig Express-utgavene gratis for nedlasting helt til jorda og resten av solsystemet slukes av et stort, sort hull.
