Etikettarkiv: freebsd

Besök hos Microsoft i Redmond

Jag har blivit utvald som en av fem personer från Sverige åka till Microsofts huvudkontor i Redmond och lära mig lite om Microsoft och dess verksamhet och produkter. Jag har sedan tidigare ett relativt platoniskt förhållande till Microsoft, dock så använder jag dess operativsystem Windows dagligen i någon form. På serversidan så faller dock mitt val på Ubuntu/Linux eller Free/OpenBSD.

Det enda event jag medverkat tidigare på i Microsofts regi är ett trevligt rundabordssamtal som Stephanie Smitt Lindberg (numera på Scandic) bjöd in till 2009 (bloggytråd om inbjudan).

Vi fem som åker förutom mig själv är Walter Naeslund, Pingis Hadenius, Joakim Jardenberg och Tommy K Johansson.

Tidningen Resumé har har skrivit roligt om detta.

Så kommer du igång med Node.js

Först och främst så kanske jag ska skriva lite om vad Node.js är för något. Som du ser av filändelsen så är det ett JavaScript-språk och används på serversidan för att kommunicera med exempelvis en webbklient (webbläsare).

Node.js är eventbaserat, litet och lätt till skillnad mot exempelvis Apache. Dock är det värt att notera att Node.js inte är är skapat för att lösa alla problem utan har uppstått från realtidswebbens behov av snabb, skalbar och minnessnål.

Prestandamässigt så kan Node.js jämföras med Nginx (när enbart webbsidor levereras). Bland användare av Node.js så kan Yammer och Plurk nämnas.

— Installation —

Ladda hem källkoden som tar.gz eller zip från Github: https://github.com/joyent/node eller med kommandot:

$ git clone git://github.com/ry/node.git

Gå sedan in i katalogen som skapats och skriv ./configure och då skall det varna om något saknas, sen är det bara skriva make. Ta en kopp kaffe och vänta några minuter. Bland annat så byggs Googles V8 JavaScript-motor.

Om du som jag använder FreeBSD så kommer din byggprocess att misslyckas på två ställen, först och främst så måste du använda gmake istället för make och sedan så måste du lägga på den patch som återfinnes här.

'build' finished successfully (2m10.790s)
$ ./node -v
v0.5.0-pre

För att lättare komma åt node-binären samt dess verktyg så glöm inte att skriva gmake install (eller make install).

— Hello world med Node.JS —

Nu är det dags att skriva vårt första script samt se till att Node hanterar detta program korrekt. Scriptet helloworld.js ser ut enligt följande:

var sys = require("sys");
var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80);

console.log('Server running at port 80');

Sedan för att se till att node exekverar och levererar ovan på TCP port 80 så skriver vi enligt följande:

$ sudo node helloworld.js
Server running at port 80

Observera att du måste köra detta med root-behörighet eftersom vi lyssnar på port 80. Många väljer att använda port 8080 eller liknande men det är inget jag rekommenderar eftersom många brandväggar ej släpper igenom denna port. Läs denna guide hur du undviker att köra som root men ändå kan använda port 80. Att köra program som root är något som du vill undvika i största mån då detta kan innebära en säkerhetsrisk.

Koden ovan är tämligen självförklarande. Om du vill använda Nginx + PHP på samma server så kan du binda till olika IP-nummer genom att ändra .listen(80); till .listen(80, ”1.2.3.4”); eller det IP-nummer du vill binda till. Du måste även binda Nginx till det andra IP-nummret.

Node.JS i bakgrunden

Om du vill ha möjligheten att lägga program i bakgrunden vilket är troligt i en skarp miljö så måste du göra enligt följande förfarande då det saknas en modul vid namn daemon.node.

  1. Ladda hem koden från https://github.com/Slashed/daemon.node
  2. Kompilera med hjälp av verktyget node-waf (följer med Node.JS) på följande sätt: node-waf configure build
  3. Lägg den binär med sökväg build/default/daemon.node i samma mapp som helloworld.js
  4. Byt ut koden mot nedan där två rader är tillagda:
var sys = require("sys");
var daemon = require("./daemon");
var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80);

console.log('Server running at port 80');
daemon.start();

Startar du helloworld.js nu så läggs tjänsten i bakgrunden.

Trevligt! Hör av dig om du har några frågor. Nästa gång så går jag in på hur du kan kommunicera lätt mellan Redis och webbläsaren med hjälp av Node.JS

Hur jag började med webben

Efter att återställt en gammal backup för några dagar sedan så hittade jag bilder, webbsidor och annat roligt som jag skapat runt 1994-1996 då jag var SysOp på en egen BBS. Kort förklarat är BBS:en föregångaren till Internet och kommunikation var direkt mellan två datorer med hjälp av modem.

Jag var redan då intresserad av datorgrafik och ritade en hel del ANSI och ASCII bilder. Förutom att rita datografik så utvecklade jag PPE-program till PCBoard samt program till Remote Access (RA). Internet och framförallt webben blev dock mycket populärt och det var inte så många som ville använda telnet för att ansluta till BBS:er över Internet så därför gled jag sakta men säkert över till HTML, TCP/IP och FreeBSD.

