Kategoriarkiv: Swedish

Felaktiga antaganden programmerare gör om namn

(Shamelessly appropriated from this article and expanded upon and swedified.)

I nästan alla sammanhang förekommer det att man skall fylla i sitt namn i olika system. Dessa system är skrivna och baserade på ett antal antaganden, många av dessa antaganden är ofta helt felaktiga men vi är så vana vid att det skall se ut på ett visst sätt att vi inte tänker på att utmana våra antaganden.

Som alla vet, antaganden leder ofta till grova fel i program, det är bättre att man kontrollerar hur det bör vara. Här har jag sammanställt en lista på vanligt antaganden runt just namn som programmerare bör vara observanta på och se till att försöka undvika åtminstone de värsta fällorna.

  1. En människa har endast ett korrekt namn
  2. En människa har ett fullständigt namn som de kallas
  3. En människa har, just nu, ett fullständigt namn
  4. En människa har ”n” antal namn (för valfritt värde på ”n”)
  5. En människa har ett riktigt namn och kanske ett eller flera smeknamn
  6. En människas namn ryms inom ett visst antal tecken
  7. En människas namn ändras inte
  8. En människas namn ryms på en rad
  9. En människas namn har mer än ett tecken, glyf eller symbol
  10. En människas namn kan ändras, men bara vid vissa tillfällen
  11. Ett förnamn/efternamn/mellannamn etc har inga mellanrum
  12. En människas namn kan uttryckas med ASCII-tecken
  13. En människas namn uttrycks bara inom en viss teckenuppsättning
  14. En människas namn kan alltid uttryckas inom ramen för Unicode
  15. En människas namn är känsligt för teckenskift (stora/små bokstäver)
  16. En människas namn är inte känsligt för teckenskift
  17. En människas namn har ibland prefix eller suffix men man kan strunta i dem
  18. En människa har bara ett prefix till sitt namn (ex. herr, doktor, esq. osv)
  19. En människas namn innehåller inte siffror
  20. En människas namn skrivs inte med BARA VERSALER
  21. En människas namn är inte skrivet enbart med gemener
  22. En människas namn har en särskild ordning, om två system ordnar namnen efter samma algoritm kommer namnen i båda systemen vara identiska
  23. En människas förnamn och efternamn är aldrig likadana
  24. En människa har ett efternamn, familjenamn eller släktnamn eller dylikt som känns igen av dennes släktingar
  25. En människas namn är globalt unikt
  26. En människas namn är nästan globalt unikt
  27. En människas namn är i alla fall tillräckligt unikt att det inte finns miljoner andra med samma namn
  28. Mitt system kommer aldrig behöva hantera kinesiska namn
  29. …eller japanska, koreanska, singalesiska, engelska, svenska, botswana eller klingonska eller på urdu, fenicianska eller …
  30. Åtminstone personer inom samma etniska grupp har en samsyn på hur namn uttrycks
  31. En människa får sitt namn vid födseln
  32. En människa får sitt namn strax efter födseln
  33. En människa får sitt namn inom 1, 5, 10 … år efter födseln
  34. En människa skriver in sitt namn likadant i två olika system
  35. En människas namn innehåller inga skiljetecken annat än apostrofer
  36. En människas namn är det som skattemyndigheten har registrerat
  37. En människas namn är det som står i folkbokföringen
  38. En människa har ett förnamn
  39. En människa har ett efternamn
  40. En människa har ett namn

Kollektrivtrafiktrubbel

Jo men det är härligt när kollektivtrafiken löper som den skall. När den inte gör det är det för jävligt snarare och i dag var en sådan dag. Det har tagit mig närmare 3 timmar från Kallhäll till Hammarby sjöstad och det gick till på följande sätt:

  1. Pendeltågen inställda och sedan försenade på grund av signalfel, här förlorade jag 40 minuter ungefär. Eftersom det inte finns mycket alternativ är det bara att vänta.
  2. Kom till Stockholm centralstation men det var tydligen växelfel eller liknande på gröna linjen, återvände till pendeltåget för att ta nästkommande till södra station i stället och därifrån ta buss 74 till Sickla kaj. Tappade ca 30 minuter.
  3. Kom till Södra station och kom ut på busstorget, ca 12 minuter till nästa 74. Då inträffar en bussbrand som gör att man drar in hållplatsen. Går ner till Södra station igen, kommer en ny pendel, hoppar på den till Årstaberg där man normalt kan ta tvärbanan. Tappade ca 30 minuter
  4. Tvärbanan är inställd så det är ersättningsbuss som gäller. Första bussen som skyltas kommer inte öht. När den väl kommer tar den rundlig tid på sig tills den når Sickla kaj till slut. Tappad tid ca 20 minuter.

