home

2021

Posted:
2021-05-06
Tags:
uppdatering

Underhåller inte min blogg så jättemycket. :) Mitt factorscript som jag skrev för flera år sedan och som genererar bloggen funkar fortfarande.


En uppdatering

Posted:
2019-12-10
Tags:
uppdatering

Över två år sedan jag skrev något på bloggen senast. Jösses vad tiden går. Det är typ ingen som läser så jag orkar inte hålla den uppdaterad. Dessutom är det mesta av det jag skriver trams ändå.


Äntligen klar med tentorna

Posted:
2017-06-07
Tags:
tentor

Idag gick datorlabbtentan och uppsamlingstentan i analys i Matematik I. Analystentan skulle jag egentligen gjort två månader tidigare, men då glömde jag lösenordet till mitt SU-konto, lyckades inte logga in och fick gå hem igen. Pinsamt värre.

Den här dagen höll på att gå fel även den eftersom jag försov mig. Men jag tog en taxi till Kräftriket. 348 bagis kostade det. Väl där kom jag återigen på att jag inte kunde det förbannade lösenordet till SU-kontot i huvudet. Man får nämligen inte välja lösenord själv, utan systemet genererar något slumpmässigit, typ "e84#5PqRS!Z" åt en.

Som tur var var min mobil laddad den här gången och jag kunde återställa mitt SU-konto och få ett nytt lösenord och logga in med det i stället. Puh!

Sedan gick resten på räls. :) På varje tenta ska man klara fyra av sex uppgifter för att få godkänt. På datorlabbtentan löste jag alla sex uppgifter på en halvtimma. Analystentan var ännu enklare och jag blev klar efter bara en kvart.

Visserligen var det enkla tentor och andra studenter blev klar ännu snabbare än mig. Men jag är glad över att ha det gjort. Den dyra taxiresan grämer mig inte det minsta. Det är de 30 första högskolepoängen jag tagit på tio år.


Tiggeriförbud äntligen

Posted:
2017-04-24
Tags:
politik

Läste att tiggerisamordnaren Martin Valfridsson har ändrat sig och nu förordar ett tiggeriförbud. Äntligen! Bara en sisådär 15 år för sent... Det är inte logiskt att det ska sitta tiggare utanför varje liten ica-butik i hela Sverige.


Poliser och mätvärden

Posted:
2016-11-24
Tags:
politik

Såg på Aktuellt att antalet ouppklarade ärenden har ökat. Från 131.000 2011 till 158.000 i år.

Men det är inte att högen med ouppklarade ärenden har ökat som är problemet. Hur den ökar eller minskar har inte med verkligheten att göra. Den ökar när poliser får order om att rapportera extra nitiskt och den minskar när de får order om att de ska avsluta ett visst antal ärenden per månad för annars gör de inget bra jobb.

Antalet ouppklarade ärenden är ett klassiskt exempel på där man väger siffran tyngre än resultatet. Uppenbart har den inget med brottsutvecklingen att göra och uppenbar finns det incentiv för att manipulera den.

Ponera att antalet har ökat extra mycket i ett visst distrik. Vad händer? Jo, rikspolischefen ringer upp distrikschefen och säger "Aja baja. Inte bra. Se till så att antalet minskar!" Distrikschefen kommunicerar direktiven vidare till sina underställda och de gör vad de kan för att minska antalet.

Det leder konkret till att poliser drar sig för att ta emot anmälningar (för det ökar antalet) och avskriver ärenden även om de inte borde avskrivas för det minskar antalet.

Nästa år har antalet ouppklarade ärenden minskat och distrikschefen är jättenöjd. Men betyder det att polisen har gjort ett bättre jobb? Nix, utan snarare tvärtom. Mer möda läggs bara på att frisera statistiken.

Det är anledningen till att chefer som Dan Eliasson är extremt farliga. De kan ingenting om ämnet polisverksamhet och vill inte lära sig. De är så inkompetenta att de inte har möjlighet att avgöra om deras underställda gör ett gott jobb eller inte.

Därför hittar cheferna på meningslösa mätvärden som de tvingar de anställda att uppfylla. På så sätt tror de sig få kontroll över verksamheten. För det är lätt att säga att 158.000 faktiskt är en högre siffra är 131.000.

För många år sedan jobbade jag på testavdelningen på Sony Ericsson i Lund. Vi bedömdes utifrån hur många enhetstester vi producerade per dag.

Gissa vad den policyn hade för resultat?

Hundratals redundanta testfall skrevs. Om en funktion summerade två heltal kunde den ha flera hundra testfall ungefär såhär:

assertEquals(10, numberSum(5, 5));
assertEquals(8, numberSum(4, 4));
assertEquals(8, numberSum(3, 5));
assertEquals(20, numberSum(10, 10));
assertEquals(30, numberSum(15, 15));
assertEquals(40, numberSum(0, 40));
assertEquals(100, numberSum(60, 40));
assertEquals(200, numberSum(120, 80));
assertEquals(300, numberSum(300, 0));
...

Osv i all evighet. Komplicerade funktioner saknade helt testfall eftersom det inte var mödan värt att skriva testfall till dem.

Min poäng är att bedöma anställdas arbetsprestationer baserat på mätvärden nästan aldrig funkar.


Helt horribelt resultat

Posted:
2016-11-09
Tags:
politik

Det är djupt oroande att praktarslet Donald Trump vann. Jag hoppas världen går vidare, men nu är USA:s nästa president en snubbe som tror att växthuseffekten är en konspirationsteori lanserad av kineser.


Ännu dyrare kollektivtrafik i Stockholm

Posted:
2016-05-10
Tags:
miljöpartiet politik

Att de andra partierna vill höja priset på SL-kortet är sedan länge känt. Exempelvis ville de borgerliga partierna chockhöja taxan med 100 kr förra året. Att de föreslår det är logiskt eftersom de inte gillar skatter. Därför vill de att intäkterna ska öka genom ökade taxor istället.

Men att Miljöpartiet nu går med på höjningen på 40 kr är patetiskt. De säljer ut sin miljövänliga ideologi. Effekten av höjningen blir att fler åker bil till och från jobbet och färre använder kollektivtrafiken. För ett parti som säger sig värna om miljön är därför höjningen totalt oförsvarbar.

SL:s intäkter hade istället kunna ökas genom att kommunalskatten höjdes med en promille. Ja, en sådan minimal skattehöjning hade inbringat större intäkter än taxehöjningen med 40 kr.


Åsa Romson petas, vad tycker Gustav?

Posted:
2016-05-09
Tags:
miljöpartiet politik

En del av regeringens politik är bra, en del är dåligt. Men något som gör mig irriterad är hur ofta politiker helt sonika vägrar svara på frågor. Vad som komma skulle fick vi ett smakprov på inför valet 2014 när Gustav Fridolin på frågan om han skjutit något djur svarar "Det tänker jag inte svara på". Vad är det för stil liksom?

Jag undrar hur flata och intetsägande svar vi kommer få höra från Fridolin och resten av gänget när han får frågor om Åsa Romsons petning? Här är några frågor journalisterna skulle kunna ställa till honom:

Om jag hade varit Gustav hade jag svarat såhär:

Några raka svar av Fridolin kan jag dock garantera att vi inte kommer få. Sludder sladder är vad som kommer bjudas på.


How to checkout GitHub pull requests

Posted:
2016-05-07
Tags:
github git

I love people who publish small tips like this! Here is a very good step-by-step instruction on how to checkout github pull requests.


Att vara oförskämd och att vara en våldtäktsman

Posted:
2016-04-02
Tags:
politik

Det här skriver jag angående Stinas blogginlägg eller snarare på grund av att SVT kallde det för hyllat. Jag är avis. Jag har skrivit massor, men SVT länkar aldrig till min blogg. Himla orättvist.

Det jag vill ha sagt är att våldtar man någon på en färja, då är man en våldtäktsman. En kriminell usling som bör bestraffas.

Om man däremot säger "om du suger av mig" till någon som tigger cigg, då är man oförskämd. Man har inte gjort något olagligt och är inte ur ett juridiskt perspektiv skyldig.

Det är inte handlingar på samma skala. En våldtäkt är inte att vara extrajävligt oförskämd och säga "om du suger av mig" lagom oförskämt. Eller omvänt, en våldtäkt är inte mycket kriminellt och att säga "sug av mig" lite kriminellt.

Den ena handlingen är kriminell -- den andra är det inte. Jag vill säga det till alla män och pojkar som någon gång sagt något idiotiskt som "om du suger av mig" till en tjej. Det är oförskämt och värdelöst sätt att ragga på för det funkar inte ens på drängfulla tjejer. Men du är inte någon våldtäktsman!


Tjänster utan gentjänster - Sveriges bistånd

Posted:
2016-02-16
Tags:
politik flyktingar

DN berättar att Sverige kommer satsa c:a 850 miljoner per år i bistånd till Afghanistan de närmaste åtta åren. Samtidigt vägrar Afghanistan att ta emot avvisade flyktingar vilket innebär att alla afghaner i praktiken får permanent uppehållstillstånd i Sverige.