Här är ett axplock av de bilder jag ritat:

Läs även hur Albin Stööp, Karl Roos började med Internet.
Hur började du med Internet? Skriv i din blogg och länka till detta inlägg eller skriv en kommentar nedan!

Snabb guide till Varnish

Fick en förfrågan från John Angelmo (@veidit) att skriva lite om den supergrymma front-end cachen Varnish. Varnish utvecklas till stor del av företaget Linpro från Norge med hjälp av den danske FreeBSD-utvecklaren Poul-Henning Kamp.

I Sverige är Varnish populärt och används av exempelvis Aftonbladet och SvD. Varnish har en mängd intressanta features och ett mycket kraftfullt konfigurationsspråk som påminner om C.

Använder du Ubuntu som jag gör så är det bara att installera via APT:

$ sudo apt-get install varnish

Standard så lyssnar varnish på TCP port 6081 och skickar vidare förfrågningarna till port 8080 där du förväntas ha din webbserver såsom Apache eller nginx.

Konfigurationsfilen för varnish återhittas i katalogen /etc/varnish/ med filnamnet default.vcl. VCL är också benämningen på det konfigurationsspråk som används som stödjer bla inline C. Se denna PDf-presentation av PHK för mer info.

Det viktiga vi behöver känna till är hur vi pekar ut vårat backend och vilka filer vi vill lagra i cachen. I mitt fall så valde jag Varnish för att Apache drog på tok för mycket minne då exempelvis bara bilder, css och annan statisk information skulle visas.

Nedan konfigurationsfil pekar först ut backend, sedan så sätter den X-Forwarded-For http-headern för att underlägga loggningen i Apache.

Sen så defineras vad som skall chachas.

backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
remove req.http.X-Forwarded-For;
set    req.http.X-Forwarded-For = client.ip;
if (req.url ~ "^/css" || req.url ~ "^/images" || req.url ~ "^/facebox" || req.url ~ "^/avatars") {
return(lookup);
}
if (req.request != "GET" && req.request != "HEAD") {
return(pipe);
}
if (req.url ~ "^/feedlist.php" || req.url ~ "^/removefeed.php" || req.url ~ "^/feeds.php" || req.url ~ "^/addfeeds" || req.url ~ "^/42it" || req.url ~ "^/login.php"
|| req.url ~ "^/admin" || req.url ~ "^/settings" || req.url ~ "^/js/tinymce/" ) {
return(pipe);
}
if (req.url ~ "\.(jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|css|vsd|doc|ppt|pps|xls|pdf|mp3|mp4|m4a|ogg|mov|avi|wmv|sxw|zip|gz|bz2|tgz|tar|rar|odc|odb|odf|odg|odi|odp|o
ds|odt|sxc|sxd|sxi|sxw|dmg|torrent|deb|msi|iso|rpm)$") {
return(lookup);
}
}

sub vcl_hash {
set req.hash += req.http.cookie;
}

Uppdatering: Varför jag ibland måste använda Varnish tillsammans med Apache istället för mitt förstahandsval Nginx är pga de invecklade .htacess-filer jag skapat.

FreeBSD 7.0 är släppt

Jag har administrerat och gillar alla BSD dialekter för alla har sina för och nackdelar. Idag meddelades det att FreeBSD 7.0 är släppt:

The FreeBSD Release Engineering Team is pleased to announce the availability of FreeBSD 7.0-RELEASE. This is the first release from the 7-STABLE branch which introduces many new features along with many improvements to functionality present in the earlier branches.

Vad sägs om ca 1500% bättre prestanda under hård press? Ja detta och en hel del mer nytt finns att läsa:

http://www.freebsd.org/releases/7.0R/announce.html

Gillar du också BSD? Gå med i BSD Users Sweden (BUS) vilket är (var) en förening som jag var med och grundade, nu är det mest bara en E-postlista.

Sådant jag använder dagligen

För att ge er läsare en lite information om hur jag arbetar så är det följande verktyg/prylar/mjukvara som jag stöter på dagligen i någon form eller omfattning:

Oj, det blev en hel del. Som ni förstår så är det mycket som skall klaffa för att en dag skall lira bra, vilket det gör för det mesta.

Ubuntu Linux server

Jag har länge varit ett stort fan av diverse BSD UNIX dialekter (främst FreeBSD) men har under senare år börjat gilla Linux mer och mer för att det kommer mer support för diverse suspekta nätverkskort men även programmvaror så när jag installerade den senaste servern så beslutade jag mig för att ge Ubuntu Server en chans (efter att ha kört Debian rätt länge) och är mycket nöjd än så länge.

En annan aspekt i det hela är att jag vill lägga mindre tid på administration och mer på utveckling och där finner jag Debian/Ubuntu:s pakethanteringssystem mycket trevligt.