Velkommen til danielbahl.dk
Connect med mig på Facebook
Daniels guldkorn - en samling af små tips & tricks
Hvordan kan jeg se hvilken version af Ubuntu eller Debian jeg kører? ![]()
Skrevet for 6 måneder siden af Daniel Bahl og puttet i kategorien: Linux
![]()
Jeg fik et spørgsmål der meget simpelt lyder “Hvordan kan jeg se hvilken version af Debian jeg kører?” – og et simpelt spørgsmål fortjener et ligeså simpelt svar, skriv: cat /etc/issue
Eksempel 1:
# cat /etc/issue
Debian GNU/Linux 6.0
Eksempel 2:
~$ cat /etc/issue
Ubuntu 11.04
God fornøjelse
Skrevet for 8 måneder siden af Daniel Bahl og puttet i kategorien: PHP-programmering
![]()
Jeg har en kunde der har behov for at lave en række forskellige matematiske beregning i PHP og derfor stillet mig et par spørgsmål vedr. dette. Jeg har derfor valgt at lave en lille artikel her på min guldkorns-sektion om grundlæggende matematik i PHP. God fornøjelse og velkommen til matematik-timen
I PHP har vi en række forskellige symboler at arbejde med:
| Symboler | Beskrivelse |
| + | Plus – lægger to tal sammen |
| - | Minus – trækker to tal fra hinanden |
| * | Gange – ganger to tal sammen |
| / | Division – divider to tal med hinanden |
Lægge to tal sammen: Det er rigtig nemt at arbejde med de grundlæggende matematiske regnestykker i PHP. Her viser jeg hvordan du lægger to tal sammen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Definerer vores variabler med tal $frugter = 5; $bolcher = 3; // Lager en ny variabel "$Antal" // Lægger frugter sammen med bolcher $Antal = $frugter + $bolcher; // Udskriver "$Antal" echo $Antal; // Overstående resulterer i 8. |
Trække to tal fra hinanden: Det er rigtig nemt at arbejde med de grundlæggende matematiske regnestykker i PHP. Her viser jeg hvordan du trækker to tal fra hinanden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Definerer vores variabler med tal $frugter = 5; $bolcher = 3; // Lager en ny variabel "$Antal" // Minuser frugter med bolcher $Antal = $frugter - $bolcher; // Udskriver "$Antal" echo $Antal; // Overstående resulterer i 2. |
Gange to tal med hinanden: Det er rigtig nemt at arbejde med de grundlæggende matematiske regnestykker i PHP. Her viser jeg hvordan du ganger to tal med hinanden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Definerer vores variabler med tal $frugter = 5; $bolcher = 3; // Lager en ny variabel "$Antal" // Minuser frugter med bolcher $Antal = $frugter * $bolcher; // Udskriver "$Antal" echo $Antal; // Overstående resulterer i 15. |
Divider to tal med hinanden: Det er rigtig nemt at arbejde med de grundlæggende matematiske regnestykker i PHP. Her viser jeg hvordan du dividerer to tal med hinanden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Definerer vores variabler med tal $frugter = 10; $bolcher = 2; // Lager en ny variabel "$Antal" // Minuser frugter med bolcher $Antal = $frugter / $bolcher; // Udskriver "$Antal" echo $Antal; // Overstående resulterer i 5. |
Regne med paranteser Det er rigtig nemt at arbejde med de grundlæggende matematiske regnestykker i PHP også selv vi indfører parantes-regning (regn-mig-først), er det utrolig nemt at arbejde med.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // Definerer vores variabler med tal $frugter = 10; $bolcher = 2; // Regne med paranteser $Antal = ( 2 + 2 ) * 2 + (4 - $bolcher); // Udskriver "$Antal" echo $Antal; // Overstående resulterer i 10 |
At opløfte et tab til XY potens. Jeg fik også lige et spørgsmål omkring potens (“Jeg er kommet rigtig langt, med din hjælp, og det er dejligt, jeg er dog stødt ind i at skulle opløfte til 20 potens, i Excel skrives det ^20 kan jeg gøre noget tilsvarende i PHP, eller hvordan klare jeg lige den?”) – Yep det kan du, du skal bruge funktionen pow(); Jeg viser hvordan under her.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | // At opløste et tab i X gange potens. // Her kan vi bruge funktionen pow // Defination: number pow ( number $base , number $exp ) /* Forklaring: pow(x,y) Hvor x er tallet og y er det antal gange tallet skal ganges med sig selv */ $frugter = 10; // X (tallet) $exponent = 2; // Y (exponent, antal gange) // Regne med paranteser $Antal = pow($frugter,$exponent); // Udskriver "$Antal" echo $Antal; // Overstående resulterer i 100 |
Rigtig godt fornøjelse med matematik i PHP
MultiTouch i Mac OS X – nu med uendelige muligheder! ![]()
Skrevet for 10 måneder siden af Daniel Bahl og puttet i kategorien: Mac OS X
![]()
Jeg faldt over en rigtig cool OS X App, som jeg gerne ville dele med jer andre, i håb om i kan få ligeså meget glæde af den!
I Mac OS X Lion GM er der kommet en del nye MultiTouch-Gestures, og det betyder at nogle programmer er broken, nogle programmer gør noget “andet end den plejer” når man swiper musen, og nogle programmer har slet ikke fået MultiTouch support endnu.
Jeg elsker min Magic Mouse, og bruger gestures all the time. Men fordi Lion GM har tager “2 finger swipe” som en OS-gesture til at skifte mellem virtuelle desktops, så betyder det at jeg i Google Chrome ikke kan swipe frem og tilbage i min historik, på andre måder end at klikke på “Tilbage”-knappen eller bruger tastaturgenveje, belastende! Hvis jeg klikker mig ind på en side, og vil tilbage, så så plejer jeg med to fingre at swipe mod venstre, men det gør nu at Mission Control skifter virtuel desktop, istedet for at sende min browser tilbage.
Jeg har Googlet lidt efter en løsning og fandt over et genialt program (se screenshot under her) – i programmer kan du noget så simpelt som at tildele MultiTouch-actions til tastaturgenveje på app-niveau, det betyder at jeg for hvert program kan angive, hvis man eks. swiper left, så eksekverer den kommandoen “CMD+Arrow Left” eller hvis man swiper ned, så eksekverer den “Keyboard-button END”.
Jeg har nu lavet så
1-finger swipe left = tilbage
1-finger swipe right = frem
2-finger swipe left = Forrige tab
2-finger swiper right = Næste tab
GE NI ALT
Og det virker bare !
Andre programmer end Chrome
Denne app virker med alle apps, f.eks. i Photoshop hvor jeg nu kan swipe mod venstre, for at UNDO, jeg kan swipe op med to fingre for “OPEN”. I iTunes kan jeg nu skifte til næste sang, ved blot at swipe, mulighederne er uendelige!
Så herfra de varmeste anbefalinger til Better Touch Tool som en fuld Lion-kompatibel, aktivt under udvikling og det bedste af det hele: gratis!
http://www.boastr.de/ og http://blog.boastr.net/