Extra mycket sticker det i ögonen när de afghaner som dömdes till utvisning för den rekordstora gruppvåldtäkten i Mariannelund inte kan utvisas eftersom Afghanistan vägrar sammarbeta.

För att citera Löfvén; "det är inte okej." Varför ska vi skänka miljarder till ett land som inte ställer upp för oss?

Vi är även en nettobetalare till EU och organisationen får av oss c:a 22 miljarder kr per år. För de pengarna tycker jag att vi borde få del av EU:s fördelningssystem och kunna skeppa över några av de 163.000 flyktingar som kom förra året till andra länder. Men så verkar det inte bli och jag frågar mig varför vi ska betala en massa miljarder till EU länder som inte kan göra något för oss?


För mycket om flyktingar

Posted:
2016-02-04
Tags:
politik flyktingar gnäll

Jösses vad mycket min blogg handlat om flyktingar den senaste tiden! Jag är sån. Ett ämne i taget och så blir jag besatt av det. Egentligen har jag många andra intressen också. Som frågesport.


Flyktingar per capita och ansvar

Posted:
2016-01-29
Tags:
politik flyktingar sverige

Här är en bild som visar Sveriges flyktingsituation som jag tycker det är mycket viktigt att alla ser (Högerklicka och välj Öppna i ny flik för att se bilden i full storlek):

Asylsökare per capita

Politikerna säger att det är Sverige och Tyskland som tagit det största ansvaret för flyktingkrisen och tagit mot flest flyktingar. Ja, det stämmer att vi tagit mot flest men det är inte intressant. 100 000 flyktingar till Island är betydligt fler per capita och en större börda eftersom de har en befolkning på 323 100 än om samma antal kom till Kina där det bor 1 357 000 000 människor.

Diagrammet visar att Sverige, proportionellt till befolkningen, har tagit mot tre gånger fler än Finland som i sin tur tagit mot två gånger fler än Tyskland. Danmark, som av regeringen anklagats för att driva en inhuman flyktingpolitik, har bara tagit mot 10% färre än Tyskland.

Personligen tycker jag att vi ska ha en bra flyktingpolitik. Men som det är nu är över 1,7% av befolkningen asylsökande flyktingar vilket är alldeles för mycket.


Mord i Akalla

Posted:
2016-01-19
Tags:
mord akalla

19 januari 2016: Skottlossning i Akalla. Två män skjuter på varandra och en dör. Verkar vara gängrelaterat, men mer information finns inte. Skjutningen skedde invid ICA och Akallaskolan.

13 november 2015: Man skjuten till döds i Akalla. Hände nattetid på Sibeliusgången i närheten av Restaurang Jubba och verkar ha varit någon form av gänguppgörelse. Ingen gripen för mordet ännu.

24 maj 2014: Man i 55-årsåldern knivhuggen till döds efter bråk i en tvättstuga. Båda gärningmannen och offret härstammade från Eritrea och var även släkt med varandra. Detta mord verkar ha skett på norra delen av Sibeliusgången i närheten av Restaurang Torget.

4 februari 2007: 27-årig man körde in i folksamling på ett bröllopp. En 47-årig man blev påkörd och dog senare av skadorna. Helsjukt. Han blev dömd för dråp.

Fler händelser har jag inte att rapportera. Fyra mord på sex-sju år alltså. Det är nog mer än genomsnittet, men inte galet mycket tycker jag.


Spammed port resume error -110 in dmesg

Posted:
2016-01-18
Tags:
kernel linux bugs

This is a bug that has been annoying me for a long while now. The only symptom of it is this message spammed 50 times per second in the dmesg log:

ehci-pci 0000:00:13.2: port 5 resume error -110
ehci-pci 0000:00:13.2: port 5 resume error -110
ehci-pci 0000:00:13.2: port 5 resume error -110
...

The internet finds a few posts from other people who have seen the same problem, such as this one or this or this. The last one is interesting because the commenter claims that he can trigger the bug by connecting a bad usb device.

One thing we can take not of is the number -110. It likely is an errno value for a timeout error. Perhaps the kernel was doing something with the USB device while the cable was unplugged. It tries to write the the device but it is not there so it times out and then a few milliseconds later tries again and so on.

Another interesting number code is 0000:00:13.2. That is the PCI address to the USB port that the message is complaining about. On my computer:

$ lspci -s 13.2
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller

With that address, we can force reset the USB port using the ehci drivers /sys interface:

# Disconnect
$ sudo sh -c "echo 0000:00:13.2 > /sys/bus/pci/drivers/ehci-pci/unbind"
# Reconnect
sudo sh -c "echo 0000:00:13.2 > /sys/bus/pci/drivers/ehci-pci/bind"

That should cause the EHCI driver to reset the port and write messages like these to dmesg:

ehci-pci 0000:00:13.2: remove, state 1
usb usb2: USB disconnect, device number 1
ehci-pci 0000:00:13.2: USB bus 2 deregistered
ehci-pci 0000:00:13.2: EHCI Host Controller
ehci-pci 0000:00:13.2: new USB bus registered, assigned bus number 2
ehci-pci 0000:00:13.2: applying AMD SB700/SB800/Hudson-2/3 EHCI dummy qh workaround
ehci-pci 0000:00:13.2: debug port 1
ehci-pci 0000:00:13.2: irq 19, io mem 0xfe7ff400
ehci-pci 0000:00:13.2: USB 2.0 started, EHCI 1.00
usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb2: Product: EHCI Host Controller
usb usb2: Manufacturer: Linux 4.2.0-18-generic ehci_hcd
usb usb2: SerialNumber: 0000:00:13.2
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 6 ports detected
hub 5-0:1.0: USB hub found
hub 5-0:1.0: 3 ports detected
hub 6-0:1.0: USB hub found
hub 6-0:1.0: 3 ports detected

Which fixes the problem for me.

The message appears to come from line 1051 of the ehci-hub.c file in the kernel sources. It contains some very hairy logic so it wouldn't surprise me if this is a bug in Linux.


Gratis högskola för kvinnor?

Posted:
2015-12-01
Tags:
politik feminism

Jag brukar inte blogga om politik så ofta. Andra är så mycket bättre än mig på att klaga så jag har inte så mycket att tillägga. Men nu har ett statligt utredningsorgan som heter Digitaliseringskommissionen tagit fram en tung rapport där de rekommenderar regeringen att genomföra en mängd åtgärder för att göra Sverige mer... digitalt.

Det mest iögonfallande förslaget är att kvinnliga studenter som tar examen på en it-utbildning ska få sina studielån fullt avskrivna. För en civilingenjörsutbildning på 4,5 år motsvarar det en studieskuld på ungefär 250 000 kr. Här sitter jag med studieskulder som jag kommer få avbetala på resten av livet och tycker såklart att ge kvinnliga civilare 250 000 kr extra bara för att de är kvinnor är orättvist.

Men det är inte det jag ska blogga om utan ett märkvärdigt påstående i den ovan nämna rapporten SOU 2015:91:

Kön har en väsentlig roll inom it-området och påverkar karriärmöjligheter och kvinnors möjligheter att få ett yrke som motsvarar deras utbildningsnivå.

Fritt översatt: kvinnor diskrimineras i it-branschen vilket leder till att de inte får lika prestigefyllda och välbetalda jobb som deras manliga kollegor. Deras ordval är inte en slump: "Kön har en väsentlig roll ... och påverkar karriärmöjligheter ..." Det är viktigt att förstå att det de påstår är att könet är orsaken.

Men deras källa för påståendet är en artikel som heter IT-ingenjörers etablering på arbetsmarknaden. Problemet för Digitaliseringskommissionen är att artikeln inte stödjer deras påstående. Ingenstans finns det belagt att kvinnor skulle diskrimineras i it-branschen, eller att de skulle lyckas sämre där på grund av att de är kvinnor.

Det är en sak att skriva att den genomsnittlige kvinnlige it-arbetaren tjänar mindre än den genomsnittligle manlige it-arbetaren. Det är säkert sant och korrelationsstudier kan bevisa eller motbevisa påståendet. Men att därifrån säga sig veta att anledningen är att kvinnor diskrimineras är ett ofantligt långt steg!


Mina tankar om svensk flyktingpolitik

Posted:
2015-11-10
Tags:
politik flyktingar

Ingen i Sverige har undgått det så kallade flyktingkaoset de senaste månaderna. Flyktingar strömmar i strid ström in i landet och Migrationsverket gör vad de kan för att slussa dem vidare till flyktingförläggningar. Stockholm central är fullt av hjälparbetare från Röda Korset och flyktingar som väntar på att Migrationsverkets bussar ska plocka upp dem.

Vi har ju alltid tagit emot många flyktingar, men den senaste hösten har det slått i taket. Migrationsverkets hockeykurva borde tala sitt tydliga språk. Tyvärr har den inte gjort det och jag börjar misstänka att majoriteten av svenska politiker lider av grav dyskalki. De kan helt enkelt inte tolka den här typen av statistik! Det finns många andra lika skrämmande siffror som Migrationsverket publicerat de senaste dagarna. Bland annat att över 2000 personer söker asyl varje dag och 40 000 sökte asyl i oktober.

