My files are number one. Mostly.

I’m neither a mathematician, or statistician, but these things fascinate me. For the remaining people still awake after that statement, I want to share the (insanely great) RadioLab podcast titled ‘Numbers’, where I first heard of a phenomenon called Benford’s Law ..and maybe a wallpaper, too.

Benford’s Law says:

in lists of numbers from many (but not all) real-life sources of data, the leading digit is distributed in a specific, non-uniform way. According to this law, the first digit is 1 almost one third of the time, and larger digits occur as the leading digit with lower and lower frequency, to the point where 9 as a first digit occurs less than one time in twenty.

What this means is numbers starting with 1 are more likely to crop up in large datasets, than numbers starting with the other eight digits.

As I am a sceptical geek I had to test this out for myself.

Large sets of numbers, eh?

I could go out and find data from data.gov, or statistics from web-servers, but why leave the comfort of my own chair, when a simple bash-command would gather large numbers for me?

sudo ls -A -o -R / > benford.txt

That command runs through my entire harddrive, searching through each and every folder it finds and spitting out lines and lines of filenames and sizes into the aptly named file ‘benford.txt’. Actually it generated one million, thirty one thousand, three hundred and twenty two lines, equal to a whopping 68.2 MB of text and almost as large as an empty canvas in Illustrator :p

What now? The lines look like this: -rw-r--r-- 1 root 150 Jul 3 2009 InfoPlist.strings

I’m guessing, not being a unix professional, that there are ways to make the ls command only print the filesize and the name, and saving me the time of editing one million, thirty one thousand, three hundred and twenty two lines to only have lines like these 150 InfoPlist.strings

Here’s where regular expressions make their appearance. And the excellent RegExr Desktop is a great tool for it! Seeing as I’m no RegEx pro, either, I want to test my expressions before they run amok on my dataset :)

RegExr Desktop App

After testing my regular expressions in RegExr, I went into the great TextWrangler and started to find and replace. It went very well, as you can see :)

Find and replace FTW!

find and replace ftw!

My filelist is now complete, and it’s also a tab-delimited textfile, which is great for filling into a [MySQL database][]. The great thing with having this data inside a database, is the ease of which you can pull data out, and I’m looking for the amount of lines starting with 1,2,3 etc. So I made a database-table with three columns: Id, filesize, name, and started to import my filelist into it. After all the find/replace in TextWrangler, the filesize had shrunk to 25.1 MB.

mysql database is populated

Now I can start datamining, to see if this all was for nothing, or if my computers files also adhered to Benford’s Law.

Squeal or Sequel?

I like to use Sequel Pro for all MySQL needs, and it’s open-source and free. It lets you manage the database easily in a GUI, and also makes it easy to type your own SQL-statements and run them against the server. Sequel Pro is a fork of the discontinued CocoaMySQL.

Running select filesize from benford where filesize rlike '^[1-9]' on the database yields ninehundred sixty thousand twohunded seventy three rows. This shows all lines and is equal to 100%. Now the calulations begin.

It's all in my database

So what does the number s look like? It was fun to see that the numbers were distributed mostly like Benford’s Law dictated. Check it out. Benford percentage on the left, my numbers in the middle, and the total amount to the right :)

  1. 30,10 / 35,14 / 337 445
  2. 17,60 / 17,04 / 163 654
  3. 12,50 / 12,03 / 115 551
  4. 9,70 / 10,47 / 100 493
  5. 7,90 / 7,29 / 70 044
  6. 6,70 / 5,92 / 56 815
  7. 5.80 / 4,70 / 45 114
  8. 5,10 / 4,10 / 39 363
  9. 4,60 / 3,31 / 31 795

Mathematics and statistics can be fun, especially when they are this close to /home :p

webdev on network without NAT-loopback

I’ve been using WordPress for a while now, and I’m doing development on a local apacheserver. Since I’m used to not having NAT loopback on my network, I usually setup wordpress on the local dev-server and pass the blog URL as localhost:portnumber. When clients want to see progress, I upload to the www, and give them the link.

