Archive for the ‘linux’ Category

Eudyptula-utmaningen

januari 31, 2016

Who is behind this?

A set of convoluted shell scripts that are slow to anger and impossible to debug.

I slutet av november fick jag höra om Eudyptula-utmaningen, och har sedan dess försökt beta av de uppgifter som har tickat in över e-post.

Den stora utmaningen från början var att konfigurera e-posten korrekt. Html-formaterade e-postmeddelanden är förbjudna och gmails webmail rekommenderas inte. Det slutade med att jag installerade Mutt, kommandoradsbaserad e-postklient. (Bitvis besvärlig men fullt fungerande.)

Efter det lilla skriptet hade godkänt min förfrågan om att deltaga började uppgifterna trilla in. Jag kan inte gå in i detaljer om uppgifterna eftersom det skulle bryta mot reglerna. Lite svävande kan jag säga att jag hitintills har genomfört fyra uppgifter av varierande slag. Jag har fått bygga en enkel modul och kompilera min egen kärna utifrån Linus git-repository. Jag har blivit tvungen att läsa lång torr dokumentation och jag har fått söka på nätet.

Jag har inte alltid lämnat in en acceptabel lösning på första försöket utan fått kritik och ledtrådar för att kunna fortsätta arbetet. Kritiken kommer alltid på ett bra sätt som inte fått mig att känna mig dum utan endast pekar ut knasigheter eller brister. Hela utmaningen är väldigt rolig och trots det lugna tempot i början lär jag mig mer än jag trodde.

Det som är bitvis problematiskt är att ibland tar det tid innan feedback lämnas eller att en korrekt lösning godkänns. Uppgift fem lämnades in den 15:e Januari och jag väntar fortfarande med spänning på att få reda på ifall jag klarat den eller inte.

Remember, this is not a race, there is no rush, if tasks take a while to
be graded, enjoy the time to go do something else.  There is a lot more
in life other than Linux kernel programming.

… Ett litet skript med svar på allt …

FSCONS2011

november 16, 2011

I helgen var jag på FSCONS, Free Software Conference and Nordic Summit, och det är alltid lika roligt och inspirerande att möta och lyssna på alla dessa entusiastiska fri-mjukvaroförespråkare. Det var mycket intressanta föreläsningar och intressant att prata med folk under luncherna och runt evenemanget.

  • Bitcoin: Bitcoin är en populär digital valuta. Bitcoin är distribuerad och bygger på peer-to-peer-transaktioner som säkras med hjälp av ett block-baserat transaktionssystem. Ett Bitcoin är idag värt ungefär 2 € vill man experimentera med denna valuta kan man besöka the bitcoin faucet. De stora fördelarna med Bitcoin är att pengarna överförs snabbt och säkert utan att varken avsändare eller mottagare behöver avslöja sin identitet för någon, nackdelen är att valutan är helt obunden till någon form av fysisk säkerhet utan har bara ett värde för att ett värde har bestämts.
  • The Design of Gnome 3: Utvecklingen av skrivbordshanteraren Gnome påbörjades 1998 och är nu inne i sin tredje iteration (den första var tydligen inte lätt att använda för människor och innovation hade avtagit i den andra). Fokus har flyttats mot att enkelt kunna söka efter applikationer på systemet istället för att navigera i menyer samt att snabbt och enkelt kunna integrera webb-applikationer i systemet. Gnome 3 är mer konfigurerbart än tidigare varianter och kan förändras och utökas med hjälp av CSS och javascript.
  • Erlang simulator for embedded systems: Detta visade sig vara ett system för att skapa en tillståndsmaskin som representerar ett inbyggt system. Det faktiska systemet analyseras genom att signaler in till systemet och signaler ut från systemet och matchas till varandra (varje utsignal räknas som ett tillstånd i tillståndsmaskinen). Kod och exempel finns på projektets repo på github.
  • Theming GTK+ Applications through CSS: Uppenbarligen delar CSS och GTK+ en del rent strukturellt, dvs. båda visar enkla element för att skapa ett GUI. På grund av likheterna har GTK+ utvecklarna valt att använda CSS för att på ett enkelt sätt kunna göra förändringar av en applikations utseende. GTK+ inställningsmöjligheter är lite större än CSS vilket innebär att CSS-syntaxen har utökats för att kunna beskriva GTK+-applikationen ordentligt.
  • Arduino: Den för tillfället mest hajpade hobbyelektronikprodukten Arduino är en öppen plattform för att göra prototyper av enkla elektroniksystem. Systemet består av en serie kretskort som har ett standardiserat gränssnitt samt en enkel programmeringsmiljö.
  • SPDY: Eftersom HTTP-huvudena växer och avancerad webbfunktioner driver upp antalet överföringar skapade google protokollet SPDY. SPDY (som utalas speedy) ska bland annat minska laddningstider med 50%, tillåta många parallella HTTP-överföringar över en TCP-session. Idag finns det ett par fristående referensimplementationer, bland annat webbläsaren Chrome har stöd för SPDY (i en utvecklingsgren) och libSPDY.
  • Back to the future with Algol68: Algol68 är ett av de tidigaste programmeringsspråken som är utvecköat och designat för att vara ett verktyg. Språkets stora fördel (jämfört med föregångaren Algol60) är att dess dokumentation är helt otvetydig eftersom funktionaliteten har beskrivits med ”van Wijngaarden grammatik”. Språket användes aldrig särskilt mycket, delvis på grund av den komplexa specifikationen och att språket använder icke-standardiserade begrepp samt att ingen komplett implementation av en Algol68-kompilator någonsin gjordes.