Totalt sökte 112 000 personer asyl i Sverige under årets sex första månder. Med andra ord består över en procent av Sveriges befolkning av asylsökande som kom år 2015. Polisen räknar även med ett stort mörkertal och att så mycket som varannan migrant som kommer till Sverige inte söker asyl. Är den uppskattningen korrekt har Sveriges befolkning ökat med över 2,3% på grund av flyktinginvandring! Flyktingströmmen är just nu rekordstor och håller den i sig kommer ytterligare 112 320 personer ha sökt asyl i Sverige innan året är slut. Då skulle c:a 4,5% av befolkning vara nyanlända flyktingar. Hälften av dem (ca 2,2%) skulle leva illegalt utanför systemet och polisen skulle inte ha någon som helst koll på dem.

Statistiken ovan är anledningen till att jag inte tror politikerna kan räkna. Vem som helst kan enkelt verifiera att mina skräcksiffror stämmer. 2160 asylsökande igår x 52 dagar till nyår = 2 160 x 52 = 112 320 personer. Eller fler flyktingar på två månader än Umeå har innvånare.

Personligen är jag mycket oroad över utvecklingen men de flesta politiska partier verkar ta det med en klackspark. Det är extremt överfullt på alla flyktingförläggningar MSB kan bara ordna futtiga 4 000 tältplatser i år så vart ska flyktingarna ta vägen? Utan ordnat boende är det svårt att hålla kroppstemperaturen uppe när köldknäppen kommer.

Jag tycker att Sverige måste stänga våra gränser och att vi inte kan ta in fler personer. Politikerna håller inte med mig utan tror att det här på något sätt ska funka. Men hur? Tvinga folk att inhysa flyktingar eller konfiskera privata oanvända byggnader? Jo, då finns det plats men problemet är att privata byggnader är just privata. Skulle staten börja inskränka äganderätten för att kunna husera flyktingar då skulle det skära sig rejält mellan grupperna. Redan nu skapar flyktingkrisen enorma motsättningar (tänk på alla flyktingbränder), de skulle bli sju resor värre om folk fick sin egendom beslagtagen.

Egentligen hoppas jag på att jag har förbisett något. Att jag har misstolkat statistiken eller satt några decimaltecken fel. Att det inte är så illa som det låter.


How Generic Dispatch Works in Factor

Posted:
2015-02-06
Tags:
generics factor

Generic methods is Factor's version of object oriented programming. In other languages, you have a class, struct or record and attached to that is a set of functions or methods.

class Parser:
    def __init__(self):
        self.state = ...
    def consume_text(self, str):
        ...

p = Parser()
p.consume_text("some text to parse")

Now, if you have used Python for a while you know that its method call syntax is basically just syntactic sugar over a function call with the class instance as the first argument. Kind of like this:

p = Parser()
consume_text(p, "some text to parse")

Complications arise when you have multiple classes that all define a consume_text method. How will Python know which function to dispatch to? Behind the scenes, it has some complicated machinery for determining which function to invoke. Factor has the exact same features, but packaged a little differently.

Continuing with the parser example, here is how you would define it in Factor:

TUPLE: parser state ;

GENERIC: consume-text ( x -- )

M: parser consume-text ( x -- )
    ... ;

{ } parser boa "hello there" swap consume-text

Python dispatches on the first argument given to the function, Factor dispatches on element on the top of the stacks class. If that element has the type parser, then the word M: parser consume-text is called.


1,000,000 times faster computers

Posted:
2014-12-09
Tags:
algorithms chess

What would it buy us? If someone magically makes it so all our computers run a million times faster, what would we be able to do then (or what would become practical) that we can't today?

I think the surprising and pessimistic answer to that question is "not much." The reason, I believe, is that most algorithms that are bounded by cpu power are also combinatorially explosive.

What do I mean by that? Let's take chess engines as an example. They roughly work like this, take the board as it is now, calculate how many points white has and subtract from that the number of points black has. So if everything is equal except that white has its queen left then the positions score would be nine because a queen is worth nine points.