I normalfallet tar resan ca 50 minuter.

Jag tar nog bilen ett tag.

Netflix under Ubuntu 14.04

Det går utmärkt att köra Netflix under Ubuntu Linux 14.04 exempelvis. Har ingen anledning att tvivla på att det inte skulle fungera på andra varianter av Linux heller.

Netflix har ingen officiell applikation för Linux och det går inte köra i den vanliga webläsaren oavsett vad du kör eftersom det kräver en plattform som inte finns för Linux nämligen Microsoft Silverlight. Men Linux är ju förstås vänligt att hacka och det finns folk som har tagit fram en Silverlightemulator mm och projektet heter  Pipelight vilket löser det mesta åt en. Det är troligen det enklaste sättet att få in något som kan spela Silverlight och projektet Pipelight verkar fungera bra även om det är i betastadiet fortfarande.

Installera pipelight genom följande kommandon:

sudo apt-add repository ppa:pipelight/stable
sudo apt-get update
sudo apt-get install pipelight-multi

Därefter så skall vi slå på och konfigurera Silverlight:

sudo pipelight-plugin --enable silverlight

Därefter installerar vi själva netflixapplikationen som egentligen körs i Wine (en windowsemulator under Linux):

sudo apt-get install netflix-desktop

Nu när det är installerat kan du öppna unity och skriva Netflix eller så och köra.  Första gången kommer Wine säga att det saknas ett antal komponenter men den kommer också installera dem åt dig om du svarar att du vill det och om allt går väl skall du snart ha en Netflix på din Ubuntu och kunna njuta av alla filmer och tv-serier.

netflix-ubuntu-screenshot-launcher

Du behöver förstås fortfarande ett abonnemang hos Netflix, det löser vi inte med några kommandon inte :) Jag har precis provkört det på min Ubuntu 14.04 och det fungerar helt klockrent. Se till också att du har uppdaterade drivrutiner för ditt grafikkort så det kan nyttja 2D-acceleration så kommer det gå bra. Min maskin jag provkört på är inget fartvidunder, Nvidia 9700 och Dual Core-2 Duo men det rullar på helt ok.

TrueCrypt

Ingen vet riktigt vad som hände. Plöstligt försvann binärerna från deras site och i stället kom det upp en websida som sade att det ”kan finnas allvarliga säkerhetsproblem i TrueCrypt” och sedan hänvisar man till att använda BitLocker i stället.

Senaste versionen av TrueCrypt böts ut mot en version i vilken man bara kan dekryptera diskar och filer som tidigare krypterats med mjukvaran, men inte skapa nya volymer som är krypterade.

Det hela är bisarrt och det förekommer väl egentligen tre sorters teorier just nu:

  1. Truecryptsajten samt utvecklarnas datorer med deras nycklar som använts för att signera filerna med samt deras konto på sourceforge har alla blivit komprometterade i en hackerattack
  2. En riktigt riktigt allvarlig säkerhetslucka har upptäckts och för att få alla sluta använda mjukvaran tog man till drastiska metoder för att sätta projektet i brand och få alla sluta använda det
  3. Påtryckningar från någon regeringsmakt har fått utvecklarna bakom att i stället för att ge efter och t.ex. installera en bakdörr helt enkelt överge hela projektet.
  4. Utvecklarna bestod egentligen av en person som har fått nog och därmed överger projektet.

Men ingen av dessa teorier verkar vara särskilt vettiga. Fallet nummer 1 är relativt osannolikt och skulle tyda på att utvecklarna bakom ett säkerhetssystem haft rätt dålig säkerhet själva. Fallet nr 2 måste vara något helt spektakulärt och motsägs av att mjukvaran var under granskning och det första passet hade genomgåtts utan några större problem. Fall 3 verkar också märkligt, i detta fall borde vi aldrig märkt något alls men det kan ju vara så att någon i projektet verkligen vill blåsa i visselpipan. Nummer 4 är gissningsvis mer troligt men varför lämnar man inte programvaran vidare till andra att fortsätta den.

Som skäl till övergivandet uppges vara att Microsoft överger Windows XP och att det i senare versioner av operativsystemet finns andra lösningar som t.ex. BitLocker. Problemet är att den lösningen bara finns i vissa versioner av Windows 7 och 8, inte i exempelvis vista och det är heller inte på samma sätt som TrueCrypt en lösning som fungerar på flera plattformar där TrueCrypt fungerade utmärkt på flera versioner av Windows, MacOS och Linux.

Det fortfar alltså vara ett mysterium vad som hänt.