Lördagens Keynote-föredrag var en intervju med Richard Stallman, FSF’s grundare. Jag håller inte riktigt med i hans extrema attityd men han var väldigt karismatisk och rolig att lyssna på. Söndagens keynote var lite mer seriöst och handlade om att vi måste vara aktivister ifall vi vill sprida fri mjukvara, aktivister i detta fallet innebär att vi ska var aktiva delaktiga och sträva efter att sprida fri mjukvara.

Jag deltog också i en diskussion om Fri-mjukvaro-feminism där vi försökte isolera vilka jämlikhetsproblem kvinnor i fri-mjukvaro-grupperingar upplever..

Debian Squeeze och viloläge för eeePC

september 30, 2011

I söndags uppgraderade jag Debian på min eeePC (1005 HA) till Squeeze. och upptäckte ganska snabbt att datorn gjorde en omstart nio gånger av tio när den startade upp från viloläget. Detta gjorde att viloläget bliv ganska redundant och jag började söka efter lösning. Lyckligtvis har Squeeze varit i cirkulation upp mot ett halvår nu så jag hade inga större problem att hitta den här buggrapporten.

Diskussionen svallar och efter ett tag kommer man till slutsatsen att det är ett problem med kärnan och inte pm-utils (skripten som försätter datorn i viloläge). Debugging fortsätter frenetiskt genom att senaste fungerande kärna söks upp och patchar läggs på en efter en tills den/de patchar som orsakar problemet hittas. Denna process tog circa sex veckor innan första försöket till fix släpps i squeeze’s stable-proposed-updates arkiv.Den patchade kärnan har fortfarande inte gått in i updates-arkivet, men finns som sagt att hämta från stable-proposed-updates:

Lägg till följande rad i etc/apt/sources.list

deb http://ftp.fr.debian.org/debian/ stable-proposed-updates main

Kör sedan

aptitude update

för att läsa in det ny arkivet.

När man sedan startar aptitude har linux-image-2.6.32-5-686 dykt upp under upgradable packages->kernel. Markera denna för uppgradering (med tangenten +) och utför sedan installationen (med g).

Med apt-get borde förfarandet efter modifiering av sources.list vara

apt-get update && apt-get install linux-image-2.6.32-5-686

Efter uppgraderingen har jag inte haft några problem alls med viloläget och boot-tiderna i Squeeze är fantastiska jämfört med Lenny.

Edit: Fixat sources.list-tillägget

Förvirrade morgonfunderingar

januari 23, 2010

Vad säger folk egentligen när dom ska kolla upp något fakta på Wikipedia? Man borde kanske säga att ”Man slår upp det i Wikipedia” men det jag allt som oftast använder är ”Jag wikipediar upp det”eller ”Wikipedia upp det ifall du är osäker”. Detta är alldeles säkert inte korrekt svenska men man blir förstådd iallafall. Vad säger ni?