(How to score a position is a huge topic in itself. In these examples to simplify I'll just use the conventional scores for each piece: pawn = 1, knight = 2.5, bishop = 3, rook = 5, queen = 9, king = infinite)

What if black had two rooks as compensation for the missing queen? Since a rook is worth five points the score would be 9 - 5 - 5 = -1. Which means that black would be slightly ahead.

White wants to make the positions score as high as possible, while black wants to make it as low as possible.

To decide what the best move is, the chess engine needs to look at each possible move, calculate the score for that board position, and if the engine's side is white, choose the move that maximizes the score and if it is black, choose the one that minimizes it.

Looking one move ahead isn't so tough. If there is only 30 possible moves, then there is only 30 board positions to analyze. Obviously the number of possible moves depend on the number of pieces on the board. Early in the game the number of moves is higher and later on it decreases as pieces are removed.

But looking one move ahead isn't enough to play chess well. It might lead to the engine choosing a move in which a knight is captured by the queen, leading two a 2.5 points advantage. But then the opponent might recapture the queen with a pawn and trading a queen worth 9 for a knight worth 2.5 would be pretty horrible.

Therefore the engine has to not only look one step ahead but also look at what the opponents best reply is. If there are 30 possible moves, and for each possible move, there is 30 possible replies, then there is now 30^2 = 900 positions to analyze.

I hope it's easy to see that looking two moves ahead also is pretty bad and you need the engine to look as far ahead as possible.

Looking five moves ahead (move + reply + move + reply + move), which would make the engine play at a very basic level, would then require checking 30^5 = 24,300,000 positions. And that is what is meant by "combinatorial explosion" -- a small increase in depth results in an exponentially larger amount of work.

Stockfish analyzes lines as deep as (I think) 20 moves or 30^20 positions. Actually it has various optimizations to keep the number of positions more manageable because 30^20 is probably a larger number than the number of atoms in the known universe. But basically, it's the same in principle.

A good assumption is that the number of board positions Stockfish can analyze is proportional to the computing power it has available. With a million times faster computers, Stockfish can analyze a million times more board positions. Which sounds a lot but let's do the math using Factor!:

IN: scratchpad 30 20 ^ 1000000 * log 30 log / .
24.06195495517307

So a million times faster computers would mean Stockfish would be able to analyze lines 24 moves deep instead of 20.

I think that result is kind of underwhelming. In real life, versus a real human, the result would be even less impressive. In a game today between the world champion Magnus Carlsen and Stockfish, the former would get creamed. A Stockfish able to look 24 moves deep would beat him even harder, but the difference to a human observer would be imperceptible. He would stand no chance at all in either scenario.

At this point in time, the only use extra computing power chess engines has is to fight against other chess engines.

What about go then? I don't know enough about the game to say how go engines could utilize one million times more computing power. Currently, the top players still beat the best engines so it is possible that the extra computing power would tip the game into the engines favor. I know for sure that the engines soundly beat go newbies like me though. :)

Another combinatorially explosive problem is weather forecasting. It's kind of like chess in that you know the state of a regions weather today and you have to calculate the probabilities that it will change in various ways (more rain, sunshine, thunderstorms etc). The similarity with chess is that it becomes much harder to forecast weather the farther into the future the forecast is for.

So if we can currently fairly reliably predict the weather five days into the future, with a million times more computing power, maybe we can then predict it for six days? In my mind, that's another underwhelming result.

So that is my pessimistic thoughts on what a million times faster computers would yield: Not that much, really.


What is Factor good for?

Posted:
2014-12-07
Tags:
factor languages

That's a question that gets asked a lot on the mailing list and in the irc channel (#concatenative on Freenode). Here, I'll try to give my answer to that question.

My view is that languages and computer things in general should be judged on what they are now, not what they can become in the future. Things like Bitcoin, the Julia programming language, LLVM gets a silly amount of attention due to the hyped promises on that they will someday be awesome.

Let's take ClojureScript as an example. The promise is that you will someday be able to write your websites in Clojure and use the cljs compiler to compile to Javascript. Well, last I checked, the javascript files it generated was hundreds of kilobytes large and the compiler took something like 30 seconds to run.

The developers are probably working on fixing that (or they might even already have, in the latest git version), but currently it is not useful tool for writing web sites.

If we apply the same critical mindset when judging Factor's usefulness, what do we get? Well here are some things Factor can do for you today:

And some points Factor is weak at:


Continuations in Factor

Posted:
2014-12-03
Tags:
continuations factor

While debugging a fun crash (#1187) in Factor, I came upon the callcc0 primitive which is how it implements continuations. It is a concept which it inherits from Scheme, where it is known as Call with current continuation.

In Factor, just like in all other programming languages, control flow is mostly linear. Execution moves forward one function (or word as it's called in Factor) at a time. The exception to that is when an exception is thrown. Then an error object is put on the stack and execution jumps out to the nearest exception handling block.

The surface-level syntax looks like this:

[ "hello!" throw ] [ print ] recover

The first quotation (the try) throws the string "hello!" as an error which is then printed out in the second one (the catch). Now try this in the listener:

IN: scratchpad \ recover see
USING: continuations.private kernel sequences ;
IN: continuations
: recover
    ( ..a try: ( ..a -- ..b ) recovery: ( ..a error -- ..b ) -- ..b )
    [ [ [ catchstack* push ] dip call catchstack* pop* ] curry ]
    dip ifcc ; inline

It shows you the definition for the recover word. With this knowledge we can directly substitute the call to recover with its definition:

[ "hello" throw ]
[ print ]
[
    [
        [ catchstack* push ] dip
        call
        catchstack* pop*
    ] curry
] dip ifcc

And since we know the definition of the try and catch quotations we can further rewrite that as:

[
    CONTEXT-OBJ-CATCHSTACK context-object push
    "hello!" throw
    CONTEXT-OBJ-CATCHSTACK context-object pop
] [ print ] ifcc

In the examples below I won't bother with the intermediate step and always simplify as much as possible. Hopefully that won't make the text to hard to follow.

As an aside, this is how Factor differs from most conventional languages such as Java or Python. In those languages you have the try-catch statement, for loops etc and those are in a way "magic". For example, if Python didn't provide you with a try-catch, you wouldn't be able to write one yourself, using only Python. In Factor you can, as this demonstration of how the try-catch is built shows.

The ifcc word is very powerful. Likely the most powerful one in the whole Factor system. When it is called, it takes a snapshot of the whole virtual machine, makes an object of it and passes it to the first quotation. That quotation then either runs to completion or throws an error, in which case the second quotation is run.

Now, let's focus on the throw word and see what we can peel of from it:

[
    CONTEXT-OBJ-CATCHSTACK context-object push
    "hello!"
    ERROR-HANDLER-QUOT special-object call
    CONTEXT-OBJ-CATCHSTACK context-object pop
] [ print ] ifcc

As you can see, throwing an exception is nothing more than calling a special quotation in the vm with the error object on the stack. But why stop here? ERROR-HANDLER-QUOT can be inspected and we can rewrite the call to that quotation with its definition:

[
    CONTEXT-OBJ-CATCHSTACK context-object push

    ! This part is throw
    OBJ-CURRENT-THREAD special-object error-thread set-global
    current-continuation error-continuation set-global
    "hello!" original-error set-global
    "hello!" rethrow

    CONTEXT-OBJ-CATCHSTACK context-object pop
] [ print ] ifcc

So all throw did was set some dynamic variables in the global namespace and call rethrow. Again let's do the same substitution of the rethrow word:

[
    CONTEXT-OBJ-CATCHSTACK context-object push

    ! This part is throw
    OBJ-CURRENT-THREAD special-object error-thread set-global
    current-continuation error-continuation set-global
    "hello!" original-error set-global
    "hello!" save-error
    "hello!" CONTEXT-OBJ-CATCHSTACK context-object pop continue-with

    CONTEXT-OBJ-CATCHSTACK context-object pop
] [ print ] ifcc

(We know that the catch stack is not empty so this rewrite is significantly simpler than the real definition of the rethrow word).

This blog post ends kind of abruptly here. :) I know it's awful of me, but unless I learn more about Factor's continuations I can't say much more.


Reboot of my blog!

Posted:
2014-11-24
Tags:
factor blogging

I was kind of unhappy with my previous blog at http://bjourne.blogspot.se/. Mostly because I wanted to have it on my own domain. And also because I want to have full control. Selecting among the templates Blogspot provides you just isn't interesting enough.

So I wrote my own static blog generator in Factor. What you see in front of you is the post I wrote while I was writing the software.

Factor is a concatenative language, so it is very well suited for expressing batch on the form "first this, then that, then something" succintly. My static blog generator is a batch job involving the following steps:

The last step, which I perform manually, is to copy the tre in build to a directory on my web server that serves static files.

Syntax Highlighting

What I like about the setup is that it automatically performs syntax highlighting. Here is a Factor snippet:

: generate-blog ( dir -- )
[
    [ "build" delete-directory ] ignore-errors
    "posts" make-pages "build" write-pages
    "chrome" "build/chrome" copy-tree
    "build" [
        { "sh" "-c" } scp-path "scp -r * %s" sprintf suffix try-process
    ] with-directory
] with-directory ;

And a Python one:

def simbets(count, bet_size, win_prob, capital):
    for n in range(count):
        won = random() < win_prob
        capital += bet_size if won else -bet_size
    return capital

Great!

Remaining problems to solve

Syntax hilighting is nice, but sometimes you wish to turn it off for some verbatim blocks. I think due to a bug in Python-Markdown turning it off isn't possible; guess_lang=False doesn't work? #374. A workaround is to explicitly mark the block as plain text using :::text.

Another limitation seem to be that syntax highlighting produces good colorizations for some languages but not for others. For example, here is the same code piece highlighted first with elips:

(unless (boundp 'org-html-cvt-link-fn)
(error
    "Requires a different version of org-mode.  See README.org"))

and then with scheme:

(unless (boundp 'org-html-cvt-link-fn)
(error
    "Requires a different version of org-mode.  See README.org"))

Missing features

Some non-essential features are missing too. Like I want you to be able to click on tag words, come to an url like /blog/factor and find all posts with that tag. Maybe I'll add those features in the coming days or maybe I won't. I don't think people often browse posts on someones blog.

Comments is something I'll never add. It's way to much work keeping the spammers away and the legit comments you get are incredibly few. People can mail me if they want to discuss.

Pagination is a maybe feature. The index page contains all my blogging for the last two years but is still easily scrollable. I just don't blog often enough. :)


Kom igen nu!

Posted:
2014-09-13
Tags:
politik

Kom igen nu Lövén, kom igen nu Sjöstedt, kom igen nu Miljöpartiet, kom igen nu svenska folket! Det skulle vara så himla gött med ett regeringsskifte nu på söndag. Jag är så trött på att se Reinfeldtfjanten sabba Sverige.


Torsdags

Posted:
2014-02-23
Tags:
bra-dagar

Förra torsdagen var en riktigt jäkla bra dag! Jag löste en knivig bugg på jobbet, fick kontakt med nya trevliga personer och ett slags jobberbjudande. Fast jag har redan jobb såklart. Sådana dagar är bra att komma ihåg när man går igenom några mindre bra dagar.


Referenser

Posted:
2014-02-18
Tags:
arbete

Varför är det så svårt med referenser för? Räcker det inte med att man jobbar bra, måste man vara bästa vän med alla också?


Exception Handling Best Practices

Posted:
2013-12-04
Tags:
programming exceptions

This seem to be the absolutely hardest topic for otherwise smart programmers to get. No matter what language or job I've had, most of my colleagues have failed miserably at handling exceptions correctly. What I'm talking about is code like this, following the Pokémon Exception Handling pattern (gotta catch 'em all!):

try {
    ...
} catch (Exception ex) {
    // Log and pretend nothing happened.
    Log.LogException(ex);
}

The best programmers understand why the above is wrong. They know what fail fast means and understands the Samurai Principle. 99.9% of all don't. They look at the above code and say "What!? That's exactly how you should write your code! Error handling is important!" Those people are the reason why programs fail for random reasons, why most code bases are messy and hard to work with. Below I've compiled a list of sources that explains why the above code snippet is bad. Most programmers never change their habits, but for some there is hope:


Ett moraliskt dilemma

Posted:
2013-10-15
Tags:
dilemma godis

I Ica-butiken i Akalla har de fått in ett tillfälligt parti lösgodis som bara kostar 2.90 kr/hg. Det är det lägsta lösgodispriset jag sett på åratal. Nästan helt oemotståndigt billigt! Å andra sidan åt jag fem mazariner och en mycket krämig chockladpudding igår. Kanske skulle man bara gå in och ta en titt. Säkert är det redan någon som köpt upp hela partiet i syfte att sälja det vidare till godisbutikerna.


I natt jag drömde

Posted:
2013-10-03
Tags:
dröm

Att jag var en gästskådespelare i The Big Bang Theory. Det var en ganska lustig dröm. Vi spelade in nya avsnitt som höll en mycket högre klass än de avdankade repriser som Sexan kör med.


Förbannade SL

Posted:
2013-09-25
Tags:
gnäll sl

Hur svårt kan det vara att ta fram en (1) fungerande reseplanerare? Testar ni ens om skiten funkar innan ni lägger den live? Eftersom den just nu inte går att använda från en androidtelefon är det svårt att tro det. Skit i bootstrap, glossy knappar och cp-autocomplete som era neandertalkodare ändå inte kan få rätt. Två textrutor där man kan fylla i till och från samt en knapp med texten "sök resa". Det räcker! Eller fixa ett api till er linjedatabas så att man själv kan köra ett interface till datan och slippa befatta sig med er inkompetens era jubelamarörer.


Det är så

Posted:
2013-09-09
Tags:
arbete

Så det är en kille på jobbet. Han glänser mer än mig. Jobbigt va. Fast han är väldigt trevlig också. Ovan situation för mig med kanske bara lagom bra självförtroende. Men jag gör mitt bästa. Tänker att resultatet och att alla trivs är det viktiga. Inte vara småsint som en del gamla kollegor vart mot mig. Skulle nog behöva mer tid att vara själv och "andas ut".


Vissa dagar

Posted:
2013-08-20
Tags:
arbete

Då är det bara så. Som idag är jag nedstämd och ledsen utan anledning. Visst, dagen startade inte så bra. Blev väckt halv fem av att något smällde till i hallen. Var bara tidningsbudet som slängde in dn. Jag har inte ens någon prenummeration. Antingen får jag någon annans tidningar eller så har de bestämt sig för att försöka övertyga mig om att prenummerera. Det funkar inte.

Rummet på jobbet är alldeles för varmt och kvavt. Det var bättre under semestern då jag slapp dela det med en kollega. Även om han är trevlig. Behöver fler arbetsuppgifter också. Sitta och rulla tummarna under omställningstiden passar inte mig.

Dagens goda nyhet är att jag hittade axelbandet till gitarren. Fast tom det är träligt för då får jag inte chans att köpa något nytt.


Stormy Linux

Posted:
2013-07-09
Tags:
linux

The kernel that ships with Ubuntu 13.04 is defective. There is something wrong with the 3.8.x series of kernels and it affects people using the open source radeon audio driver. The solution I've found is to upgrade to 3.9.x and add "radeon.audio=1" to the kernel parameters line. Unfortunately the broadcom bcm43xx driver isn't compatible with those kernels and fails to compile. Aaah. Just "radeon.audio=1" on a 3.8.x kernel causes it to panic at bootup.

Also, if you're having video that mysteriously plays at a much higher framerate than usual, it's probably the same problem.

There has also been other weird kernel panics I've yet to investigate. Both at startup and shutdown. Something is absolutely not right with this Linux version.


Dungeon Crawl är otroligt

Posted:
2013-05-20
Tags:
dungeon-crawl

Spöade Dungeon Crawl i helgen :-). Min minotaurbärsärk tog sig hela vägen ner till Zots kammare och tillbaka. Sjukt skönt att äntligen få det klart. Tyvärr har det skett på bekostnad av diskandet, städandet, dammsugandet med flera hushållssysslor. De får jag ta itu med den här veckan.

Uppdatering 2014-11-26: Nu har jag även klarat av Dungeon Crawl med en Gargoyle Berserker. Han fick med sig 15 runor också.


Tillbaks i Tjockhult

Posted:
2013-03-31
Tags:
stockholm

Det är något alldeles speciellt med att komma hem till storstan. Allt folk, de labyrintlika fångarna i centralen, lukten av damm i tunnelbanan. Det är rogivande eftersom det är bekant. Jag är säker i civilisationen. Nu ska jag hem, dricka mjölk, äta sallad och spela gitarr. Sedan sova.


Blogging with emacs, org-mode and org2blog/atom

Posted:
2013-03-31
Tags:
blogging emacs

This article describes my experiences trying out various emacs module for managing your blog.

My requirements for a great blogging solution for emacs should support the following:

Here are the various blogging solutions I tried out:

Blogging with org-mode and org2blog

org-mode is great for dealing with tabular data. I use it all the time for time series data, like keeping track of my weight, my score in Vem vet mest? and my work hours. It's also not bad for writing todo lists of all kinds. The org-mode syntax does not appear to be Markdown, but something close enough.

My information about org2blog comes from an old blog post written by Irreal.

Apparently, blogger uses the Atom API, so what I need is something called Org2BlogAtom.

The first problem is how to get org-mode to export to html with syntax highlighting. I'm often inserting code snippets in my posts, so getting that to work correctly is definitely a must. Two things are needed for that to happen:

  1. htmlize.el need to be installed.
  2. .emacs must contain (setq org-src-fontify-natively t org-export-htmlize-output-type 'css)

Then just press C-c C-e h to generate an html file of your org buffer. That's the first step, the next is to get the generated html file published online on my blog.

There are two different versions of org2blog, a fact that struck me after some googling. One for posting to Wordpress blogs and a different module for Blogger ones. Since I'm currently with the latter, what I need is org2blog/atom which is found at the sparsely documented git repo.

It depends on g-client, which has its own EmacsWiki page, but no obvious way to download the module. Checking out and building the Subversion reposity seem to have worked:

svn co http://emacspeak.googlecode.com/svn/trunk/lisp/g-client/
cd g-client
make
cp g-cus-load.el* g.el* gcal.* g-utils.el* g-app.el* gblogger.el* \
    ~/.site-lisp/

(~/.site-lisp/ is on load-path ofcourse).

org2blog/atom itself has an installation procedure that depends on "elinstall" which seem to be a custom installation module created by same author. But copying all elisp files from the ./atom and ./common to my ~/.site-lisp directory sems to work.

Next error "Requires a different version of org-mode. See README.org". The one shipped with emacs 24.3 isn't enough? But I think it should be since emacs 24.3 was released after the last commit was made to the org2blog repository. Let's check the code.

(unless (boundp 'org-html-cvt-link-fn)
(error
    "Requires a different version of org-mode.  See README.org"))

Aha! So where does org-html-cvt-link-fn come from? After some heavy googling, I think the answer is that it was defined in a file called org-html.el that is no longer part of org-mode. Additionally, there is a mailing list thread which seem to imply that the function is used for converting links when exporting to HTML. Commenting out the references to it in main.el in org2blog helps – I should be able to do without that features.

Next error:

File error: Cannot open load file, org2blog/common/l2r

This time the missing dependency is tinydb/persist. Installation is quick:

git clone http://repo.or.cz/r/tinydb.git
cd tinydb
cp *.el ~/.site-lisp

Hopefully, I should be able to do without that feature. And finally! I'm able to load org2blog using this configuration:

(load-library "asynq")
(load-library "persist")
(load-library "l2r")
(load-library "g")
(load-library "main")
(require 'org2blog/atom/main)

But running M-x org2blog/atom:post emits yet another problem:

Symbol's function definition is void: org-mode-p

Googling for it produces a pull request with a patch for a different project that I think I can adapt. Easily fixed by commenting out these two superfluous lines in main.el in org2blog:

(unless (org-mode-p)
(error
    "Only useful in an org-mode buffer"))

Then I get to the next error:

org-export-as-html: Wrong type argument: stringp, t

At this point, someone wiser than me would probably give up. Conclude that org2blog/atom isn't salvagable and that there's better uses for ones time. But.. I'm not that person. What's required is another simple change in main.el:

(org-export-as-html nil nil))
;;  (org-export-as-html nil nil nil t nil))

The next error message is encouraging, because it seem to complain about a missing configuration variable which makes me think the final is near:

let*: Symbol's function definition is void: gblogger-blog->posting-url

The symbol is a function that is called with the return value of a function call to gblogger-ensure-blog. There are no search results for the symbol name. I'm done with org2blog/atom, at least for now. org2blog/atom probably needs to be rewritten anyway because it needs to be updated to org-mode's and Bloggers latest API changes. g-client could probably be salvaged though.


Glada kiosken har stängt

Posted:
2013-02-26
Tags:
akalla

Kanske har den slätt igen för gott? Visst handlade jag nästan aldrig där, men den var trevlig att ha. Kyldisken som den nye ägaren installerade hade potential. Fast kaffet kom fortfarande från den äckliga igenkalkade kaffemaskinen den förra ägaren hade. Därför gick man hellre till Ica för att köpa billigt kaffe.


Vaknade på fel sida

Posted:
2013-02-12
Tags:
sömn

Vaknade på fel sida idag. Bokstavligt talat. Axeln och vänstra ryggsidan var full med sängstreck från fel sida. Tror det var för jag körde bil igår och det rubbade min rytm för jag sov dåligt också. Hoppas resten av dagen blir bättre.


Bra frisör

Posted:
2013-01-29
Tags:
frisör

Det är inte ofta som jag blir nöjd efter att jag gått och klippt mig. Men frisörskan på Hon & Han i Kista galleria gjorde ett strålande jobb. Dit ska jag gå nästa gång också.


A Beautiful Mind

Posted:
2013-01-03
Tags:
film hollywood

Bra film om John Nash om än lite sötsliskig. Blir väl ofta så i hollywooddokumentärer. För gemene man kanske inte Nashs teorier är speciellt intressanta och därför fokuserar de på känslor istället.


Högintensiv intervallträning

Posted:
2012-12-21
Tags:
träning motion

Har börjat med min egen variant av träningsformen högintensiv intervall träning den här veckan. Jeflar vad effektivt det är om hur utpumpad man känner sig efteråt är en indikation på hur bra träningen är. Konceptet är busenkelt, man varvar korta spurtar med ett par minuters återhämtning och repeterar ett fåtal gånger.

Såhär gör jag: Först 60 sekunder då jag trampar så snabbt jag kan med högsta motstånd på motionscykeln eller springer så snabbt jag kan på ett löpband. Pulsen ökar då till 170-180 slag/minut vilket är mitt max. Efter den minuten, ett par minuters vila eller sakta lunkande tills pulsen återgår till 120-130 och jag känner mig fit-for-fight. Sedan 60 sekunder på maxintensitet. Repetera sex gånger. Finns en massa guider på internet som förklarar det mycket bättre än vad jag kan.

Det låter inte så jobbigt eftersom det bara är totalt 60 * 6 sekunder, eller sex minuter som man tar i, men tro mig, det är krävande. Efter ett sånt pass är jag helt slut i kroppen och kan knappt stå på benen. Det bästa med det är att det är tidseffektivt. Ett pass tar knappt 30 minuter så det borde inte vara några problem att hinna med att träna några gånger i veckan.


The "Cannot add an entity with a key that is already in use." error

Posted:
2012-12-18
Tags:
c# debugging

If you are getting the above Linq2sql error, here is the first thing you should do. It will not solve the problem for you, but it will greatly help you when tracking down the root cause:

try
{
    db.SubmitChanges();
}
catch (DuplicateKeyException dke)
{
    Console.WriteLine(
        "DuplicateKeyException caused by {0}!",
        dke.Object
    );
    throw;
}

Yeah I know, it's not much. :) But this way you know the entity instance that is caused the problem which will make your code much (much) easier to debug.


Mer Jujutsu

Posted:
2012-12-17
Tags:

Nu har jag gult bälte! Wohoo!! Fast jag måste vänta tills mitten av januari innan terminen börjar igen. :) Det ska bli görskoj.


Självklart...

Posted:
2012-12-10
Tags:
i-landsproblem vem-vet-mest

När man väl lyckats sparka igång sig själv och tagit sig ner till jujutsun, ja då har man glömt kläderna hemma. Asch! Dessutom har nobelfesten tagit över Vem Vet Mests programtid. Vilka i-landsproblem man har.


My CV Online

Posted:
2012-10-28
Tags:
cv html css

I have made an online cv site for my resume. I think it is pretty good looking and it is much funnier to style it using HTML and CSS than with boring Latex :). It appears to look good on handheld devices because I'm using a "responsive design" framework. When I get to work at Monday I'll test how it looks printed too.


Alla vet vad pilatus är för något

Posted:
2012-10-25
Tags:
vem-vet-mest

Alltså, man kan inte kugga någon för de uttalar ett ord en endaste bokstav fel. Rickard Olsson uttalar själv ortsnamn och efternamn helt felaktigt flera gånger i nästan varje program av Vem Vet Mest. Ibland är reglerna helt ologiska. Dessutom borde det finnas någon spärr så att inte en person skickar en fråga på samma person flera gånger i rad eftersom det är orättvist.


Kära svt...

Posted:
2012-10-12
Tags:
vem-vet-mest

Kan inte ni få Rickard Olsson att pladdra lite mindre? Programmet heter ju faktiskt Vem vet mest? och inte Rickard intervjuar ointressanta personer. Visst, hans salongskvitter och personliga anekdoter är måttligt roande, men det hör inte hemma i en rafflande final. När det är nästan dött lopp mellan finalisterna och de ivrigt väntar på nästa fråga, då kan man inte ställa sig och kallprata med en av dem. Vi som följer programmet är mest intresserade av att få höra frågor och svar och inte av Rickard Olsson.

Uppdatering: Tekniska muséet ligger inte på Djurgården!!! Frågan var FEL och Daniel borde inte åkt ut! Fixa faktakollen SVT!


Den nya policyn

Posted:
2012-10-05
Tags:
arbete policy

Vårt företag har nyligen fått en ny policy gällande sociala medier. Vårt och vårt... Företaget som är snällt nog för att betala mig för mitt arbete. :-) Jag och andra måste därför tänka oss för innan vi postar vad som helst på våra bloggar. Inte vet jag vad det var som föranledde den nya policyn, hoppas det inte var min blogg i alla fall.

Inte lämna ut några känsliga personuppgifter eller vara illojal mot min arbetsgivare. Det är svårt för ibland måste man bara få tankarna ur sig så man inte exploderar. Jobbet är ganska frustrerande ibland. Chefer som borde vara trevligare mot mig osv. Ibland känns det som om man absolut inte får säga att världen inte är den bästa av alla tänkbara världar...


Ett nytt bottenrekord på vågen

Posted:
2012-10-02
Tags:
vikt

Fördelen med att ha diaréer och inte kunna äta är att man minskar i vikt snabbt. Drygt 67 kilo sa vågen senast jag kollade. Tyvärr är det väl mest vatten man blir av med men fettet sitter kvar så kilona kommer tillbaka. Fast lite roligt är det ändå. Då kanske det ändå går att hinna ner till 65 kg innan året är slut.


You too can have beautiful Linux fonts

Posted:
2012-09-30
Tags:
fonts linux

Last Thursday, when I wrote my blog post, I was so irritated about Ubuntu's bad font rendering I didn't know what to do. The TrueType bytecode interpreter patents have expired since long ago and I'm using mostly the same fonts on Linux and Windows so there was no way to explain Windows superior font rendering other than that it actually does a better job.

That, I cannot stand. Linux should work at least as well as Windows on everything, especially when it comes to something as crucial as font rendering.

I set out on a deep diving quest into Linux font rendering infrastructure trying to find out exactly what was wrong with it. Turns out I wasn't the only one dissatisfied with the way fonts looked. I prefer Window 7's font rendering which, to my eyes, appear much crisper and slender than how fonts look in Linux.

Take a look at the screenshots with the Georgia font below, first how it is rendered in Windows 7:

Georgia font in Windows 7

And how it looks in Ubuntu:

Georgia font in Ubuntu

The difference is considerable. To my eyes, Ubuntu's version is much to thick. While both systems use almost the same technology to render the glyps, the reason for the big difference in appearance becomes clear when you zoom up:

Zoomed up

Ubuntu's rendering is on the left and Windows on the right. Both use subpixel anti-aliasing, but Windows variant is much lighter. And since I prefer the Windows rendering, I set out to find what configuration knob you can tweak in Ubuntu to get the same appearance. Turns out there is none. Using KDE's font configuration GUI, you can change the true type hinting from medium or full to slight which gives ligher glyphs but distorts their shape to much. Especially Verdana and Arial seem to be dependent on lots of hinting to render properly. You can also edit your ~/.fonts.conf file and change the LCD filtering style FreeType uses. Unfortunately, it seems like that setting doesn't work correctly, because setting it to something other than lcdnone or lcddefault has no effect. lcdnone disables LCD filtering entirely so you get severe color fringes around the text.

Then I tried hacking the FreeType sources which was easier done than expected because the only thing I had to change was few lines like it is described on this wiki page. It didn't provide the results I desired though it just made the text more gray than black, not crispier like in Windows.

Then I luckily found a site called infinality.net on which someone had already published patches to FreeType and Fontconfig to improve font rendering. After twiddling with them a bit and adding a PPA repository I got some really impressive results:

Infinality Georgia font

This is with USE_STYLE = "WINDOWS7LIGHT". Infinality has many other font rendering modes, but this is the one I like the most. It is not exactly how it looks on Windows 7, but very close. I suspect the remaining differences is caused by subpixel glyph positioning which Windows 7 uses but Xorg doesn't support. The difference is even greater when it comes to smaller sans serif fonts, which are used for desktop GUI elements. Often they are rendered as black on gray background.

Reddit comparison

Ubuntu's default on the left and Infinality's Windows 7 Light rendering on the right. I think the improvement in readability is huge here. There is no blur nor extraneous thickness in the menu or address field. The glyphs are well balanced so that no character looks heavier than the other.

So use the Infinality patches! They are great and you will be very pleased with the result.


A major face lift for my blog

Posted:
2012-09-27
Tags:
blogging fonts

I guess I just got tired of the extremely simple design I previously used. The biggest change is the switch from the sans serif font Verdana to Georgia. In a way, that has rejuvenated my interest in writing because reading Georgia tastes much better. The original reason why I choose Verdana many years ago is a little embarrassing. It was the only font that rendered well without anti-aliasing on my Linux machine. :-) Hopefully Georgia will look decent too. It certainly does on Windows and mobile devices. The next thing on my list of things to fix on my blog is to somehow figure out how I can post using Markdown. It is a real pain to try and write well structured html on a phone. That's why I seldom bother to insert paragraph breaks.

Update: Georgia still doesn't render well with or without anti-aliasing on Linux. I'm trying to not get frustrated and investigate what the cause may be.


Host host

Posted:
2012-09-26
Tags:
gnäll

All sitter och snörvlar, hostar och baksuger in snoret i munhålan runt omkring mig. Vidrigt är det. Jag hatar verkligen att åka tunnelbana den här tiden på året. Folk har inte vett på att stanna hemma utan självskt utsätter alla andra för deras smittsamma sjukdomar.


Sänkt bolagsskatt - så påverkas du

Posted:
2012-09-24
Tags:
politik

Så lyder Metros rubrik och jag tänker att idioterna måste fan skoja med mig. Jag äger inga bolag och har ingenting att tjäna på det. Själv drabbas jag först när sl återigen bestämmer sig för att chockhöja priset på sl-kortet för att de har för lite pengar. Metro får vinkla saker bäst fan de vill, men den här nyheten handlar bara om att ta från det offentliga och ge till bolagsägare.


Fy fan vad svårt det är att banta

Posted:
2012-09-20
Tags:
vikt

Jag har den senaste tiden blivit mycket mer seriös i mitt försök att bli smal. Gissningsvis ligger jag ungefär fem sex kilo över min idealvikt. Så mycket mer väger jag i alla fall än mma fighters som är lika långa som mig.

Nu kom jag av mig... Det tar hur mycket tid som helst att rätta en felstavning när man författar ett blogginlägg på tunnelbanan på väg hem från jobbet. Så här knepigt ska det inte vara, det måste finnas ett bättre sätt....


I mål!

Posted:
2012-09-16
Tags:
träning motion

00:25 ;-)