But I wanted the clients to be able to check out what I’m doing without uploading, so I had to find a way to enter the blog URL so it would work from outside too. If I put in localhost:portnumber, WordPress reroutes the visitor to that internal address which is not available from outside the LAN.

Enter DynDNS!

Dynamic DNS was the solution: So I entered myurl.dyndns.org:portnumber. It works like a charm, but since I’m inside a network without NAT-loopback, when I try to go to myurl.dyndns.org:portnumber, it won’t resolve for me. Another thing to solve.

Enter /etc/hosts!

If I modify my hosts file on my developer-machine, I can reroute all traffic to the dynamic dns URL, to the internal one, which is localhost:portnumber. So I added this to my /etc/hosts file:

//webdev locally on network without NAT-loopback
//10.0.0.2 is my dev-server
10.0.0.2 myurl.dyndns.org

Enter Terminal

terminal-img To use these hosts-settings without a reboot, enter terminal on macosx and type sudo dscacheutil -flushcache

So this is how I’ll do it going forward. Any tips and ideas can be put in the comments below.

Quicksilver: Klar.. Ferdig… Programmér!

Denne står også på mac1.no, skrevet av meg. Jeg legger den her også for flere.

Mange filer, liten tid Når jeg holder på med et prosjekt er det endel mapper og filer som går igjen på nesten alle sites. Dette er en struktur på filene som jeg trives med.

Eksempler på dette kan være: .htaccess – for å kontrollere apache-serveren

‘ilegg/’ – mappe for php-includes

‘ilegg/start.php’ – som er en php-fil med diverse variabler som skal inn i alle dokumenter på siten

‘grafikk/bilder’ – mappe for bilder til siten

‘grafikk/logo’ – mappe for logoer til siten (forskjellige størrelser til ulike formål)

‘grafikk/css’ – mappe for bilder som blir brukt som bakgrunner ol. i css-filen

‘stilsett/’ – mappe for css

‘stilsett/skjerm.css’ – stilsett for skjermvisning

‘stilsett/print.css’ – stilsett for utskrift

‘js/’ – mappe for javascript

‘js/start.js’ – kildefil for eksterne javascript

‘_arbeidsfiler/’ – for arbeidsfiler (.psd, .ai og denslags).

‘index.php’ – indexfilen som også er en malfil for resten av siten. Denne filen inneholder også include-kommando og javascript-kommandoer som henter inn de to startfilene ovenfor, samt style-tagg med attributt som henviser til de ulike css filene

Dette er jo en hel haug med filer som skal opprettes og kan fort gå litt tid dersom du skal opprette alt dette og skrive all koden for å hente inn de ulike stilsett, php-filer og javascript-kodefiler som skal henge med. Heldigvis kan QS gjøre dette nesten automatisk for meg.

QuickSilver fikser. Opprett alle disse filene i en mappe du kaller f.eks. ‘ny web’. I denne mappen setter du opp alle filene slik du ønsker å ha de, dvs. at index-filen kan ha doctype som validerer den mot xhtml-strict og inkludere start.php/start.js og begge stilsettene.

Stilsettene kan du sette opp slik at alle marger og luft rundt alle objekter er fjernet * { margin:0;padding:0; } og denslags. Du skjønner tegningen..?

Deretter kopierer du hele denne mappen inn i ~/Library/Application Support/Quicksilver/Templates. Om ikke templates mappen er der, kan du opprette den.

Do or Do Not. There is no Try Deretter er det enkelt i Quicksilver å opprette et nytt webprosjekt i mappen Kunder/Kundenavn ved å gjøre følgende:

Åpne Quicksilver (ctrl-space som standard), skriv ‘Kunder. - QS gir deg da mappen kunder og du kan bla deg nedover til den kunden du skal opprette web for. - Deretter tab’er du til neste og skriver ‘Make New’ (eller bare ‘mn’). - QS vil da gi deg en liste over alle filer som ligger i mappen Templates vi lagde tidligere. Om du har flere maler i denne mappen, blar du deg nedover til du finner ‘Ny web’, og trykker ‘enter’.