Linux snapshots med rsync

En klurig sak man kan göra för att ordna med snapshots om filsystemet man använder inte stöder det är att göra ett lokalt backupskript som genererar sådana med jämna mellanrum. Men för att spara diskplats skulle man ju vilja ha möjligheten att bara spara förändringarna mellan varje snapshot samtidigt som det vore lätt att gå tillbaka t.ex. tre dagar i tiden utan problem.

Detta kan lösas med hårda länkar i Linux och det finns en hel del skrivet om det på nätet. Det intressanta med hårda länkar är att en fil som är länkad på det sättet fortsätter existera tills den sista länken är borttagen. Det är alltså ingen som helst skillnad mellan en hård länk och den egentliga filen.

Om du skapar fil A och sedan hårdlänkar den till fil B så är A och B på riktigt alltså samma fil. Om du ändrar A så ändras också B. Däremot om du raderar A så raderas inte B, länken är då bruten och man kan säga att B är lika mycket originalfilen som A en gång var. Nu kommer det riktigt intressanta: Om du skriver en ny fil A så existerar den separat från B. Länkningen mellan dem är bruten från när du raderade den.

En fil raderas egentligen aldrig men när den har 0 hårda länkar är den inte längre åtkomlig och platsen den tog upp på disken är nu fritt villebråd för andra filer att använda.

Ett intressant fenomen med rsync är att när den skriver filer gör den alltid delete på dem först! Eller egentligen gör den ”unlink”, det är ju ett bättre namn. Därför kan vi börja med att göra en rsync på filerna vi vill bevara. Exempelvis är det vanligt att man vill backa upp /etc /home /root i ett Linux-system.

Först skapar vi någonstans att hållas:

# mkdir /bup
# chown root:root /bup
# chmod 700 /bup

Därefter kan vi synka katalogerna till /bup/snapshot med kommandot:

# cd /bup
# rsync -a --delete /etc /home /root /bup/snapshot/

Om vi kör ovanstående (som root) kommer vi få en backup på de tre utpekade katalogerna i /bup/snapshot och de kommer vara kopior av de riktiga filerna. Nu kommer finessen. När vi vill spara vår snapshot kopierar vi dem men gör bara hårdlänknin från kopian. Genom att göra detta tar vi inte upp nämnvärt med displats och vi länkar till samma data på disken!

# cp -al snapshot snapshot.1

Du kan verifiera detta genom att slå

# du -sh *

Du kommer då se att det är betydligt mindre data i snapshot.1 än i snapshot och det beror på att det är bara länkarna i sig som vi har sparat på.

Nästa steg är att ta en ny snapshot med rsynk. När vi gör det kommer länkarna mallan snapshot och snapshot.1 att brytas i de filer som rsync uppdaterar eftersom den gör först unlink, sedan skriver en ny fil till den!

Om vi vill ha dagliga snapshots som roterar t.ex. tre dagar bakåt i tiden kan vi köra detta skript:

#!/bin/bash

cd /bup

if [ -x snapshot.2 ]; then
    mv snapshot.2 snapshot.3
fi

if [ -x snapshot.1 ]; then
    mv snapshot.1 snapshot.2
fi

if [ -x snapshot ]; then
    cp -al snapshot snapshot.1
fi

rsync -a --delete /etc /home /root /bup/snapshot/

Lägg sedan upp detta som ett cronjobb genom att redigera crontab (som root) med

# crontab -e

Lägg sedan till en rad exempelvis:

00 04 * * *     /root/backup-daily

Spar sedan skriptet ovan som /root/backup-daily så körs det kl 4 varje morgon så du alltid har en snapshot att gå tillbaka till om du gjort något klantigt i din hemkatalog…

 

Hur fungerar glasögonrecept?

Man går till optikern och man provar ut glasögon. Man får eventuellt en kopia på glasögonreceptet som gör att man t.ex. kan beställa glasögon på nätet om man vill eller gå till annan optiker utan att göra ny ögonkontroll. Men för den som försöker förstå lite mer vad de olika krumelurerna på receptet egentligen betyder har jag satt samman en liten guide. Här får du hjälp att tyda ditt glasögonrecept och förstå optikerns termer.