Bra jobbat Björn!

Posted:
2012-09-15
Tags:
motion

Klockan är nu 23:23 och jag har promenerat samma sträcka som Stockholm Halvmaraton sedan klockan sju. Jag sitter på ett ölställe vid Södra Station och skriver det här samtidigt som jag smittar på en öl. 18,5 kilometer avklarade, 2,5 kvar. Det här varit jobbigt men snart är det avklarat och det kommer kännas hur skönt dom helst. Nej, nu måste jag slänga i mig ölen och fortsätta! Annars kanske jag blir sittande.


Innocence of Muslims

Posted:
2012-09-13
Tags:
politik

Det är helt makalöst att idioter kan få för sig att mörda för en så illa producerad och tafatt film. Vem som helst med en sketen kamera och en vilja att trolla muslimer kan tydligen sätta världen i brand. Gör en film som påstår att muslimer är våldsamma idioter, få en massa muslimer att beté sig som våldsamma idioter. Mission accomplished. Dock synd om kopterna i Egypten som beskylls för att ligga bakom filmen.


Punktlig från jobbet

Posted:
2012-08-23
Tags:
arbete tider

Det känns lite ovanligt... Jag promenerade från jobbet till Rådhuset i så god tid att jag fick vänta flera minuter på tåget. Just nu har jag tillräckligt med tid för att sitta i Akalla och njuta av skymningssolen och skriva det här blogginlägget. Ska strax gå till jujutsun men inte riktigt än för för tidig vill jag inte vara. ;-) Sitter nära en tänt som bjuder kiss på gott så att de stannar och pratar med henne.


