fredag 23 december 2011

Fallgropar i c++

Otroligt bra läsning när man lämnat Hello World bakom sig. Det är lätt i början av listan...
http://www.horstmann.com/cpp/pitfalls.html

Använda alla bibliotek från boost

Jag träffade nyligen en c++-utvecklare som precis som jag är en varm anhängare av boost. Han hade använt, med något enstaka undantag, alla boostbibliotek! Jag blev omedelbart imponerad.

Jag går igenom listan själv och konstaterar att jag faktiskt använt 27 av biblioteken i verkliga projekt. Har satt en asterisk framför de jag använt hittills.
Listan finns här för version 1.48 (senaste i skrivande stund). Den innehåller imponerande 111 bibliotek! (en del listas förvissa som flera).

Jag får en viss lust att gå igenom de resterande och skriva ett litet program för var och en av dom. Det får vänta till nån sömnlös natt...
  1. Accumulators
  2. *Any
  3. *Array
  4. *Asio
  5. *Assign
  6. *Bimap
  7. *Bind
  8. Call Traits
  9. Chrono
  10. *Circular Buffer
  11. Compatibility
  12. Compressed Pair
  13. Concept Check
  14. Config
  15. Container
  16. Conversion
  17. *CRC
  18. *Date Time
  19. Disjoint Sets
  20. Dynamic Bitset
  21. Enable If
  22. Exception
  23. *Filesystem
  24. Flyweight
  25. *Foreach
  26. Format
  27. Function
  28. Function Types
  29. Functional
  30. Functional/Factory
  31. Functional/Forward
  32. Functional/Hash
  33. Fusion
  34. Geometry
  35. GIL
  36. *Graph
  37. ICL
  38. In Place Factory, Typed In Place Factory
  39. *Integer
  40. *Interprocess
  41. Interval
  42. Intrusive
  43. *IO State Savers
  44. *Iostreams
  45. Iterators
  46. Lambda
  47. Lexical Cast
  48. Locale
  49. Math
  50. Math Common Factor
  51. Math Octonion
  52. Math Quaternion
  53. Math/Special Functions
  54. Math/Statistical Distributions
  55. Member Function
  56. Meta State Machine
  57. Min-Max
  58. Move
  59. MPI
  60. MPL
  61. Multi-Array
  62. Multi-Index
  63. *Numeric Conversion
  64. Operators
  65. Optional
  66. Parameter
  67. Phoenix
  68. Pointer Container
  69. Polygon
  70. Pool
  71. Preprocessor
  72. *Program Options
  73. *Property Map
  74. *Property Tree
  75. Proto
  76. Python
  77. *Random
  78. Range
  79. Ratio
  80. Rational
  81. *Ref
  82. *Regex
  83. Result Of
  84. Scope Exit
  85. *Serialization
  86. Signals
  87. Signals2
  88. *Smart Ptr
  89. Spirit
  90. Statechart
  91. Static Assert
  92. String Algo
  93. Swap
  94. System
  95. *Test
  96. *Thread
  97. Timer
  98. Tokenizer
  99. TR1
  100. Tribool
  101. *Tuple
  102. Type Traits
  103. Typeof
  104. Units
  105. Unordered
  106. Utility
  107. *Uuid
  108. Value Initialized
  109. Variant
  110. Wave
  111. Xpressive

tisdag 1 november 2011

Ubuntu 11.10 on Thinkpad T420

I share my experience on getting ubuntu 11.10 running on a Lenovo Thinkpad T420.
The computer has a core i5 processor, a 1600x900 screen with a nvidia graphics card and an integrated gpu on the processor. Since I prefer silence before playing games, I have shut off the discrete gpu.
I use a kingston ssd which reaches over 500 MB/s in the ubuntu disk test. Impressive is the least I can say. The computer boots really fast.

This computer has a wonderful feature I did not know of until i unpacked it: a small light on the top of the screen, lighting up the keyboard (controlled via a key combination)!


Update bios
I updated the bios to the latest revision after having install problems. Those problems were related to a faulty hard drive, which is now replaced (note to self: never buy stuff where firmware updates is a news issue). So the bios update may be unnecessary to install. Your mileage may vary.

Bios settings
  • sata mode ahci
  • boot to uefi only
  • turn off discrete graphics
  • turn off "os optimus detection"
  • set boot order to cd before hard drive.
  • enable boot screen diagnostics.
Install
I made an overly complicated install as I only had the normal ubuntu install cd, not the alternate one. To get an adequate level of system encryption, I first installed normally, then live cd booted, created a new luks filesystem inside lvm, copied the install to the encrypted system, chrooted to it and built initramfs and modified fstab and crypttab. A bit tricky, but it works. I recommend using the alternate installer instead.

Fan
The fan is running all the time. I followed the instructions here with the small change that /etc/thinkfan.conf should contain
sensor /sys/devices/platform/coretemp.0/temp1_input
sensor /sys/devices/platform/coretemp.0/temp2_input
sensor /sys/devices/platform/coretemp.0/temp3_input
Works like a charm.

The rest
I have not noticed anything that does not work. The buttons I use work as they should (volume, screen brightness). The rest like speakers, usb, touchpad etc. works perfectly.

Left to do
enable trim on the ssd.

Links
debian on t420

lördag 15 oktober 2011

Egendriftat alternativ dropbox

Äntligen har det dykt upp ett opensource-program för att köra en egen dropboxliknande tjänst!
Har inte hunnit kolla alls, men noterar länken så jag kommer ihåg det sen. Tyvärr är websidan för tillfället död, men sidan för nedladdning av källkoden lever:
sparkleshare

