Category Archives: Opensource

Akelos, Dropbox, zabbix

Næsten hver dag tænker jeg på at skrive et blogindlæg omkring de teknologier jeg har arbejdet med den pågældende dag. Af en eller anden grund bliver det bare aldrig til noget.
Men nu vil jeg da lige nævne nogle af de teknologier jeg har arbejdet med de sidste par dage.

Akelos

Akelos er et PHP Framework, som ligger sig meget op af Rails. Faktisk henviser de flere steder til Rails’ dokumentation, de steder deres egen dokumentation ikke er færdig.
Jeg har brugt det til et system som havde behov for at blive lavet i PHP, og det virkede faktisk ret godt. Der er et administration’s plugin som faktisk virker.

Dropbox

Dropbox er et værktøj som gør det muligt at have en delt mappe som bliver synkroniseret mellem flere computere. Der findes både versioner til Windows, Linux og Mac OS X.
Nu har jeg kun prøvet det på Mac OS X, og der er det virkelig godt integreret.
Det er endda muligt at give et unikt link videre til andre folk, hvis man vil dele en specifik fik. Som standard får man 2GB plads, men man kan få mere plads ved at henvise dem til Dropbox

Zabbix

Den sidste ting jeg vil beskrive er Zabbix, som er et monitoringssystem. Jeg har igennem flere år brugt Nagios, men jeg synes det falder lidt igennem på en del punkter. Zabbix styres igennem database, hvilket gør det nemmere at konfigurere hvis man har mange hosts. Derudover har den også autodiscovery og agenter som kan installeres på stort set alle systemer.

Installering af MySQL gem