Nå har QS opprettet mappen ‘untitled.’ i den mappen du valgte, og ‘untitled.’ inneholder alle filene som er i ‘ny web’. Merk: .htaccess er en skjult fil, ettersom den starter med ‘.’, men Quicksilver kopierer den likevel. I bildet over heter filen kun ‘htaccess’ uten ‘.’ fordi den skal vises på bildet.

Hva heter barnet..? Det som er flott nå er at QS åpner seg selv igjen, med ‘untitled.’ valgt som ikon og du kan enkelt tab’e bort til neste vindu i QS og skrive ‘rename’ og døpe om ‘untitled.’ til navnet på domenet du jobber med f.eks. 3djegrad.net.

Programmér Mappen 3djegrad.net er opprettet med alle filene du ønsket i mappen Kunder. Ferdig!

–Noen siste tanker– Utvidelser av denne funksjonen kan være: ‘ny web mysql’ – mappesett som inneholder php-filer med informasjon du trenger for å koble til databaser, og for innloggingssystem. ‘ny web html’ – mappesett som kun er et standard statisk nettsted med kun rene html filer ‘ny web xhtml strict’ – mappesett som kan være et utgangspunktet for et nettsted som validerer med korrekt Doctype mot XHTML 1.0 Strict ‘ny web xhtml trans’ – mappesett som kan være et utgangspunktet for et nettsted som validerer med korrekt Doctype mot XHTML 1.0 Transitional

Om filen du renamer til allerede finnes vil QuickSilver ikke gjøre noe, bortsett fra å gi deg en feilmelding neste gang du åpner QuickSilver. Men du skal jo ha såpass oversikt over hvilke sider du har laget tidligere, at du kaller evt nye versjoner av nettsder for v2 på slutten? :)

Jeg har også en egen QS Template som heter ‘ny kunde’, og den fungerer på akkurat samme måten som ovenfor, men lager en mappe i ‘Kunder’, som inneholder bl.a. mappene ‘_logoprofil/’ og ‘prosjekter/’, som brukes til å lagre logomateriell for ny kunde og en egen undermappe for prosjekter. Da kan jeg, om det kommer en ny kunde som skal ha nettside, vha. QS lage en mappe for denne nye kunden med egen mappe for logoer og prosjekter. Ettersom QS viser det siste elementet du brukte, om du ikke venter for lenge, kan jeg dermed åpe QS engang til øyeblikkelig og navigere til ‘prosjekter/’ og lage en ‘ny web’ mappe.

Kjapt og gale. Dette tar ikke engang et minutt, og du er sikret lik struktur på alle jobber, og ikke minst. det er superlett å arkivere slike strukturer når du skal ta backup.

Merk: .htaccess er en skjult fil, ettersom den starter med ‘.’, men Quicksilver kopierer den likevel.

Håper dette var til hjelp for noen. Det hjelper ihvertfall meg.

Lykke til!

  • christian

Submit and forget

How to make password reminders remember the password even though you use the Cleartext option on passwords.

Jakob Nielsen made an alertbox entry about password fields, recently.

The gist of what he said, is that it’s user-unfriendly to obscure the passwords, on websites, which presents a password field to their users. He proposes to just use cleartext and not bullets, in these fields, and also suggests a solution to the secrecy problem on public computers: Have an option to show and hide the password field, in case someone looks over your shoulder.

Jakob Nielsen propose that the password is cleartexted as default, but I, and others disagree. Chris Heilmann shows a way to make a show / hide link on all password fields, on a page.

It looks like an elegant script. Kudos to him, for sharing it.

What about password reminders? They only trigger on password-fields.
Password reminders, I believe, will remember passwords if input type=’password’, when you hit submit.
There should be a script that checks to see if the field is text or password, and turns it into password on submit, so that password reminders can remember the passwords even though you use the cleartext method.

Thanks to Chris Heilmann for making the script in the first place.


UPDATE: And btw: I tried my hand at an icon for show/hide password link. It’s of-course under Creative Commons.

Hide/show password icon. With a Creative Commons license.