Lav din egen + adresse på dit domæne ![]()
Skrevet for 10 måneder siden af Daniel Bahl og puttet i kategorien: Linux
![]()
Jeg sad over en frokost i kantinen her den anden dag og skulle udveksle min Google+ adresse med en dude jeg faldt i snak med, og i bedste facebook-stil sagde jeg; plus.google.com/dani… nåå nej, i Google+ verdenen hedder det https://plus.google.com/100759452837434052488/ – men det var jo ikke lige så nemt at huske. Løsningen var at give ham min e-mail adresse, som kan kunne søge på.
Men jeg tænkte; det må da kunne gøres nemmere. Google’s egen “korte” adresse til plus-tjenesten er google.com/+ og det slog mig, hvorfor ikke lave danielbahl.dk/+ så det gjorde jeg, og det kan du også!
Det kræver en Linux-server og en .htaccess fil.
Lav en .htaccess fil og sæt denne linje ind. Husk at erstatte det lange tal, med dit profil-ID

Efter en dag med Google+ [Min Mening] ![]()
Skrevet for 10 måneder siden af Daniel Bahl og puttet i kategorien: Min mening
![]()
For ca. 24 timer siden blev Google+ lanceret. Google+ er Google’s nye sociale satsning som forhåbentlig ender med mere success end deres tidligere forsøg; Wave og Buzz.
Google+ er en blanding af Facebook, Flickr og Twitter
Jeg syntes Google har ramt plet, og skabt et socialt netværk der tager det bedste fra Facebook, Flickr og Twitter og ryster det hele sammen til en fantastisk cocktail kaldet “Google+ Limited Beta”
Ligheder med Twitter
Det jeg elsker ved Twitter er at det ikke handler om venskabsanmodninger der skal bekræftes eller afvises, alle kan følge alle. På den måde kan du følge både kendte celebs og idoler, folk der blogger og skriver om fælles interesser og naturligvis dine kedelige venner.
Sådan er det også med Google+, alle kan følge alle – men Google har taget det hele et niveau videre vha. af “Circles”. Hver kontakt skal du putte i en cirkel, du kan oprette ligeså mange cirkler du ønsker. Når du skriver en statusopdatering, uploader et billeder eller poster et link, skal du vælge hvilke cirkler du vil dele indholdet med, det kan være en eller flere cirkler, f.eks. “Nær familie”, “Hele familien” eller dine mange ”Fans”, “Followers” mv.
Rettighedsstyring lavet så brugervenligt at Facebook’s forsøg på at lave det samme, ligner en implementering af NemID (*hint; NemID er ikke så nemt endda), eller sagt på en anden måde, ikke ret mange fatter hat af Facebook’s gruppestyring, så derfor er der ikke ret mange der bruger det.
Google+’s TRÆK-OG-SLIP i en cirkel er genialt udtænkt, og det virker og er ekstremt brugervenligt. Rettigheds- og gruppestyring på steroider.