5066

Posted:
2012-08-23
Tags:
motion

5066 steg idag. Ganska bra för att ha knatat runt i innerstan en stund.


Veckans klyscha

Posted:
2012-08-21
Tags:
politik

För kvinnor mitt i karriären som har svårt att få livspusslet att gå ihop. Jävla rutavdragerskor.


Väntevärde

Posted:
2012-08-14
Tags:
sl tider

När jag brukar åka tunnelbanan går tågen var tionde minut. Väntetiden är därför mellan 0 minuter i bästa fall och 10 minuter som värst. Men de senaste tre gångerna har jag fått vänta maxtiden varje gång. Irriterande.


Feltolkningar

Posted:
2012-07-15
Tags:
feltolkningar

En tjej ställer sig upp i bussen och nyper sin sittande pappa i kinden och utbrister "Är du kåt pappa?" Jag hoppas verkligen hon sa "våt". Hugianamej.


Konstiga reklamslogans

Posted:
2012-06-25
Tags:
reklam

Bara var åttonde banan är god nog att bli en Chiquita. Jaha, vad gör de med resten av bananerna då? Slänger de dem? Vilket ohyggligt resursslöseri isåfall. Jag ska aldrig äta chiquitabananer igen. Nä den här sloganen får definitivt underkänt.