Hur spotify fungerar

Det finns en mycket intressant artikel som berättar om hur spotify fungerar (i vissa avseenden).
Klienten strömmar data både från spotifys servrar och andra klienter. Hur detta sker berättas i artikeln som går att läsa här:
http://www.csc.kth.se/~gkreitz/spotify-p2p10/

Väldigt intressant. Spotifyservrarna står för ca 9% av lasten, 36% via andra klienter och resten från lokalt lagrade data. Det betyder alltså att serverbelastningen är en femtedel av vad den hade varit utan p2p-funktionen!
Genom att börja ladda låtar från servern lyckas man hålla nere fördröjningen från "play" till att det börjar spela till imponerande 256 ms (medianvärde).

Artikeln beskriver hur man begränsar t ex antalet anslutningar och andra parameterar för att förenkla implementationen av både klient och server, och att minska belastningen på folks nätverksutrustning.

Undrar hur stor lasten är totalt? Totalt finns ca 10 miljoner användare(källa: http://www.csc.kth.se/~gkreitz/spotify-p2p11/). Om jag gissar att genomsnittsanvändare lyssnar på ca 20 låtar á 4 minuter om dagen (en vild gissning) och denna delas jämnt över ca 12 timmar (aktiviteten är störst dagtid, lasten är nästan sinusformad, se http://www.csc.kth.se/~gkreitz/spotify-p2p10/, detta motsvarar toppvärdet 2 ggr genomsnittslasten)
så blir totala lasten som högst under dagen
10e6 användare*20 låtar*240 s/låt/(12 h*3600 s/h) * 160 kbit/s=178Gbit/s

Med avlastning enligt ovan behöver servrarna bara ta hand om 9% av detta vilket blir 16 Gb/s. Det är en rätt stadigt belastning. En gigabitanslutning för företag kostar ca 10kSEK/mån exkl. moms sist jag kollade (2008?). Om vi bortser från volymrabatt betyder det att bandbredden per användare kostar ca 16*10e3/10e6=2 öre per användare och månad. (man behöver lite marginal för sällsynta tillfällen, så låt marginalen kvittas mot volymrabatten för att slippa räkna mer noggrant.)
Hur många servrar behöver man? Säg att en server kan streama musik i 200 Mbit/s (trots allt är det rätt jobbigt eftersom alla klienter vill åt olika filer, jobbigt jämfört med om 10 miljoner klienter ska ladda ner samma ubuntu-iso som då kan cachas), då behövs ca 100 servrar (några går väl åt för att sköta trackern också). Sen ska det skickas ut reklam, hanteras inloggning etc men det måste vara trivialt jämfört med att strömma musik i 16Gb/s. Med 200W per server (man får hoppas de bygger energisnålt!) blir det ca 100*200W*730 timmar/månad*1 kr/kWh=15 kSEK elräkning per månad, ca 0.15 öre per användare och månad.
Säg att det går åt dubbelt så många servrar (någonstans måste musiken lagras) så är det ett väldigt kostnadseffektivt sätt att distribuera musik. Har för mig att en cd kostar tio kr att tillverka.

Stor brasklapp för att jag klantat till något i beräkningarna ovan. Har inte dubbelkollat, utan skrivit medan jag tänkt.

torsdag 29 september 2011

Varför jag inte använder facebook

Dags att slå in lite öppna dörrar. Det handlar om facebook.

Jag gick inte med på Facebook när det kom. Tyckte att man kan maila mig om man vill ha kontakt, jag är lätthittad på nätet.
Sedan kom det ett larm om att man delar med sig av rättigheter till bilder man lägger upp. Och nu i dagarna kommer larm om att facebook kan spåra vilka websidor du besöker (förutsatt att de har en gillaknapp, annars är det svårt).
Jag tycker det är rätt obehagligt. Men, det är frivilligt att vara med. Om man inte gillar det kan man stå utanför.
Och det är här problemet kommer: facebook håller på att bli etablerat som ett "eget internet". Fler och fler företag har gillaknappar (för övrigt rätt fånigt) och/eller har en egen sida host facebook. Tex facebook.com/företag istället för www.företag.se Viss information finns bara åtkomlig via facebook. Exempelvis ger en förening jag är med i ut information via facebook. Som tur är finns informationen även på annan plats, men det visar på problemet: Man är på sikt tvungen att gå med. Och vips sitter vi där och facebook gör som de vill, för man har redan godkänt villkoren och är så invävd i det att man fortsätter, trots att man ger ut nästan all information till facebook. Och för företagen gäller det att man måste betala och acceptera facebooks villkor för att få synas.


Så, för n:te gången, vad var det jag sa. Ni hittar vare sig mig eller mitt företag på facebook. Mitt företag finns under sin egen adress www.dreik.se. Och jag själv finns på www.pauldreik.se. Välkomna dit, om ni vill.

onsdag 27 juli 2011

Om incitament

Den här videon berättar om varför människor motiveras av annat än pengar. Väldigt intressant, och kul sätt att presentera resultat på.
Jag försöker fundera på vad jag drivs av när jag jobbar och de saker jag engagerar mig i på fritiden. Hur man kan omsätta dessa resultat till att skapa bättre arbetsplatser? Kan jag kanske tillämpa detta på mitt sätt att arbeta?
http://www.youtube.com/watch?v=u6XAPnuFjJc