Ligheder med Facebook
Twitter – for godt og ondt, er begrænset til 140 tegn. Google+ minder mere om Facebook på den måde du deler data; tekster, billeder, lokationer og links kan postes som på Facebok. En ”Stream” viser altid de nyeste indlæg fra dem du følger – ligesom Facebook.
Du er heller ikke begrænset af 140 tegn. Jeg ved pt. ikke hvad limit er sat til, jeg er ikke stødt på den endnu. Der kan skrives kommentarer, trykkes ”Syntes godt om” som Google kalder ”+1” og followers kan tagges i både statusopdatering og kommentarer.

Ligheder med Flickr
Flickr er en succesfuld fotodelingstjeneste, og trods mange millioner foto-uploads hver time på Facebook, så har Facebook aldrig været rigtig stærk i billedekvalitet. Deres crappy lille ”Billedefremviser” viser billederne i en dårlig komprimeret opløsning på omkring 800×800. På en moderne desktop-PC bliver det et lille grimt billede.
Google+ bruger al’ Googles viden om fotos fra deres Picasa-projekt. Det fungerer, og det fungerer rigtig godt! Fuld-skærms visning i fuld kvalitet, lækere albums, tagging- og kommentarer til billeder i ægte Facebook-stil.

Der er mange flere ligheder og forskelle, overstående er blot toppen af isbjerget, jeg kommer ind på flere detaljer i kommende blogindlæg.
Konklussion
Google+ er ikke en Facebook-killer, endnu! De mangler det vigtigeste element af dem alle, brugerne. Jeg tror personligt ikke kan jeg flytte mine venner med over på G+ fra den ene dag til den anden, især ikke når der ikke er noget ”rigtig” nyt i G+ som Facebook ikke har? De fleste vil nok sige, Facebook er fint nok, og her er alle mine venner.
Jeg tror på at Google+ kan blive en Twitter-killer, ikke i morgen og ikke om 6 måneder, men jeg tror at mange Twitter-brugere, vil føle sig hjemme i Google+ right away, og det betyder rigtig meget. Jeg er allerede aktiv på G+ og poster løs derinde
Om det forsætter sådan, eller om jeg langsomt falder tilbage til Twitter/Facebook igen, må tiden vise.
Dette er første test-version af G+ og allerede nu ligner det en større success end Wave og Buzz – tillykke Google, jeg tror sku’ i har ramt rigtigt.
Daniel Bahl
Hardware-info på Linux-server – dmidecode ![]()
Skrevet for 10 måneder siden af Daniel Bahl og puttet i kategorien: Linux
![]()
Jeg havde en kunde der havde behov for at vide om der sad 2 eller 4 RAM-moduler i hans server, han havde ikke mulighed for at gå ned og fysisk åbne serveren, så han spurgte hvordan man kunne se det via. Linux.
Kommandoen dmidecode kan læse OEM- og hardware informationer fra serveren og herfra kan man bl.a. se hvert RAM-slot på bundkortet, og hvilke RAM-moduler der er monteret her-i. Du kan også se producent-informationer og meget mere.
Hvis du blot skriver dmidecode, får du en enorm lang liste over alle data, så heldigvis er det muligt at filtrerer ud fra “informations-type”. Det gøres ved at skrive -t efterfulgt af et tal.
Type 1 giver f.eks. OEM-informationer. I dette tilfælde model-nummer, serie-nummer og UUID.
$ sudo dmidecode -t 1
# dmidecode 2.9
SMBIOS 2.5 present.
Handle 0×0100, DMI type 1, 27 bytes
System Information
Manufacturer: Dell Inc.
Product Name: PowerEdge R200
Serial Number: 5YQF-XXXXXXXXX
UUID: 44454C4C-XXXXXXXXX
Type 17, giver hvad vi skulle bruge i dette tilfælde: RAM-output
$ sudo dmidecode -t 17
# dmidecode 2.9
SMBIOS 2.5 present.
Handle 0×1100, DMI type 17, 28 bytes
Memory Device
Array Handle: 0×1000
Error Information Handle: Not Provided
Total Width: 72 bits
Data Width: 64 bits
Size: 1024 MB
Form Factor: DIMM
Set: 1
Locator: DIMM1_A
Bank Locator: Not Specified
Type: DDR2
Type Detail: Synchronous
Speed: 667 MHz (1.5 ns)
Manufacturer: CE00000000000000
Serial Number: 832D1AF2
Asset Tag: 020802
Part Number: M3 91T2953EZ3-CE6
Handle 0×1101, DMI type 17, 28 bytes
Memory Device
Size: No Module Installed
Handle 0×1102, DMI type 17, 28 bytes
Memory Device
Array Handle: 0×1000
Error Information Handle: Not Provided
Total Width: 72 bits
Data Width: 64 bits
Size: 1024 MB
Form Factor: DIMM
Set: 1
Locator: DIMM1_B
Bank Locator: Not Specified
Type: DDR2
Type Detail: Synchronous
Speed: 667 MHz (1.5 ns)
Manufacturer: CE00000000000000
Serial Number: 832D1B4D
Asset Tag: 020802
Part Number: M3 91T2953EZ3-CE6
Handle 0×1103, DMI type 17, 28 bytes
Memory Device
Size: No Module Installed
God fornøjelse
Håber dette lille trick kan hjælpe andre i samme situation.
SVN – Importér eksisterende website via kommandolinje ![]()
Skrevet for 11 måneder siden af Daniel Bahl og puttet i kategorien: Linux, SVN
![]()
I denne artikel skal vi kigge på hvordan du tager dit første skridt ind i SVN-verdenen og laver en masse-import af en mappe (recursive, dvs. inkl. alle undermapper og filer heri) fra din Linux-server overpå en SVN-server over HTTP://-protokollen.
Lidt historie
Jeg har en kunde som laver en del low-level systemudvikling til maskiner, samlebåndsrobotter mv. De lever af at programmerer og udvikle små stumper kode og sælge dem til andre virksomheder.
Jeg var ude hos dem for nogle dage siden, og da jeg hørte om deres arbejdsgange, var ved jeg at tabe munden; sådan gør man ikke i 2011
De gemmer deres kode-filer på deres lokale harddisk, og så e-mailer de filerne mellem hinanden. Engang imellem kopierer de dem over på en ekstern harddisk, for backup! Ingen versionsstyring, ingen team-systemer, ingen revisioner – der var ikke styr på ret meget.
Jeg forslog derfor en SVN-server, og viste dem alle mulighederne. Der gik ikke sekunder, før jeg blev hyret til at opsætte et komplet hosted SVN-miljø for dem – jeg satte en SVN-server op på en Cloud-server hos ServerHosting A/S – og nu er de glade