Paraployer

Posted:
2012-06-25
Tags:

Paraplyer, likt liggunderlag och förband, är prylar som man aldrig har när man mest behöver dem. Det kvittar hur många företagslogotypade regnstoppare man samlar på sig. När skyarna pissar ner floder har de alla flytt hemmet. Under de nederbördsfria delarna av året ligger de i ett hörn i hallen och samlar damm.


Let's save youtube-mp3 from google

Posted:
2012-06-20
Tags:
youtube google

A lot of us likes to listen to music on youtube. A great service that helps with that is www.youtube-mp3.org. It allows you to convert videos on youtube that are usually in flv format to much more listener friendly mp3 files. There are competing sites out there that perform the same function as youtube-mp3, but none of them are as good and most of them are spamming multiple pages of ads at you, which youtube-mp3 definitely does not.

Unfortunately its existence is being threatened by Google's lawyers. See this disturbing call for help. I don't think the site could in any possible way be of any harm to Google or their advertising revenue. Instead, Google should be pleased because youtube-mp3 probably saves them a lot of bandwidth as you can relisten to the music without having to download the videos multiple times.

Google has, or had, lots of useful API:s. Such as AppEngine, Google Maps, GMail, Google Docs and many more. But as time goes on, it seems their acceptable use policy for them gets narrower and narrower. First they had a soap api for search which worked exactly like google.com. Then they handicapped it so that it would only return a maximum of about 32 results in a completely different order than what google.com gave. But that wasn't enough so they then replaced it with their totally nerfed custom search api. Apparently they decided that their search results could only be displayed inside correctly google branded search boxes and without any possibility of escaping sponsored results.

Now, if that was the idea all along, then why didn't they start out with those extremely limited usage conditions? Which brings us back to YouTube, which didn't use to have unskippable video ads, sponsored recommendations and overlay video ads. It was all crept upon us. One might counter with that they can do whatever they want with their site, which is true but still seem unfair to me. YouTube would not be very interesting without all the millions of videos created by the users and they are not Google employees. Maybe Google thinks they have reached critical mass and they are now so big that they can implement more restrictions without worrying about a competitor taking over. It may be true unless there is an easy way to transfer videos off youtube and on to another site. But they would never have reached the #1 spot they are at today without the work of millions of users.


The KDE Rant

Posted:
2012-06-14
Tags:
kde rant gnome

I guess KDE will be my new desktop now that GNOME has gone fucked. For some reason both gnome-shell and Unity works slow as hell with my 3d drivers. KDE works decently though, so it can't all be fglxr's fault. Plus, I was kind of content with classical GNOME without any of the bling bling and semantic desktop junk.

KDE 4.8.3 does impress - animations are smooth and there are lots of shadows in all the right places. It has lots of features and lots of places where you can customize things. I guess that that is both its greatest advantage and drawback:

Everyone got to rant, this was my turn.


Uteliggare...

Posted:
2012-06-02
Tags:
politik

Gör mig så jävla illa berörd. Oavsett vad så är samhället så jävla sjukt när folk tvingas sova utomhus när regnet står som spön i backen. Jag blir förbannad på det sätt då förbannelsen lever av sig själv! Vad är det för värld vi lever i där sådana missförhållanden får fortgå?


Regnet

Posted:
2012-06-02
Tags:
regn

Nu har det regnat i fyra dagar i streck. Det bara pissar ner och verkar aldrig ta slut. Jag är så nöjd med att inte ha någonting att göra idag utan bara kan sitta hemma och dega. Imorgon bär det av till Turkiet!


Rage Against the Machine

Posted:
2012-05-30
Tags:
musik

Satt och lyssnade på ratm idag med hörlurar på på jobbet. Av någon anledning kändes det som jag var tillbaka i gymnasiet i Angered de åren då det begav sig. Jag hade alla deras album som jag köpt med barnbidragspengarna jag fått tigga mig till av mamma. Bärbar cd-spelare hade jag också. Den var otroligt klumpig och stor med dagens mått mätt. På tentorna hade jag den på och lyssnade på Rage för att stänga ute världen. Jag var ett stort ensamt fan som de hjälpte genomlida gymnasiets kval.


Onsdag 23:e maj

Posted:
2012-05-23
Tags:
politik

Dop intresserar mig icke. Men för käringarnas skull tycker man de ändå kunde vinkat åt folket. Men nejdå, de kunde lika gärna döpt ungen på andra sidan jorden.

Igår kom jag på att jag nog inte varit på Riddarholmen någonsin! Tror backen som leder från gamla stan till Riddarholmen är avstängd. Så snart jag får tillfälle ska jag ta en promenad dit.


Tisdag 22:e maj

Posted:
2012-05-22
Tags:

Sen till jobbet idag igen. Tränade sent igår och hade svårt att somna efteråt. Promenerade 7520 steg i söndags då jag gick från Akalla till Kista och hem letandes efter en getingskrämma. De hade ingen så jag beställde en på Internet istället.

Kravallerna och skadegörelserna i Tensta och Rinkeby är obehagliga. Jag hoppas det inte sprider sig till Akalla och Husby. Vad man ska göra i preventivt syfte vet jag inte. Händer det här får jag gå nattvakt.


På tuben

Posted:
2012-05-22
Tags:
sl

Först hamnade jag mittemot en snubbe som stank vitlök och sedan mot en som såg ut som han byxrunkade... Suck. Kaxig nog för att säga till dem är jag inte men inte artig nog för att sitta kvar. Jobbade för länge idag igen, men arbetsuppgiften är intressant. Det handlar om att allokera ett begränsat antal resurser på ett optimalt sätt. Samt att gå igenom ganska dålig databaskod och omstrukturera den med hjälp av vyer och ändamålsenliga funktioner.

Själv tror jag att jag har en del att lära ut till mina kära kolleger, men det är att utmana Jante det. Många känslor kring mitt jobb har jag och jag är inte säker på att "kära" inte är sarkasm. Skallen är för ostrukurerad nu.


Onsdag 16:e maj

Posted:
2012-05-16
Tags:

Situationsförsäljarna ser man överallt på de folktyngda gatorna i innerstan. Förutom då man letar efter dem. Då är de som bortblåsta. 4230 steg.


Rheinfeldt gillar svenskar

