epepep

The archived blog history of Per Liedman.

© 2013. All rights reserved.

Built on @mdo's Hyde.

God afton, herr Mandelbrot

Mandelbrot C-programmering och fraktaler. Praktiskt taget som att vara tillbaka i gymnasiet igen, även om jag tror jag programmerade i Pascal sist jag gjorde dem.

Som tur är har det hänt en hel del på hårdvarufronten sen dess, och även löjligt högupplösta och färggranna versioner av Mandelbrot-mängden går att åstadkomma på nästan ingen tid alls.

Tack vare den uppsjö av hjälpprogram som finns lättillgängliga i en modern Linux-distribution (i det här fallet NetPBM och FFmpeg), gick det snabbt att göra en film (1.8 MB) med en kort inzoomning.

Källkoden som användes för att rita bilderna finns här: mandelbrot.c

Adjö Windows, hej Ubuntu

Ubuntu Linux Inspirerad av Mattias har jag sedan några veckor tillbaka gjort mig fri från Windows. Jag har förvisso kört Linux på min server i många år, och experimenterat med Ubuntu Linux på någon maskin, men inte vågat ta steget att köra det för det dagliga surfandet, programmerandet, etc.

Hittills är jag mycket nöjd. Linux och framförallt Ubuntu har kommit långt i fråga om användarvänlighet, och jag vågar påstå att det inte är svårare att varken installera eller använda Ubuntu 7.10 än Windows. Samtidigt får man fördelarna att systemet är gratis, betydligt lättare att installera och uppdatera programvara på (som också är gratis), samt fungerar bra även på en inte allt för kraftfull dator (framförallt jämfört med pinsamt minneshungriga Windows Vista, men står sig bra även mot XP).

Inte övertygad av Ubuntus storhet ännu? Läs en jämförelse mellan Vista och Ubuntu 7.10. Favoritcitat angående Vistas prestanda:

But mostly: it's slow, it's intrusive, and it's arbitrarily different. It takes minutes to wake up from various sleep states or from a restart; minutes in which parts of the system seem to get going only to lapse into an unresponsive state where you're not at all sure whether your mouse clicks are registering. When you're going through a lot of restarts (as in, say, when you're trying to diagnose a wireless network problem), that adds up to a lot of pain. Elsewhere, it behaves like XP behaves on a 256MB computer, only it's running in 2GB. Everything is just... slow.

Som jag sagt tidigare önskar jag att jag kunde vara lite mindre förutsägbar och säga något positivt om Vista, men det går bara inte (fast den nya startmenyn är bra, det skall sägas). Pröva Ubuntu istället, som sagt.

Noder och bågar

På senaste tiden verkare jag stöta på grafer var jag än vänder mig - alltså inte grafer som kurvor och diagram, utan sådana med noder och bågar, som illustrerar hur diskreta objekt är relaterade till varandra. Är det inte vem som är vän med vem på Facebook, så är det artister och hur de liknar varandra på last.fm. I och med att grafer är ett så grundläggande begrepp inom datavetenskap är det kanske egentligen ingen överraskning att de blir en del av vår vardag i och med att IT i en mängder börjar bli just något väldigt vardagligt.

Trots alla denna data som har formen av grafer, har jag inte hittat så värst många verktyg för att visualisera dem. Alltså fick jag gräva fram lite kunskaper från min studietid, och har skrivit ett enkelt bibliotek för att skapa någorlunda förståndiga bilder av diverse grafer. Metoden bygger på vad jag förstår är den enklaste algoritmen för grafritning, en metod där man modellerar grafen som ett fysikaliskt system, där noder är elektriskt laddade partiklar (som stöter dem från varandra), och bågarna som fjädrar (som håller dem samman).

När man väl började var det svårt att sluta. Nu har jag grafer över:

I händelse av att någon skulle vilja ha programkoden för egna experiment, så finns den här: SpringsGraph.tar.gz; kräver Python 2.5, pygame samt Beautiful soup.

Fler förslag på vad jag kan visualisera som en graf? Hör av dig.

Dolt tras

Jag önskar att jag kunde säga bra saker om Windows Vista. Jag skulle vilja vara positiv, säga att det fungerar smidigt, att det var värt att vänta på, eller åtminstone att det fungerar ok. Eftersom det känns ungefär lika gammalt, trött och förutsägbart när någon klagar på Microsoft eller Windows som när Tomas Ledin får en sågning, så vill jag gärna gilla Vista. Tyvärr går det inte.

Efter att ha använt Vista närmast dagligen i arbetet under fyra månaders tid, kan jag konstatera att min från början försiktigt positiva inställning till slut fått så många törnar att den liknar en tillplattad ölburk, kvarglömd efter en riktigt vild midsommarfest. Jag har svårt att hitta något som jag egentligen gillar med Vista, eller iallafall något som jag gillar bättre i Vista än i XP. De genomskinliga fönsterramarna är fina. IE7 (som ju egentligen är fristående från Vista) klarar numera ganska mycket av det Firefox alltid klarat.