I veckan har jag haft lite strul med Woodstock (min stationära dator), efter en stor uppdatering av operativsystemet (Gentoo Linux) slutade systemet att boota och gav bara felmeddelandet inotify_init failed: No such file or directory. efter att ha klattrat in ett gäng sökningar på felmeddelandet i google hittade jag ett forum där de hävdade att man nedgraderade till en tidigare version av udev. Läst och gjort fungerade det fortfarande inte, dock med ett nytt felmeddelande: inotify_init failed: Function not implemented. Detta fick mig att fundera över exakt vad inotify är och var det kommer ifrån så jag sökte och fann en artikel på wikipedia. Redan i första raden av artikeln fick jag en jätteledtråd:

inotify is a Linux kernel subsystem that provides file system event notification.

Aha, tänkte jag, någonstans när man konfigurerar kärnan kan man kanske välja in det här systemet. Efter lite letande hittade jag två poster som hade med inotify att göra och efter en snabb omkompilering bootar systemet igen.

Jag undrar hur länge snön kommer ligga kvar? Det är jättemysigt att ha den här. Igår hade vi ett litet snöbollskrig som verkligen fick stämningen att stiga. Snön är inte helt täckande men landskapet är mestadels vitt och världen känns stor och ljus, hoppas verkligen den ligger ett tag till!

Jag sitter på en buss, det är relativt tidigt och jag har inte fått mitt morgonkaffe. Det finns bara en sak att göra: Ta fram en bok och njuta av resan.

Ok allt var inte funderingar men lite var det iallfall.

Jets’n’Guns

maj 21, 2009

Förra veckan hade Linux Game Publishing rea och jag lyckades få tag i Jets’n’Guns för Linux till ett humant pris!

Jets’n’Guns är en modern sidscrollande shoot ’em up där spelaren kontrollerar ett rymdskepp och flyger olika uppdrag som allt som oftast går ut på att skjuta på allt som rör sig och en del saker som står still. Uppdragen är ofta charmiga och är inte helt utan humor. Uppdraget jag har just nu är att eskortera en konvoj med kvinnliga forskare som är under ständigt hot från galaxens manliga population…

Spelet är fullpackat med saker som kan sprängas, bonusar som kan fångas, hemliga nivåer, power-ups och intergalaktiska liftare vilket gör att det alltid finns ett delmål. Mellan nivåerna/uppdragen kan man köpa eller uppgradera vapen och skepp vilket skulle kunna ge ett visst strategiskt element om det inte vore för vapnens coolhetsfaktor. Mina beslutsförlopp ser ut ungefär så här:

Jag borde uppgradera skeppet så jag tål mer och kanske köpa bättre kylning…Ohhh jag har råd med en autospårande kanon, den tar vi! …och där var pengarna slut, min plan får vänta…

Just här är mitt skepp fullt upptaget med att explodera...

Just här är mitt skepp fullt upptaget med att explodera...

Ett så här actionpackat spel kräver vettig musik för att komplettera upplevelsen och Machinae Supremacy har skrivit ett soundtrack som är hårt hektiskt och stämningsfullt. Machinae Supremacy blandar hårdrock med synthslingor och har vid flera tillfällen utnyttjat C64ans SID-chip i sin musik.

Spelet är en aning farligt för mig eftersom hela kvällar tenderar att försvinna i en dimma av skepp, explosioner och automateld. Spelet är fruktansvärt kul och alla som tycker shoot ’em ups är roliga borde testa.

Nintendokänsla från RetroUSB

januari 19, 2009

I fredags fick jag min beställning från retroUSB, två stycken modifieringskit för NES/SNES. Dessa kit (som många redan gissat) gör så att den klassiska Nintendo- och Super Nintendo-kontrollern kan kopplas till en PC via USB. Idag på lunchen satte jag mig och skruvade isär en av de handkontroller jag haft liggande. Det första steget blev att grovrengöra kontrollern för att sedan klippa den gamla sladden.

När det ser ut så här är det ingen återvändo

När det ser ut så här finns det ingen återvändo

Efter att ha klurat lite över kopplingsschemat (det är något utav en överdrift att kalla bilden man fick med för ”kopplingsschema”) satte jag igång med lödandet och lyckligtvis var det inte så svårt. Lödpaddarna är ganska stora så det är lätt att löda dit tåtarna.

Det var relativt lätt att löda även om jag inte är en stjärna på det här området.