I forbindelse med mit bachelorprojekt, hvor jeg benytter mig af (http://www.rubyonrails.org/ “Ruby on Rails”), begyndte jeg at få følgende fejl.

DEPRECATION WARNING: You’re using the Ruby-based MySQL library that ships with
Rails. This library will be REMOVED FROM RAILS 2.2. Please switch to the
offical mysql gem: `gem install mysql` See
http://www.rubyonrails.org/deprecation for details. (called from mysql_connection at /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/connection_adapters/mysql_adapter.rb:81)

Så var der jo ikke andet at gøre end at køre den kommendo som beskeden foreslog. Det plejer at være dejligt nemt at installer gems. Men nej.

$ sudo gem install mysql

Gav følgende resultat.

Building native extensions. This could take a while…
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

/opt/local/bin/ruby extconf.rb install mysql
checking for mysql_query() in -lmysqlclient… no
checking for main() in -lm… yes
checking for mysql_query() in -lmysqlclient… no
checking for main() in -lz… yes
checking for mysql_query() in -lmysqlclient… no
checking for main() in -lsocket… no
checking for mysql_query() in -lmysqlclient… no
checking for main() in -lnsl… no
checking for mysql_query() in -lmysqlclient… no
*** extconf.rb failed ***

Det undrede jeg mig så lidt over, indtil jeg efter at have søgt lidt på [google](http://www.google.com/ “Google”) fandt nogen med samme problemer.
Det skyldes hovedsaglig at min [MySQL](http://www.mysql.com/ “MySQL Query Analyzer – Improving SQL Query Performance”) er installeret lidt specielt. Nemlig i `/opt/local/lib/mysql5/` og alle mysql-relaterede programmer i min $PATH hedder noget med mysql_*5.
Derfor kunne gem-pakken ikke blive installeres automatisk, og man må hjælpe den lidt på vej, med at fortælle hvor `mysql_config` rigtig ligger, hvilket f.eks. kan findes ved at køre følgende i [iTerm](http://iterm.sourceforge.net/ “iTerm”).

$ locate mysql_config
/opt/local/bin/mysql_config5
/opt/local/lib/mysql5/bin/mysql_config
/opt/local/share/man/man1/mysql_config.1.gz

Herefter kan følgende køres.

$ sudo gem install mysql — –with-mysql-config=/opt/local/lib/mysql5/bin/mysql_config
Building native extensions. This could take a while…
Successfully installed mysql-2.7
1 gem installed

Wuhoo, nu kommer der ingen DEPRECATION WARNING mere :)

Firefox og sidst lukkede tabs

Siden jeg opgraderede til Firefox 3.0, har det ikke været muligt for mig at genskabe lukkede tabs.
Normalt kan dette gøres fra History -> Recently Closed Tabs, men denne var altid grå / ikke aktiv ved mig.

Først tænkte jeg at dette måske var en fejl ved opgradering til FF3, men efter en hurtig søgning på google kunne jeg se at dette nok mere skyldes et gammelt plugin.
I følge [denne bug report](https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/129749) skriver [en som kommentar](https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/129749/comments/11) at man skal igennem [about:config](about:config) skal sætte

browser.sessionstore.enabled = true

Efter at have rettet denne værdi og genstartet firefox, virker denne funktion nu igen. Rart!

Linuxforum

Så er dette års [Linuxforum](http://linuxforum.dk/2007/) overstået, og igen i år bragte det en masse nu og god viden.
Følgende ting skal jeg have kigget mere på:

* [Hobbit Monitoring](http://hobbitmon.sourceforge.net/), man skal ikke lade sig snyde af designet, for bag det lidt gammeldags design, ligger der et efiktiv tool, som går det muligt at overvåge mange servere på en nem måde. Faktisk satte jeg det op da jeg kom hjem fra Linuxforum, og på 10 minutter havde jeg sat serveren samt et par klienter til den i mit [firma](http://fairweb.dk/)
* [Dspam](http://www.nuclearelephant.com/). Dette ser ud til at være et udemærket værktøj til bekæmpelse af spam. Jeg har før overvejet at se på det, men har ikke rigtigt haft tid.
* [Soekris net4801](http://www.soekris.com/net4801.htm) købt ved [Cortexsystems](http://www.cortexsystems.dk/) som et messetilbud. En lille smart computer, som kan bruges til firewall, vpn og andre former for netværksbehandling. Det er mening at denne skal sættes op på [mit kollegie](http://lederkollegiet.dk/), så vi kan styre vores forbindelse lidt bedre. F.eks. er vi begyndt at se en del nettv, og nogen gange skal det have lidt højere prioritet end almindelig trafik.

Til sidst skal det nævnes at jeg selvfølgelig igen fik hørt Peter Larsen fra [GratisDNS](http://www.gratisdns.dk/), som altid har nogle munter dagligdags historier at fortælle, når man driver DNS-hosting på et lidt højere plan. Forresten havde han udstillingens bedste slik! (og han var nok også den stand som havde mest af det)

Linuxforum og CeBIT

Her i weekenden var der så LinuxForum 2006, og lige som sidste år deltog jeg selvfølgelig. Igen i år, var der en masse spændende foredrag. Her i blandt med et med Poul Henning Kamp om det ekstra skudsekund som blev indsat ved årsskiftet og et foredrag omkring "The perfect data in the perfect world" af Dan Klein.
To foredrag som absolut kan anbefales at se på, når videoerne engang kommer ud.
Forresten skrev Poul Henning en artikel til Ingeniøren om hans oplevelse af LinuxForum.

Næste weekend gælder det CeBIT 2006, verdens største IT-messe, som foregår i Hannover. Normalt plejer jeg selv at afholde en tur derned, men pga. for få tilmeldte, valgte jeg at sende dem videre til newz.dk's tur, og selv tilmelde mig den samme. Jeg har samlet nogle billeder fra tidligere år.
Turen er også udsolgt nu, hvis det skulle have vækket nogen interesse.

Nye bøger…

Så var jeg ude og bruge lidt penge på bøger igen. Denne gang blev det til 4 bøger som omhandler programmeringssproget ruby, en bog om ruby on rails og så lidt omkring det at være flere om at skrive kode, sammen med et versionsstyringsystem.
Til sidste en lille bog omkring forskellige smarte shellscripts.

Programming Ruby
Title: Programming Ruby, The Pragmatic Programmer’s Guide
ISBN: 0974514055 (amazon.co.uk)
Den første bog hedder Programming Ruby, The Pragmatic Programmer’s Guide, og skulle gerne hjælpe mig den første vej igennem Ruby. Bogen er på 862 sider, og blev udgivet i slutningen af 2004. Jeg regner ikke med at læse hele bogen fra starten, men mere lige de første standardting i ruby og så derefter mest som et opslagsværk.

 
Agile Web Development with Rails
Title: Agile Web Development with Rails
ISBN: 097669400X (amazon.co.uk)
Den næste bog i rækken hedder
Agile Web Development with Rails, hvilket beskriver et framework som kaldet Ruby on Rails, som faktisk er udviklet af en dansker. Ideen med købet af denne bog er at lære teknologien og så kode et nyt administrationssytem til mit firma, FairWeb.

Pragmatic Version Control
Title: Pragmatic Version Control Using Subversion
ISBN: 0974514063 (amazon.co.uk)
Den næsten bog hedder Pragmatic Version Control Using Subversion og er en bog jeg ser meget frem til at læse. Faktisk har jeg allerede læst det første kapitel, selvom jeg næsten lige et kommet ind af døren. Den skulle gerne komme med en masse tips og ideer til hvordan man arbejder flere sammen om at skrive på det samme system vha. Subversion. Bogen findes også i en CVS version.

Wicked Cool Shell Scripts
Title: Wicked Cool Shell Scripts
ISBN: 1593270127 (amazon.co.uk)
Den sidste bog jeg købte, var ikke en bog som jeg på forhånd havde regnet med at købe, men da jeg læste titlen og bladrede lidt i den, så den faktisk rigtig spændende ud. Som titlen siger, er det en masse smarte shellscrips som kan gøre ens hverdag lidt lettere. Jeg ville først have købt en bog generelt omkring shell scripting, men jeg synes ikke rigtigt at kunne finde nogle gode. Jeg ville gerne have en bog som kom med nogle gode eksempler, hvilket ser ud til denne bog har. Tiden vil så vise om det var et godt køb.

Alle bøger blev købt igennem PolytekniskDTU, og da jeg er medlem af BSD-DK, har jeg fået 15% rabat på alle bøger. Lige pt kører Polyteknisk tilbud på O’reilly bøger, hvor man spare 25%. Desværre havde de ikke lige nogen jeg kunne tænke mig. Nok fordi jeg allerede har købt de mest interessante bøger.

Python

Når man skal lære et nyt scripting-sprog er et af de første problemer altid – hvad skal man dog lave. Tilfældigvis havde jeg læst lidt om at fremstille et fiktivt CPR-nummer et par dage forinden, så hvorfor ikke bare prøve at skrive et python program der kunne det.

Resultatet kan ses herunder. Det skal dog lige bemærkes, at det sikkert kunne laves meget bedre og i scriptet er der en del begrænsninger, men det virker da nogenlunde. Det var i hvert fald nok til at jeg fik lyst til at kode lidt PHP igen :)

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Fremstilling af CPR-nummer
# 
# AUTHOR:
#   Jesper Laursen 
#
# TODO:
#   Angivelse af køn
#   Automatisk fremstilling af nyt cpr hvis random-tal er forkerte
#
# NOTE:
#   Virker kun ved fødselsdage mellem 1900 og 1999
#   Dette er mit første script i python (efter HelloWorld.py)
#
# SEE ALSO:
#   Fik inspiration fra: http://www.oes.dk/sw2823.asp
#
import sys
from random import randint
from random import choice

if len(sys.argv) != 2:
	print ''
	print 'Usage: '+ sys.argv[0] + ' ddmmyy'
	print ''
	sys.exit();

date = sys.argv[1]

day 	= date[0:2]
month 	= date[2:4]
year 	= date[4:6]

# Første til forhøjes med 6
cpr = [int(date[0])+6]

# resterende tal overføres
for x in date[1:]:
	cpr.append(int(x))

# et 7. tal vælges
if int(year) < 37:
	cpr.append(randint(0, 3))
else:
	cpr.append(choice([0, 1, 2, 3, 4, 9]))

# ciffer 8. og 9. er tilfældige
cpr.append(randint(0,9))
cpr.append(randint(0,9))

# De forskellige tal har vægte
power = [4, 3, 2, 7, 6, 5, 4, 3, 2]


# De forskellige tal ganges med deres vægt
cprtmp = []
for i in range(len(cpr)):
	cprtmp.append(power[i] * cpr[i])

# 10. cifre er summen af resten
cprtmp.append(sum(cprtmp))

# Modulus 11 test
tmp = 11 - (cprtmp[9] % 11);
if tmp == 11:
	cpr.append(0)
elif tmp == 10:
	sys.stderr.write('Fejl - ugyldige randomtal - prøv igen')
	sys.exit()
else:
	cpr.append(tmp)

# 1. cifre bliver ændret tilbage
cpr[0] = int(day[0])

# Listen med cifre udskrives
for x in cpr:
    print x,

Det var så mit første script - kom endelig med nogle kommentar. Jeg regner dog ikke med at skulle bruge dette script-sprog til noget nyttigt, men det var da meget sjovt bare at prøve det.