By Victorrocha (Own work) [CC-BY-SA-3.0 (http://creativecommons.org/licenses/by-sa/3.0) or GFDL (http://www.gnu.org/copyleft/fdl.html)], via Wikimedia Commons
Glasögon
Inte alla recept innehåller alla parametrar. Exempelvis skriver man inte ut cylinder och axel om du inte har en astigmatism som behöver korrigeras. (Jo alla människor har astigmatism i någon mån men de flesta behöver ingen korrigering för den).

Ett varningens ord dock. Glasögonrecept är inte liktyuliga med linsrecept. Har du fått ett glasögonrecept kan du inte direkt översätta det till rätt styrka för linser för de kräver lite annan utprovning, dels finns det en kurvatur på ögonglobem som kontrolleras och det finns inte med i glasögonreceptet. Dessutom sitter korrigeringen närmare näthinnan vilket gör att styrkan inte alls behöver bli densamma så skaffa ett särskilt recept för linser. Linser skall dessutom provas ut och kontrolleras av optikern att de fungerar som tänkt, köp aldrig linser på egen hand och om du skall köpa på nätet var noga med att du köper exakt samma sort som optikern föreskrivit!

H, R, OD
Alla betyder ”höger öga”, H för Höger, R för Right och OD för Occulus Dextrum som är latin för höger öga.
V, L, OS
Alla betyder ”vänster öga”, V för Vänster, L för Left och OS för Occulus Sinistrum som är latin för vänster öga.
Fri visus, FV
Detta innebär hur bra du ser utan korrigering. Det finns också en angivelse separat för vänster respektive höger öga. FV-värde på 1,0 är perfekt seende, dvs man ser nedersta raden på ett standardiserat syntest. För varje rad upp minskar man 0,1 i FV-värde. Fri visus anger alltså synskärpan utan korrigering och man börjar ofta med att bestämma denna. FV-värdet säger inget om vad sorts fel du har, bara vilken skärpa du har bestämt med ett standard syntest.
Korr visus, KV
Detta innebär hur bra du ser med korrigering, i övrigt som Fri visus eller FV.
Sfär, sf
Beskriver storleken på ditt synfel räknat i dioptrier och är positivt om du är långsynt och negativt om du är närsynt. Ju större tal desto kraftigare korrigering.
Cylinder, Cyl
Finns inte på alla recept men anger styrkan hos astigmatismen. Ett högre tal innebär kraftigare astigmatism. Åtföljs alltid av Axel som talar om på vilken ledd astigmatimen finns.
Axel, Ax
Åtföljer alltid Cylinder och talar om på vilken ledd astigmatismen ligger i ögat. Gradtalet går från 0-180.
Add
Detta innebär styrkan som adderas till styrkan angiven i Sfär för att göra läsglasögon
PD
Pupilldistans. Detta anger avståndet mellan dina ögon. Om det finns separata värden för vänster och höger öga är det avståndet från mitten ut till respektive ögas pupill från en tänkt linje i mitten av ansiktet. Ibland anges PD på två ställen då som PD/a och PD/n och det innebär pupilldistans för glasögon ämnade för avståndsseende (PD/a) och för glasögon ämnade för läsning eller närseende (PD/n).

Nu vet du vad de olika förkortningarna och orden på ett glasögonrecept egentligen står för och betyder. Nu kan du tolka ett glasögonrecept.

Vill du knäcka koden

Albin Tenglet ristade på 1940-talet in både runor och annat här i Kallhällstrakten. Dessutom så ristade han in en text som ingen lyckats tolka ordentligt ännu.

Känner du att du har kodknäckarambitioner tycker jag att du skall göra ett försök. All information om den finner du här: Kodknäckare

Blåtandstangentbord till din Raspberry Pi

Jag skaffade mig ett enkelt blåtandstangentbord till min Raspberry Pi. Jag gillar blåtand eftersom det utökar möjligheterna att göra andra saker och gör USB-porten användbar till andra mojänger, exempelvis kan man ju ansluta högtalare och mikrofoner och andra saker över blåtand.

Tangentbordet jag skaffade mig var ett sådant här:

Det kan köpas från exempelvis Teknikmagasinet eller beställas på nätet.

Tangentbordet kommer med ett litet batteri, laddas genom en mikro-USB-anslutning (så du kan ladda den från din Pi om du så önskar) och har ett batteri med lång livslängd, typ mobiltelefonbatteri. Det kommer med en liten USB-dongel som är en full blåtandsimplementation (ja den klarar andra saker än bara medföljande tangentbordet).

Om du jackar in den i din Pi behöver du dock göra lite handgrepp för att få det att fungera.

Till att börja med så skall vi se vad som skrivs i loggen när man ansluter blåtandspluggen:

sudo tail -f /var/logg/messages

Detta ansluter din terminal till syslog och visar alla nya meddelanden som kommer in. När nya meddelanden kommer in så kommer de att visas direkt.

Nov 16 20:16:29 raspberrypi kernel: [10210.180087] usb 1-1.3: new full-speed USB device number 6 using dwc_otg
Nov 16 20:16:29 raspberrypi kernel: [10210.360093] usb 1-1.3: new full-speed USB device number 7 using dwc_otg
Nov 16 20:16:29 raspberrypi kernel: [10210.464700] usb 1-1.3: New USB device found, idVendor=0a12, idProduct=0001
Nov 16 20:16:29 raspberrypi kernel: [10210.464731] usb 1-1.3: New USB device strings: Mfr=0, Product=0, SerialNumber=0

Tryck C-c för att avsluta.

Så inga konstiga fel eller så men däremot fungerar det inte av sig själv. Vi behöver koppla tangentbordet till datorn men först måste vi installera lite verktyg för bluetooth.

sudo update-rc.d -f dbus defaults
sudo apt-get install bluetooth bluez-utils blueman

Jag vet att det kommer riva in en massa junk du kanske inte vill ha. Det beror på att default så står debian inställt på att ta in inte bara det som måste plockas in pga dependencies utan också allt rekommenderat och ”nice to have”. Du kan stänga av detta innan installationen för att slippa få in cups och annat som kanske inte behövs…

Nästa steg är att sätta tangentbordet i ”discovery mode” det finns en särskild knapp på detta tangentbord som man trycker på för detta. En diod böjar blinka på tangentbordet.

Tillbaka i Pi så skall vi nu para pajen med tangentbordet:

sudo hcitool scan

Detta bör hitta ditt tangentbord och visa en rad ungefär som följer:

Scanning ...
DC:2C:26:E5:97:B4 Bluetooth 3.0 Macro Keyboard

Om ingenting hittas, kontrollera att tangentborder verkligen är i discovery mode. Om det ändå inte fungerar är det troligen så att den blåtandsmoj du har inte är kompatibel tyvärr.

Det vi är ute efter ovan är blåtandsmojens adress! Det är den första delen av discoveryraden: DC:2C:26:E5:97:B4

När vi nu har den kan vi para Pi med Tangentbordet:

bluez-simple-agent hci0 DC:2C:26:E5:97:B4

När du gör detta frågar den efter en Pinkod, slå in på Raspen 1234 eller 0000 och sedan skriver du samma på tangentbordet och trycker ENTER.

Nu skall du vara parad med tangentbordet om inga felmeddelanden dyker upp. Nästa är att lägga till tangentbordet i listan på ”trusted devices” och sedan ansluta till det och det gör du med:

bluez-test-device trusted DC:2C:26:E5:97:B4 yes
bluez-test-input connect DC:2C:26:E5:97:B4

Klart. Det fungerade utmärkt för mig. Om du bootar om din Pi måste du köra connect igen. Lägg in det i /etc/rc.local eller motsvarande.

För att göra detta redigerar du filen /etc/rc.local och innan du ser det avslutande exit 0 i filen lägger du till din connect-rad som bluez-test-input connect DC:2C:26:E5:97:B4 och det skall vara allt som behövs för den skall återansluta.

Om du har några bekymmer, glöm inte kolla /var/log/messages för mer information, det mesta av vikt fastnar i den!

Raspberry på svenska

För att få svenska tecken i raspberry om du kör Raspbian (dvs Debian för Raspberry) på den så kan du göra följande:

Redigera först /etc/locale.gen och se till att kommendera IN de rader för de du vill kunna ställa in. Det gör du genom att ta bort # på raden för det språks locale du vill använda.

För svenska har du egentligen tre stycken att välja på:


# sv_SE ISO-8859-1
# sv_SE.ISO-8859-15 ISO-8859-15
# sv_SE.UTF-8 UTF-8

Den första är med tangentbordsmappen ISO Latin som användes i tidigare versioner av Windows, AmigaOS och tidigare Linux-system. I dag används troligen UTF-8 i stället och om det inte fungerar bra för dig rekommenderas ISO-8859-19 i stället eftersom den innehåller vissa uppdaterade tecken (exempelvis ’€’).

Efter att du redigerat filen sparar du den och sedan kör du följande:

sudo /usr/bin/locale-gen

När den är klar (kan ta några minuter) så har den genererat alla filer som behövs. Nu kan du ställa in ditt språk i bash genom att t.ex. redigera filen .bashrc i din hemkatalog.

Lägg exempelvis in följande rader sist i filen:


export LANG=sv_SE.UTF-8
export LC_MESSAGE=sv_SE.UTF-8
export LC_COLLATE=sv_SE.UTF-8
export LANGUAGE=sv:en

Naturligtvis byter du ut UTF-8 osv mot det som passar för den locale du vill ha. Många föredrar som sagt ISO-8859-15 i stället.