Det var relativt lätt att löda även om jag inte är en stjärna på det här området.

När man kommit så här långt är det lätt att tro att man är färdig men så är det inte! det är två kontakter som skall lödas över enligt den här bilden. Efter detta var gjort funkade kontrollern hur bra som helst och det var bara att skruva ihop. (Notera att ”bara” används i sin lösaste form, det tog nästan en kvart att sätta ihop kontrollern igen)

Efter en del pulande fick allt plats.

Efter en del pulande fick allt plats.

Väl hemma var det bara att plugga i kontrollern och sätta sig och spela, dock hade jag inget ljud till en början eftersom FCE Ultra använder OSS och debian kör med ALSA som standard, men med hjälp av lite magi (aoss, en wrapper för OSS till ALSA om jag är rätt informerad).

Borta från värden spelandes Bubble Bobble...

Borta från världen spelandes Bubble Bobble...

Julstök

december 23, 2008

Om ett par timmar bär det iväg norrut till släkt, vänner och julfirande. De senaste dagarna har jag julstökat dvs. jag har gjort Fudge och Chocolate Chip Cookies med kokos, slagit in julklappar, hittat julläsning (Artemis Fowl av Eoin Colfer), fixat snö (på Woodstocks skrivbord åtminstone (med hjälp av xsnow)), handlat, planterat om en blomma och städat.

Woodstocks skrivbord med xSnow aktivt

Woodstocks skrivbord med xSnow aktivt

Doctor Octoroc har nu färdigställt andra halvan av 8-bit Jesus och det kompletta albumet finns nu för nedladdning. För er som glömt så är 8-bit Jesus ett album där den gode doktorn har tagit en del Nintendo-musik och en del julmusik för att sedan gå ner till studion och sammanfoga dessa (antingen med magi eller med hjälp av en svets, jag är inte riktigt säker) till underbart katchiga melodier.

8-bit Jesus är nu färdig och har nu fått sig ett nytt omslag.

8-bit Jesus är nu färdig och har nu fått sig ett nytt omslag.

Ha en riktigt god jul!

Sylvester del 3

oktober 8, 2008

Efter del 1 och 2 har jag en dator som fungerar ypperligt men som inte har en enda pinal som gör den till en media-dator. Det jag vill att min media-dator skall kunna göra är att spela musik och video samt ladda ner podcasts åt mig. Självklart skall användargränssnittet också vara hyggligt tilltalande.

En viktig detalj jag inte beskrivit än är hur X.org ställdes in för att visa bild på min TV. Min TV har HDMI-ingångar och Sylvester har en DVI-utgång, praktiskt nog är DVI och HDMI är kompatibla och kräver enbart en sladd som passar i båda ändar (DVI->HDMI). För att ställa in X.org för att ge en signal som passade jag min tv använde jag gentoo-wikis guide till HDMI. I mitt fall blev monitor sektionen i Xorg.conf:

Section "Monitor"
Identifier   "Philips26"
VendorName   "Philips"
ModelName    "26PFL5322"
Option       "IgnoreEDID"
VertRefresh  30-90
HorizSync    20-150
ModeLine     "720p" 73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync
ModeLine     "1080i" 74.52 1920 1952 2016 2208 1080 1084 1096 1126 -hsync -vsync interlace
DisplaySize  320 180
EndSection

Efter jag lagt till detta producerar Sylvester kristallklar bild. Nu är all hårdvara fungerande och endast mjukvaran återstår.

Det finns många grafiska gränssnitt för mediadatorer att välja mellan och mitt val föll på MyMediaSystem (MMS) för att det var rätt minimalistiskt, konfigurerbart och communitien var trevlig (jag lyckades till och med hjälpa till att lösa en bugg). De funktioner jag använder är ogg/mp3-uppspelning, webbradio, video från disk/DVD, Spel och Python-applets. Jag valde att installera från källkod eftersom jag ville avaktivera vissa features och aktivera andra ickestandard features. För att installera på debian:

Ladda ner de paket MMS är beroende utav:

aptitude install libimlib2-dev libsdl1.2-dev autoconf bzr build-essential
aptitude install libxine-dev mplayer-nogui pkg-config
aptitude install w32codecs libtag1-dev libsqlite0-dev libpcre3-dev
aptitude install liblircclient-dev libtool gettext libalsaplayer-dev