SVN er åbenbart et ukendt begreb for mange, og derfor er det også noget vil jeg lave nogle videoer om på et tidspunkt, så i alle kan lære at bruge SVN.
Spørgsmål fra en bruger
Grunden til denne artikel skyldes en e-mail jeg har modtaget – og det er ikke første gang jeg høre dette spørgsmål:
Hej Daniel,
Hvis jeg har en Linux-server med SSH-adgang, hvor alle mine web-data ligger, hvordan kan jeg så ”uploade” alle disse data til min SVN-server. Første gang, skal jeg jo på en eller anden måde have det hele op. Jeg kunne naturligvis downloade dem over FTP og så bruge mit SVN-program på min PC til at importerer dem med, men kan man ikke gør noget smart på serverne?
Jo, det kan du tro man kan
Jeg går ud fra du allerede har opsat en SVN-klient på din desktop-PC som du nævner, der findes der nemlig rigtig mange, rigtig gode desktop SVN-klienter med et GUI, der gør det nemt at trække og slippe filer ind på en SVN-server. Til Windows anbefaler jeg TortoiseSVN. Til Mac findes der to fantastisk apps, Versions og Cornerstone. Jeg bruger selv sidstnævnte, men det er en smagssag, prøv dem begge og se hvilken du bedst kan lide.
På en server uden grafisk brugerflade, skal vi arbejde med kommandolinjer, men det er bestemt ikke svært. Start med at installer subversion, hvis du ikke allerede har denne pakke installeret. Subversion pakken indeholder ”svn”-klienten, som vi skal bruge:
Nu kan vi køre en ”import”-kommando med vores SVN-klient. Lad os sige vi gerne vil have hele /var/www op i vores repos: svn/test/branches. Ydermere lægger vi også lige en ”commit”-besked ind vha. -m kommandoen.
1 | svn import -m "Import af data" /var/www/ https://brugernavn@1.2.3.4/svn/test/branches |
Det var alt hvad der skulle til, nu er hele vores /var/www-mappe flyttet over på SVN-serveren, og vi kan nu arbejde med vores kildekode
God fornøjelse og happy SVN’ing! ![]()
Daniel Bahl