Under några veckors tid har jag upplevt att det går långsamt att surfa till vissa platser. Känslan är vag, eftersom det ofta är svårt att säga om det är uppkopplingen som är långsam, servern är belastad eller min dator som tillfälligt är upptagen med annat (Vistas favoritsysselsättning är att swappa disk utan närmare förklaring, gärna minuter i stöten och utan förvarning, men jag har å andra sidan bara 2GB RAM i min dator...suck...).

Mina misstankar pendlade mellan kvarlämnade rester av McAfees skämt till brandvägg som Dell förinstallerat på maskinen, och som jag prompt avinstallerade som första åtgärd när jag fick maskinen, och att det helt enkelt var något mer allmänt fel med min nätverkskonfiguration. Ett tag var jag inne på att det i själva verket var Java som var problemet, eftersom Java-applikationer med HTTP-användning, som är något av kärnverksamheten på företaget där jag jobbar, verkade mer exponerade än andra.

Den slutliga ledtråden kom idag, då jag fick information om att åtminstone en annan Vista-användare upplevde precis samma problem som jag. Genom att jämföra tiderna det tog att hämta några statiska sidor med hjälp av Java, wget och en vanlig browser från en och samma webserver från min Vista-maskin, en XP-maskin och en Linux-maskin, stod det klart: Vista hade problem med samtliga program, de andra hade det inte. Det stod även klart att bara enstaka webservrar drabbades av problemet, medan de flesta gav liknande tider i Vista som i XP och Linux.

Rustad med denna information var det inte svårt att googla upp problemet och dess lösning. Hemligheten heter TCP Receive Window Auto-Tuning, en ny funktion i Vistas nätverkslager. Microsoft beskriver problemet lugnt och sakligt så här: Network connectivity may fail when you try to use Windows Vista behind a firewall device. Tyvärr har artikeln helt fel när den påstår:

This issue may occur if the following conditions are true: • You try to make a non-HTTP network connection. • The firewall device has a problem with its implementation of the TCP Window Scale Option that is defined in Internet Engineering Task Force (IETF) Request For Comments (RFC) 1323. By default, the Receive Window Auto-Tuning feature in Windows Vista uses a Window Scaling factor of 8 for non-HTTP connections. This issue does not occur when you try to make an HTTP connection.

Tvärtemot vad ovanstående påstår, så uppstår problemet i allra högsta grad för HTTP-anslutningar. Lösningen är helt enkelt att stänga av auto-tuning:

netsh interface tcp set global autotuninglevel=restricted

Efter att ha kört detta kommando beter sig Vista-maskinen på samma vis som XP och Linux, d.v.s. anslutningarna till de berörda servrarna går åtminstone en faktor tio snabbare. Detaljerna beskrivs i bloggen för Windows Core Networking.

Mitt största problem med hur Vista fungerar här är den totala avsaknaden av transparens: det finns inget som helst som antyder att något egentligen är felaktigt konfigurerat eller trasigt; den enda indikationen är att jag av erfarenhet vet att det skall gå fortare än det faktiskt gör. Jag inser att källan till problemet egentligen ligger hos tillverkare av nätverksutrustning, som inte följer en RFC från 1992, men Microsoft har i min mening här gjort två misstag:

  • Problemet går inte att diagnostisera. Det finns ingen indikation på att något är fel, så att jag som användare manuellt kan avhjälpa det. Andra maskiner i nätverket fungerar felfritt, vilket leder till (den felaktiga) slutsatsen att det är Vista-maskinen det är fel på.
  • De har frångått Postels lag: "be conservative in what you do, be liberal in what you accept from others". Nätverksutrustningen följer inte reglerna (RFC 1323 i det här fallet), men i och med ovanstående, d.v.s. att användaren inte meddelas om var felet ligger, så måste Windows själv kunna åtgärda felet. Att istället misslyckas i tysthet ("fail silently") placerar användaren i en omöjlig situation.

Tyvärr känns detta inte som en engångsföreteelse, utan snarare som något symptomatiskt för hela Vista.

Uppdatering 2007-08-23: Hittade en bättre Microsoft-artikel som beskriver samma problem: A Web site sends data very slowly or drops the data completely when you use Windows Vista Enterprise (artikeln listar samtliga Vista-versioner under "Applies to", även om bara Vista Enterprise nämns i rubriken).

T-shirts

Via Rotacoo: förunderligt enkel och snygg metod att vika T-shirts, kunskap som lever i snittet mellan oerhört oviktigt, fantastiskt praktiskt och ganska nerdigt.