Ladda ner senaste versionen av MMS från projektets repository och installera från källkoden.

bzr get http://bazaar.launchpad.net/~anders-gnulinux/mms/1.0.9 mms-1.0.9
cd mms-1.0.9
./configure --enable-python --disable-inotify --enable-lirc \
--enable-game --disable-epg
make
su -c  "make install"

Jag skippade inotify för jag kunde inte hitta ett paket som med rätt version för att passa med mms. Detta gav ett fungerande MMS men jag stötte på problem i grundkonfigurationen när jag vill köra ett spel. Ifall spelet körs i fullskärm återställs inte bilden till MMS (som per default körs i fullskärm), detta beror nog på någon liten bugg i openChrome. Dock kan problemet lätt gås runt genom att redigera /etc/mms/Config och ändra raden

fullscreen = true

till

fullscreen = false

samt ändra värdena för h_res och v_res så de motsvarar skärmupplösningen. I mitt fall:

h_res=1024
v_res=768

Detta gör att programmet startas i ett fönster med samma storlek som skärmen vilket ger ett intryck som är identiskt med fullskärmsalternativet.

För att starta MMS direkt från uppstart används GDM (Gnome Display Manager) (som är installerat tillsammans med Debians grundsystem) samt Fluxbox startscript. GDM konfigureras till att logga in media-användaren automatiskt vid uppstart användandes den förinställda fönsterhanteraren (som sätts till Fluxbox). Detta görs genom att lägga till raderna

AutomaticLoginEnable=true
AutomaticLogin=media-user

i /etc/gdm/gdm.conf. Eftersom vi inte vill köra Fluxbox utan MMS byter vi ut raden

exec /usr/bin/fluxbox

mot

exec /usr/local/bin/mms

i filen ~/.fluxbox/startup. Detta innebär att när Sylvester slås på kommer MMS startas direkt, men avslutar vi MMS hoppar vi tillbaka till login-skärmen och kan välja att starta Gnome för att surfa eller skriva dokument (varför man nu skulle vilja det).

Efter dessa steg dyker MMS upp när datorn startat

Efter dessa steg dyker MMS upp när datorn startat.

De mjukvaror jag sedan installerat för att komplettera mediaspelaren är

  • Peapod – Automatisk nedladdning av podcasts
  • SuperTux – Super Mario Bros-liknande plattformsspel
  • Frozen Bubble – PuzzleBubble-klon

Än så länge fungerar systemet hur bra som helst, dock har jag stött på patrull med min hembyggda IR-mottagare som gör systemet en gnutta instabilt så fort den kopplas in. Jag ska ta tag i problemet vilken dag som helst nu, hoppas jag.

Sylvester del 2

juli 27, 2008

Förra delen lämnade av efter en snabb beskrivning av Sylvesters hårdvara och montering, vilket lämnar mjukvaran. Den här delen kommer ta upp installation och konfigurering av operativsystemet.

Som OS valde jag Debian (Etch) eftersom drivrutiner finns tillgängliga från VIA, det har ett bra pakethanteringssystem, det är enkelt att konfigurera och anpassa samt att Debian är en Linux-distribution jag länge velat prova.

Den stora nackdelen med Debian är att den stabila varianten har en relativt gammal kärna (2.6.18 ) vilket innebar att ett par saker inte fungerade som de skulle: hårddisk samt de inbyggda grafik- och ljud-kretsarna.

Dessa problem yttrade sig genom att maskinen låste samtliga aktiviteter under tiden någon större mängd data skulle läsas eller skrivas från/till hårddisken, ljudkretsen genererade helt enkelt inget ljud och den grafiska prestandan var låg (endast VESA). Dessa problem kunde dock lösas med drivrutiner från VIAs hemsida samt med öppna drivrutiner från tredje part, men inte utan pyssel. VIAs drivrutiner var byggda för en tidigare version av kärnan (Debian Etch 2.6.18-4) vilket innebar att installations-scripten inte fungerade utan drivrutinerna fick läggas till manuellt.

Hårddisken var den enklaste att fixa då den drivrutin som VIA tillhandahåller nästan går att installera automatiskt, och det var inte svårt att utifrån installations-scriptet utröna hur det var tänkt att installeras:

wget http://www.viaarena.com/Driver/via-ide_patch-debian4.0-20070612.tgz
tar -xzvf via-ide_patch-debian4.0-20070612.tgz
cd via-ide_patch-debian4.0-20070612.tgz
cp via82cxxx.ko /lib/modules/2.6.18-6/kernel/drivers/ide/pci
echo "via82cxxx.ko" >> /etc/initramfs-tools/modules
mkinitramfs -o /boot/initrd.img-2.6.18-6-686

De två sista raderna bygger en ramdisk (inkluderandes den nya via82cxxx.ko kernelmodulen) som laddas vid uppstart.

Problemet med grafiken var dock svårare, VIAs egna drivrutiner fick jag inte att kompilera men lyckligtvis hittade jag projektet Open Chrome. Open Chrome är en öppen X.org-drivrutin för VIAs grafik-chipset, drivrutinen inkluderar inte alla finesser ännu men den fungerar iallafall. Open Chrome var ganska enkel att installera tack vare en fin installationsguide. (Nu när jag kikade verkar det finnas ett debian-paket för att installera via apt, det hade varit ännu enklare.)

Problemet med ljudet krävde också att en kärnmodul laddades ned från VIA, tyvärr kan VIAs debian etch release inte installeras i sin helhet pga mindre skillnader i kärnan. Lyckligtvis räcker den del som kan installeras för att få ljudet att fungera.

cp /lib/modules/2.6.18-6-686/kernel/sound/pci/hda/snd-hda-codec.ko ./snd-hda-codec.ko.bak
wget http://www.viaarena.com/Driver/via_debian_4.0_linux_hd_audio_ig_v0.8.tar.gz
tar -xzvf via_debian_4.0_linux_hd_audio_ig_v0.8.tar.gz
cd VIA-HDA-v1.40-Debian4.0_bin/Debian_4.0
cp snd-hda-codec.ko /lib/modules/2.6.18-6-686/kernel/sound/pci/hda/snd-hda-codec.ko
rmmod snd-hda-codec && modprobe snd-hda-codec

Original-drivrutinen kan återställas genom att kopiera tillbaka snd-hda-codec.ko.bak till original katalogen:

cp snd-hda-codec.ko.bak /lib/modules/2.6.18-6-686/kernel/sound/pci/hda/snd-hda-codec.ko

Efter dessa modifieringar har vi ett system som klarar av dess tänkta funktion: uppspelning av ljud och bild. Mer om mjukvaran som används kommer i nästa del (förhoppningsvis tar det inte fyra månader tills den är klar…).

Påskhelgen

mars 25, 2008

Påskhelgen har varit skön, jag har hunnit sova ut ordentligt, läst och haft tid att syssla med ett projekt jag skjutit upp ett bra tag nu. Den har också innefattat god mat och godis.

Förra veckan var riktigt hektiskt på jobbet, jag irrade runt och arbetade överallt utom där jag egentligen borde så den långa helgen var verkligen en välkommen paus. Trots att det var lite hektiskt var det åtminstone delvis intressant arbete med att montera ihop ett par värmepumpar och verifiera att mjukvaran fungerade som den skulle. På grund av detta blev det en del flängande runt på fabriksgolvet, men jag tror inte jag orsakade några större olyckor.

Under helgens dagar med sämre väder läste ganska mycket, dels Val McDermids Killing the Shadows (i norsk tradition en deckare) och dels Captain Britain: Birth of a Legend. Jag läser väldigt lite deckare så jag tyckte att det var dags, boken fick jag rekommenderad för bra länge sedan eftersom den involverar geografisk profilering (ifall det heter så på svenska, finns säkert någon bättre fackterm) som jag tycker är fascinerande. Captian Britain är en Marvel-serie skapad som en brittisk motsvarighet till Captain America och åtminstone de avsnitt jag hitintills läst har varit riktigt bra.

Det projekt jag sysslat med har varit min nya dator Sylvester, döpt efter en viss svart-vit katt som aldrig fångar något. Sylvester kommer att agera mediasystem samt filserver och kommer stå bredvid tv:n. Jag kör Debian och kommer använda My media system som användargränssnitt. I helgen har jag lyckats överstiga de mest besvärliga hårdvarurelaterade problemen och med lite tur har jag ett något så när fungerande system till helgen.

Jag har också handlat (krukor och frön inför våren) och turistat lite i Helsingborg.