Hide/show password icon. With a Creative Commons license.

Creative Commons License
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License.

A moat against spammers

If you’re like me, you probably have eliminated almost all of your daily spam email, by being very diligent.

You, and I, read every privacy section on every beta we apply for, to feel secure that our email address won’t get in the Infernal Spam Database(TM). It pays to be diligent, and safeguarding your email address is a smart thing to do, and you should, but you can’t do it forever, you know. Read more…

Subversion – del 1

Se i prosjektmappene dine. Har du mange filer som heter index.php, index2.php, index3.php, index4.php, index5.php? Da er nok Subversion for deg og meg.

Jeg har bestemt meg for å installere Subversion for å drive versjonskontroll på kode jeg skriver. Subversion er OpenSource Version Control System, som lar deg ta vare på alle versjoner av kode, og gjør at du kan dele prosjektet som et team og alle kan sjekke inn og ut kode. For min del er versjons-styringen det viktigste, ettersom jeg jobber alene på programmeringsprosjekter, og har foreløpig ikke så mye bruk for team-delen. Les mer på subversion.tigris.org.

instaaling-svn-macports

Installasjonen av Subversion skjer gjennom MacPorts, et prosjekt som er laget for å installere og administrere fri kildekode under OS X.

Følg med fremover for mer informasjon om hvordan jeg opplever Subversion.

Installasjon av Subversion

subversion.tigris.org – her finner du Subversion
MacPorts – er programvare for å installere FLOSS (free software / opensource) under OS X

GUI for Subversion i OS X – Både fri og lukket

svnX – open source
Versions – ser unektelig sexy ut. €39 – demoversjon
Syncro SVN Client – $59 – årlig avgift

Hva er dine erfaringer med Subversion? Noen gode tips eller fallgruver jeg bør være obs på?

Apache og VirtualHosts

Portbasert virtual hosts ved utvikling av nettsider har en fordel. Du kan da sette opp f.eks localhost:3000 for et nettsted og localhost:3002 for et helt annet.

Problemer du kan støte på underveis:

  1. ./apachectl -S gir en bus error
  2. Kan ikke koble til localhost
  3. Error i syntax

1. Bus error

Dette kan være mye. Det jeg har erfart er at det noen ganger mangler en innstilling i httpd.conf filen som sier hvilken fil serveren skal lete etter som startfil (index.htm/index.php/index.html)

2. kan ikke koble til localhost:

Dette betyr at serveren ikke klarer å koble seg til den adressen du har oppgitt. Bruk porter over 1024 i OS X. Jeg bruker fra 3000 og oppover. Du kan også på Mac gå til Verktøy > Nettverksverktøy og klikke på Port Scan for å se om noen programmer på maskinen bruker portene du velger. Da velger su 127.0.0.1 i feltet ‘Oppgi en Internett- eller IP-adresse for å søke etter åpne utganger’ og haker av ‘Test kun utganger mellom’ og skriver inn 3000, 3100 i de to feltene. Du vil da få opp alle programmer som bruker port 3000 – 3100. Mest sannsynlig ingen. Portscanning

3. Error i syntax

Her er det viktig at filer faktisk finnes At du fører DocumentRoot-banen inn i anførselstegn. DocumentRoot “/Bane/til/fil” Du trenger ikke / etter siste mappenavn.

Husk at httpd.conf filen er case-sensitiv, dvs at den skiller mellom små og store bokstaver.

4. Siste tips

Legg alle Virtual Hosts i egen fil, eksempelvis conf/vhosts.conf, og legg inn en ekstra linje i httpd.conf som henter inn denne filen Include conf/vhosts.conf

Tekstkoding i Leopard / TextWrangler

For å få korrekt visning av æøå med QuickLook i Leopard (Mac OS X 10.5.x) bør filkoding være satt til Unicode UTF-8.

Ikke bruk Unicode UTF-8 NO-BOM, då blir det noen feil med æøå. Bildet viser innstillingene i TextWrangler fra BareBones Software.

Her er det satt i TextWrangler

Her er det satt i TextWrangler

Go back to top