laszlo.nu

Stackoverflow.com

Jag har registrerat mig på stackoverflow.com, det är en sida där man kan ställa programmeringsfrågor eller svara på andras frågor. Sidan påminner om en wiki, dvs en sida som vem som helst kan redigera, i det här fallet ställa frågor eller svara på dem. Man har dessutom reputation som är en slags poäng som beräknas på hur bra andra tycker att ens frågor och svar är. Ju högre poäng man får desto fler funktioner får man tillgång till, när man har kommit upp i en viss poäng kan man till exempel rösta på att ta bort oväsentliga frågor eller redigera dåligt formulerade frågor.

För inte så länge sedan hamnade man ofta på Experts Exchange när man googlade på något programmeringsrelaterat, problemet med den sidan är att man måste betala för att kunna ställa frågor (och till och med för att svara?). Stackoverflow dyker upp allt oftare i sökresultaten, vissa frågor är rätt fåniga men svaren har oftast förvånansvärt hög kvalitet oavsett om det är rena nybörjarfrågor eller frågor om kryptiska kompileringsfel i obskyra programmeringsspråk.

Stackoverflow skapades av Joel Spolsky, som bland annat var ansvarig för att implementera VBA-stödet i Microsoft Excel. Han var tydligen också trött på Experts Exchange och på att klicka runt i forum och läsa sida efter sida med ovidkommande kommentarer om att man istället borde byta programmeringsspråk, operativsystem eller editor. Jag har fastnat totalt, det där med reputation är sjukt beroendeframkallande och gör att man ibland sitter och researchar svar lite väl länge. Här är min flair:

Swing (as in Java) problem with Eclipse and xmonad

My version of xmonad (0.8) does not seem to play very well with the newer AWT implementation XToolkit. When I tried running my gui in Eclipse, all I got was a big fat grey screen.

Luckily, all you need to do to get things working (at least in my case) was to add the following line to your run configuration:

-Dawt.toolkit=sun.awt.motif.MToolkit

This makes your application use the older MToolkit instead of the newer XToolkit. Just thought I should share this.

Read more:

The Stranglers - Sverige (Insnöad på Östfronten)

Låt mig berätta om Sverige
Enda landet där molnen intresserar
Storebror säger det är stället för dig
För mycket tid att tänka, för lite att göra
För mycket tid att tänka, för lite att göra
För mycket tid, för lite att göra
Jag är insnöad på Östfronten
Förväntningar på minimum
Hypokondrisk kroppssten (gravsten, jag vet, men lyssna)
Känsla för humor förlorad nånstans
Ref.
Cumulus nimbus flyter
Förväntningar på minimum
Hypokondrisk kroppssten
Storebror säger det är stället för dig
Jag är insnöad på östfronten

Tack Johannes!

Motsatsleken

När jag hittade synonymordboken och hade klickat runt där ett tag så fick jag för mig att kolla hur många klick det skulle ta att ta sig från ett ord till dess totala motsats (utan att klicka på länkarna under motsatsord då såklart). Ett exempel:

bra → okej → riktig → adekvat → träffande → exakt → punktlig → ordentlig → rejäl → bastant → tjock → kraftig → grov → vulgär → simpel → usel → bristfällig → dålig

För ett par dagar sedan kom jag på att man kunde leka samma lek i Spotify. Tänk först ut två artister eller grupper som är varandras motsatser. De första jag kom att tänka på var Marilyn Manson och Britney Spears, även om de kanske råkar ha mycket gemensamt. Gå sedan in på en av artisternas “overview”-sidor i Spotify och klicka på någon artist under “similar artists”, fortsätt klicka tills du kommer fram till din utvalda motsats:

Marilyn Manson → Tool → Alice In Chains → Ozzy Osbourne → Lita Ford → Samantha Fox → Janet Jackson → Madonna → Kylie Minogue → Robbie Williams → Backstreet Boys → Britney Spears

Här är kanske sambanden inte lika tydliga. Hur Spotify räknar ut vilka artister som liknar varandra är en gåta för mig. Ozzy och Lita Ford gjorde åtminstone en duett tillsammans.

Är det bara jag som tycker att det här är roligt?

Filter a list by type by using manifests in Scala

Due to the type erasure in Scala I got problems when I tried to create a function filterType<T>(list: List[Any]): List[T] that simply filters out all elements in a list of type T. This is the naive implementation that I first tried out:

object TypeFiltering {
  def typeFilter[T](list: List[Any]): List[T] = list.filter {
	_ match {
	  case _: T => true
	  case _ => false
	}}.asInstanceOf[List[T]]
  def main(args: Array[String]) {
	val list = List(1,2,3,"a","b","c")
	println("strings: " + typeFilter[String](list))
	println("bools: " + typeFilter[Boolean](list))
  }
}
/*
Output:
strings: List(1, 2, 3, a, b, c)
bools: List(1, 2, 3, a, b, c)
*/

What happened here is essentially that the type erasure mechanism that exists both in Java and Scala (but not in C#) removes the type T from the line

case _: T => true
which just leaves
_ => true
which will always match, obviously.

I consulted the very helpful Scala community at irc.freenode.net/#scala and got the suggestion that I should use the undocumented and still experimental Scala manifests. Jorge Ortiz has written a very instructive blog post about what manifests are and how you use them. I ended up with this typeFilter function:

def typeFilter[T](l:List[Any])(implicit m:scala.reflect.Manifest[T]) =
	l.filter{x:Any => m.erasure.isInstance(x)}.asInstanceOf[List[T]]
/*
Output:
strings: List(a, b, c)
bools: List()
*/