Posted:
2012-05-16
Tags:
politik

Det finns inte så många sätt att misstolka "det är inte korrekt att säga att Sverige har massarbetslöshet för etniska svenskar i medelåldern har jobb". Trots det tycker de etablerade tidningarna att det mest handlar om ett "twitteruppror". När annars kan ett uppenbart rasistiskt uttalande bortförklaras med att det bara handlar om Twitter? Vore det inte rimligare att analysera uttalandet än att försöka släta över det?


Söndag, 13 maj

Posted:
2012-05-13
Tags:
motion

Helgen är redan slut. Den gick för fort. Dagen har dock varit toppen med mycket sol och trevligt sällskap. 5215 steg har jag promenerat från Kista till Akalla. Igår hann jag köpa en ny gitarr. Kanske hinner jag till den extra jujitsu-träningen idag kl 19:00, men det känns föga troligt.


Mina cirklar är rubbade

Posted:
2012-05-10
Tags:

För jag hinner inte hem till reprisen av Vem Vet Mest. :-( Jobbat över för länge idag, men det var kul. Vektorer och optimering...


Äckligt

Posted:
2012-05-08
Tags:

Sitt inte på tuben och hosta rätt ut när någon sitter mitt emot. Jävla äckel.


När det gäller sossarna

Posted:
2012-05-07
Tags:
politik

Så tycker jag lite synd om Carin Jämtin. Hon ville säkert gärna bli partiledare men var för förknippad med Juholt och Sahlin som båda floppade. Från utsidan ser det ut som om det är hon som gör det stora jobbet med att segla igenom stormarna och hålla ihop partiet. Nu när det äntligen börjar gå bra får Lövèn all ära och ingen kommer ihåg hennes insats. Det måste kännas lite bittert. Sverige i stort börjar bli alldeles för fixerat vid galjonsfigurerna.


Vem Är Sämst

Posted:
2012-05-04
Tags:
vem-vet-mest gnäll

Det är namnet de borde kalla Vem Vet Mest. Programmet är rättvist i första omgången när alla får lika många frågor en efter en. Sedan i andra omgången vinner medelmåttsfittorna eftersom de smartaste anstränger sig folk för att slå ut! De som kommer till finalen är de tjejer som ser söta och korkade ut för ingen skickar några frågor till dem. Idag försvann både Ossi och Björn som var riktigt skarpa och svarade rätt på massor med frågor därför att alla ansträngde sig för att få ut dem. Särskilt fittlasse i kostym. Nu vinner han säkert därför att han är lite skarpare än de två idiotkvinnor han tävlar mot.

Och när Rickard Olsson säger "tryck när ni kan", är det någon enkel fråga trycker alla och då är det bara slumpen som avgör vem som tar spelet. Är frågan svår trycker nästan aldrig någon. Hade Ossi och Björn varit i finalen hade de säkert svarat på det mesta, men nu svarar finalisterna fel hela tiden.

Snälla SVT, ändra på programformatet! Det är orättvist och skittråkigt att de skarpaste deltagarna aldrig får vinna utan medelmåttorna som spelar taktiskt.


Torsdag

Posted:
2012-05-03
Tags:
motion

3211 steg på lunchen. Kanske visar pedometern fel för det kändes inte särskilt långt. Jag har fått bra rutin nu när jag dessutom tränar två gånger i veckan. Gjorde ett stort misstag i helgen när jag uppdaterade mitt cv på mönster. Jag söker absolut inte jobb och nu blir jag nedringd av överhurtiga rekryterade.


Metro fuckar upp rymden

Posted:
2012-05-02
Tags:
metro

I dagens Metro påstår de att gummihönan Camilla varit i rymden i en heliumballong på 36 kilometers höjd. Det är fel. Den internationellt accepterade definitionen för var rymden börjar är 100 km ovan markytan. Dit når man inte i en vanlig ballong eftersom dess lyftkraft beror på att den är lättare än luft. På de höjderna är luften för tunn för att ballongen ska få lyftkraft.


Första maj

Posted:
2012-05-01
Tags:
första-maj

11493 steg. Vädret var bedårande och solen gassande het. SL envisas med att köra korta tåg trots att de med säkerhet vet att det är massor med folk i rörelse. Därför är det trångt och luktar bastuvarm armsvett i vagnarna. Köpte en bok om ekonomi vid ett bokstånd och ett illustrerar anatomilexikon på Akademibokhandeln. Det hade blivit en dermatologisk handbok, rikt illustrerad den också men den boken var för dyr.


Måndag

Posted:
2012-04-30
Tags:
motion

11530 steg promenerat idag. Riktigt bra tycker jag. Utbyggnaden av Tvärbanan från Alvik till Solna är riktigt intressant. Men man kan fråga sig om trafikunderlaget finns - solnaborna har ju redan både pendeltåg och t-bana. Det hade varit fräckt om banan drogs ändå till under de jättestora blåa husen på höjden och ändstationen varit en bergstation. Kanske hade lutningen blivit för stor eller så hade det helt enkelt blivit för dyrt.


Tisdag 24:e april

Posted:
2012-04-24
Tags:
motion

2396 steg blev det. En helt vanlig tisdag.


Torsdag 19:e april

Posted:
2012-04-19
Tags:
motion

Idag har jag gått 2534 steg. Jag gillar inte snubblar som har samma keps som jag har.


Gephi

Posted:
2012-04-17
Tags:
gephi

Idag har jag lekt med Gephi. Det är en svår konst att producera en informationsrik graf när nod och kantantalet blir högt. Det är som att försöka ta en väldigt komplicerad konstruktion och automatisk skapa en ritning av den.


Måndag 16:e april

Posted:
2012-04-16
Tags:
motion steg

5478 steg. Lunchpromenad i det fina vädret. Det kändes kortare. Kanske har mitt flås blivit bättre.


Sköna söndag

Posted:
2012-04-15
Tags:
motion steg

Veckan avslutades med en rejäl promenad på 17305 steg. Från Akalla via Barkaby till Spånga, Rinkeby och sedan tillbaka till Kista. Det roligaste jag såg på promenaden var tre afrikanska killar, antingen somalier eller etiopier. Det ser jag väl hela tiden, men två av dem gick och höll varandra i handen. Ubergülligt. Det finns ett industrispår i Lunda industriområde. Jag har aldrig sett några tåg eller vagnar på det, men det ser välskött ut så jag hoppas att spåret är i drift. Det vore spännande att se ett godståg där någon gång. Trots alla långa promenader har jag inte minskat i vikt lika mycket som jag vill. En intensivare träningsform skulle kanske vara bra.


Solna är funkisens Mecka

Posted:
2012-04-12
Tags:
solna motion

En rejäl promenad på 6804 steg blev det till Solnas t-banestation. Det kändes som om det var längre av någon anledning. Möjligt att pedometern inte räknade alla steg eller så är jag extra trött idag. De ljusblå gigantiska husen i närheten av pendeltågstationen är imponerande fula. Hela Solna består av liknande rektangulära mastodonthus i ljusa gråaktiga färger. Det bästa med Solna är att det är nära till city, annars är det en mycket tråkig förort.


Idag

Posted:
2012-04-11
Tags:
motion

1625 steg har det blivit hittills. Tänkte gå till Tio Top och flukta på cigarrer, men butiken var stängd idag igen. Helt otroligt är det. De ordinarie öppettiderna är 13-18 på vardagar, vilket inte är mycket. Det gör det svårt att hinna dit under lunchen exempelvis. Dessutom är affären allt som oftast semesterstängd. Personalen är trevlig och kunnig och utbudet stort, men nån måtta får det vara.

Får inte glömma att hämta ut påfyllningen till receptet på hemvägen. Då kan jag passa på att promenera en sväng till om jag orkar.

Uppdatering: Ha! "Cigarrer" Jag menade ju gitarrer.


Dagens promenad

Posted:
2012-04-09
Tags:
motion

1653 + 4285 steg. Passerade ett "bageri och konditori" på vägen hem. De hade inget kaffe namnet till trots. Så jag försökte övertyga bagarinnan om att man inte kan kalla ett bageri utan kaffeservering för ett konditori. Då är det bara ett bageri. Det gick väl sådär, jag tror inte hon fattade någonting av vad jag sa.


Kvällspromenad

Posted:
2012-04-08
Tags:
promenad motion

Promenerade 15056 steg idag. Ganska mastigt måste jag säga. På promenaden såg jag ett muslimskt par där kvinnan gick i heltäckande kolsvart slöja. Hon fällde dessutom ner något över ögonluckan innan vi passerade varandra så att allt var svart. Jag tyckte det såg lustigt ut och hade svårt att kväva ett skratt. Hennes betydligt slappare klädda make märkte det och såg asförbannad ut. Man ska ju inte stirra, men jag kan inte rå för det - jag blir som ett barn.

Vägbygget vid södra sidan av Järvafälet går framåt och det börjar se lite bättre ut nu. Förhoppningsvis kommer en stor del av motorvägen att grävas ned så att boende i Rinkeby, Tensta och Hjulsta får direktaccess till Järvafältet. Det är slöseri med ett fint grönområde att vägen går som en gräns mellan det och hyreshusen.