Enradare

Enradare

Enradare i programmeringssammanhang är program som skrivs på en rad och avslutas med Enter

Enradarna är oftast kryptiska men inte avsiktligt tillkrånglade och utför (oftast) nyttiga saker. Denna blogg är ett hobbyprojekt, men bygger även på erfarenheter ur arbetslivet. Nya besökare, se första inlägget.

Slipp annonser i webbläsaren på Raspberry Pi (adblock)

Bash, Raspbian WheezySkapad av M.O.B. 2015-06-28 20:13
wget http://winhelp2002.mvps.org/hosts.txt; cat /etc/hosts hosts.txt > hosts2.txt ; sudo mv /etc/hosts /etc/hosts.org; sudo mv hosts2.txt /etc/hosts

Eventuellt kan man behöva redigera hosts2.txt innan flytt:
nano hosts2.txt

Tipset på filen kom härifrån, men jag installerar ingen webbserver.



  • Kommentarer(0)//enradare.orbin.se/#post65

Arbetsförmedlingens öppna data & API

Bash, Raspbian WheezySkapad av M.O.B. 2015-06-13 01:50
Idag upptäckte jag något mycket positivt:
http://www.arbetsformedlingen.se/Globalmeny/Om-webbplatsen/Oppna-data.html
Se också tekniskbeskr_ledigajobb.pdf. Man får väl se hur länge det roliga varar.

Det innebär att man kan skriva program som söker jobb automatiskt, ty jag har redan skrivit ett program som skickar e-post via GMail. Problemet har tidigare varit att hitta de få annonser som tillåter att man söker jobbet via e-post, men nu kan jag hämta ner alla annonser inom pendlingsavstånd och söka de jobben via e-post.

Man kan även vaska fram annonser som använder jobbsökningstjänster man redan har, ty det snabbar ju upp jobbsökandet att slippa fylla i uppgifter. Jag har även skrivit screenscraping-program med WWW::Mechanize, så man skulle kunna ansöka automatiskt även via formulär.

Visa alla län med läns-ID:
curl -H Accept-Language:sv http://api.arbetsformedlingen.se/af/v0/platsannonser/soklista/lan

Visa ansökningsraden med ID för alla annonser i Stockholms län som innehåller Angular och som kan sökas via e-post:
keyword=angular; URL=api.arbetsformedlingen.se/af/v0/platsannonser; AL=Accept-Language:sv; curl -sGH $AL $URL/matchning -d "lanid=1&nyckelord=$keyword&antalrader=9999" | sed 's|annonsid":"|\n|g' | sed '/^{.*/d;s|".*||' | while read id; do curl -sH $AL "$URL/$id" | sed -n 's|.*ansokan":{\([^}]*\)}.*|\1 id=|p'; echo "$id"; done | sed '/epostadress.*@/!d'

Visa annons med visst ID:
id=2719885;curl -H Accept-Language:sv "api.arbetsformedlingen.se/af/v0/platsannonser/$id"

Nu finns Jopply -- ett program för att söka jobb via kommandoraden i Linux, Windows och Mac OS X (det senare dock ännu ej testat). Kräver Perl och en Perl-modul för att hämta webbsidor.

(Jag har varit arbetslös med a-kassa eller i arbetsmarknadspolitisk åtgärd i sammanlagt 14 år sedan 1991. Jag anser att vi har en felaktig arbetsmarknadspolitik i Sverige, ty jag är nog inte mindre meriterad än många av dem som har jobb. Två personer fick ett bidrag på 100000 kr från Vinnova för något som är mindre användbart än ovanstående rader. Jag fick inte ens delta i Hack4Sweden. Nu kan jag dock söka jobb mer effektivt.)

  • Kommentarer(0)//enradare.orbin.se/#post64

Högläsning av webbsidor i Raspbian på Raspberry Pi

Bash, Raspbian WheezySkapad av M.O.B. 2015-03-21 04:39
curl https://github.com/mobluse/demo-programs-sv/blob/master/README.md | espeak -v mb/mb-sw1 -m --stdin -w tmp.wav ; ls -l tmp.wav ; omxplayer tmp.wav ; rm tmp.wav

Prova även mb/mb-sw2 och sv i stället för mb/mb-sw1. Man kan även byta ut omxplayer mot cvlc.

  • Kommentarer(0)//enradare.orbin.se/#post62

Windows 95 i Raspbian på Raspberry Pi med DOSBox och QEMU

Bash, Raspbian WheezySkapad av M.O.B. 2015-03-20 03:03
Det går att köra Windows 95 i Raspbian på Raspberry Pi 1 B+ (och troligen även i 1 A, 1 A+, 1 B och 2 B). Man kan alltså skapa en tyst, billig Windows-dator med Raspberry Pi 1 B+ för 199 kr, men man kan köpa begagnade Windows-datorer ännu billigare.

Eftersom Raspberry Pi 1 har ARM v6 så måste man använda x86-emulatorer. Enligt min erfarenhet är QEMU stabilare än DOSBox. Det är dock lättare att komma igång med DOSBox efter som man slipper kompilera det. Man kan tillverka sin egen Windows 95-hårddiskavbild utgående från t.ex. en CD-ROM, men det är lite krångligt ty drivrutinerna måste fungera i emulatorerna. För att hitta en Windows 95 image som fungerar, googla på xda android.dosbox w95.img.

Den finns i en rar-fil så du måste installera unrar, vilket tyvärr är lite krångligt eftersom rar är ofri programvara och inte ingår som standard i Raspbian Debian Linux, se http://raspberrypi.stackexchange.com/questions/3617/how-to-install-unrar-nonfree. Jag bara avkommenterade en rad och ändrade inte innehållet i /etc/apt/sources.list. Nya rar-arkiv bör inte skapas eftersom formatet är ofritt och det finns bättre fria alternativ, t.ex. 7z.

Packa upp rar-filen som innehåller hårddiskavbilden med
unrar e W95.rar

Då får man W95.IMG som man kan byta namn på till t.ex. w95-1.img. MS-DOS/FreeDOS är dock inte skiftlägeskänsligt.

Installera DOSBox med
sudo apt-get install dosbox

Starta Windows 95 i Linux med
dosbox -c "mount d ~/Downloads" -c "d:" -c "imgmount a w95-1.img" -c "boot w95-1.img"

Man bör stänga av Windows som vanligt med Start-knappen. När det står att man kan stänga av datorn i rött på svart så stänger man DOSBox-fönstret. För att få DOSBox att släppa muspekaren kan man trycka AltGr+Enter två gånger. Detta togglar fullskärm, men skärmen blir inte större, men man får en svart ram.

För att lägga till och ta bort filer kan man montera imagen när man inte kör den med

sudo mount -t msdos -o loop,offset=32256 w95-1.img /mnt

Då får man korta filnamn, vilket är det enda DOSBox verkar klara. Vid behov får man byta filnamn inne i Windows med ren i MS-DOS eller Utforskaren.

ls /mnt
sudo mkdir /mnt/TRANSFER
sudo cp Exempel.class /mnt/TRANSFER/


(Java 1.0-kompatibla program kan köras med jview i denna version av Windows 95.)

När man har lagt till och tagit bort filer måste man avmontera:

sudo umount /mnt

Den inbyggda QEMU fungerar ej med Windows 95, men lär fungera med andra OS. Man måste själv kompilera, se http://www.raspberrypi.org/forums/viewtopic.php?f=75&t=13365 och http://www.raspberrypi.org/forums/viewtopic.php?f=62&t=10635&p=712848. Jag kompilerade och installerade QEmu så här:
unrar x qemudidi2.rar ; cd qemu ; chmod +x configure

./configure --target-list="i386-softmmu i386-linux-user" --enable-sdl --prefix=/usr --extra-cflags="-O3 -mfloat-abi=hard -mfpu=vfp -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -march=armv6zk" --audio-drv-list="alsa oss sdl pa"

make
sudo make install
cd ..

Man kan kopiera imagen/hårddiskavbilden med
cp w95-1.img w95-2.img

Starta QEMU med 32 MB RAM (8, 16, 24, 64, 128 fungerar också):
qemu w95-2.img -m 32
Man kan behöva köra detta kommando en gång till om det blir ett fel.

Om man maximerar och avdekorerar fönstret (tryck Alt+Space) samt slår på automatiskt dold panel (högerklicka på panelen, välj inställningar och avancerade fliken) så får man en fullskärmsupplevelse. Ctrl+Alt togglar inmatningen till Windows-fönstret. Man stänger av Windows 95 inifrån Windows, men QEMU stänger själv fönstret till skillnad från DOSBox.

QEmu verkar klara långa filnamn när man överför filer till imagen:

sudo mount -t vfat -o loop,offset=32256 w95-2.img /mnt

Efter överföringen så får man avmontera som vanligt. Efter att man använt VFAT så verkar man inte kunna använda hårddiskavbilden i DOSBox.

  • Kommentarer(0)//enradare.orbin.se/#post61

Ladda ner MagPi

Bash, Raspbian WheezySkapad av M.O.B. 2015-03-10 13:00
i=1; while [ $i -le 9 ]; do wget http://www.raspberrypi.org/magpi-issues/MagPi0$i.pdf; i=`expr $i + 1`; done; i=10; while [ $i -le 33 ]; do wget http://www.raspberrypi.org/magpi-issues/MagPi$i.pdf; i=`expr $i + 1`; done; wget http://www.raspberrypi.org/magpi-issues/MagPiSE1.pdf

Detta laddar ner tidningen The MagPi nr 1-33 plus specialutgåvan.

  • Kommentarer(0)//enradare.orbin.se/#post60

Installera Perl-modulen Tkx på Raspberry Pi

Bash, Raspbian WheezySkapad av M.O.B. 2015-02-28 21:44
Syftet med dessa rader är att installera Tkx i Raspbian på Raspberry Pi som tyvärr innehåller en bugg i denna miljö som dock kringgås här med Sed (installation av Tkx med vanliga CPAN i Ubuntu 14.04 LTS för x86-32 gick utan problem). CPANMinus drar dessutom mindre minne än CPAN. Jag ger som vanligt inga garantier och särskilt inte för http://cpanmin.us. Du måste köra i X när du installerar Tkx med cpanm, ty det gör självtest med fönster under installationen. Installationen går bra, men sedan fungerar inte sista raden eller programexempel.
sudo apt-get update && sudo apt-get install gcc-4.7 tcl8.5-dev
sudo curl -L http://cpanmin.us | perl - --sudo App::cpanminus
wget http://www.cpan.org/authors/id/V/VK/VKON/Tcl-1.02.tar.gz
tar xvf Tcl-1.02.tar.gz
cd Tcl-1.02/
perl Makefile.PL
sed -i 's|#include <tcl.h>|#include "tcl-core/include/tcl.h"|' Tcl.xs
make

sudo make install
sudo cpanm Tkx
cd ..
rm -rf Tcl-1.02

perl -MTkx -e 'print Tkx::info("patchlevel");'


  • Kommentarer(0)//enradare.orbin.se/#post59

Visa en topplista över skriptspråk på datorn

Bash, Raspbian WheezySkapad av M.O.B. 2015-02-27 22:20
Visar en topplista över skriptspråk på datorn, d.v.s. vad som kommer efter shebang (#!):
find / -type f -executable -exec grep -Il . {} \; 2> /dev/null | xargs -n1 head -1 | sed -n 's|#! *\([^ ]*\) *\([^- ]*\).*|\1 \2|p' | sort | uniq -c | sort -nr


Exempel från Raspbian på min Raspberry Pi:
2071 /bin/sh
132 /usr/bin/perl
97 /bin/bash
45 /usr/bin/python3.2
42 /usr/bin/env python
36 /usr/bin/python2.7
35 /usr/bin/python2.6
32 /usr/bin/python
18 /usr/bin/env ruby
18 /usr/bin/env perl
8 /usr/bin/python3
7 /usr/bin/ruby1.9.1
5 /usr/bin/install-menu
5 /usr/bin/env node
3 /usr/bin/env rake
2 /usr/bin/pypy
1 /usr/sh
1 /usr/local/bin/python
1 /usr/bin/ruby
1 /usr/bin/mawk
1 /usr/bin/env nickle
1 /bin/tcsh
1 /bin/sed


Totalt:
2170 Shell
201 Python
150 Perl


Exempel från Ubuntu 14.04 på min Lenovo 3000 N200:
4649 /bin/sh
615 /usr/bin/perl
339 /bin/bash
321 /usr/bin/python
151 /usr/bin/env python
112 /usr/bin/python3
57 /usr/bin/env python3
50 /usr/bin/env perl
32 /usr/bin/python2.7
27 /usr/bin/python3.4
12 /usr/bin/env texlua
7 /usr/bin/ruby1.9.1
4 /usr/bin/env python
3 /usr/bin/env ruby
2 /usr/bin/php
2 /usr/bin/make
2 /usr/bin/lua
2 /usr/bin/gforth
2 /usr/bin/awk
1 /usr/share/gforth/0.7.0/kernl32l.fi
1 /usr/sh
1 /usr/local/bin/python
1 /usr/local/bin/expect
1 /usr/bin/wish
1 /usr/bin/python
1 /usr/bin/mawk
1 /usr/bin/env wish
1 /usr/bin/env python2.7
1 /usr/bin/env nickle
1 /usr/bin/env bash
1 /bin/tcsh
1 /bin/sed


  • Kommentarer(0)//enradare.orbin.se/#post58

Byta mellan komposit video och olika HDMI-upplösningar

Bash, Raspbian WheezySkapad av M.O.B. 2015-02-23 00:43
Här finns 6 skalskript för Raspbian på Raspberry Pi för att byta mellan komposit video (PAL) och olika upplösningar på HDMI (VGA, SVGA, XGA, SXGA). Det visas ett roterande tigerhuvud och sedan måste man trycka Ctrl+C följt av Ctrl+Alt+F2 och Ctrl+Alt+F1 (eller Ctrl+Alt+F7 om kommandot körs från X Window System). Syftet är att kunna testa en aktiv HDMI till VGA-adapter och få bild på en skärm även om det inte fungerade från start. Det är lite underligt att man måste byta till en annan Ctrl+Alt+F1-F7-konsol än den man är på för att se en bild. Man måste först kompilera hello_tiger.bin och kan göra det enligt instruktionerna på http://www.raspberrypi.org/learning/demo-programs/, men detta fungerar också:
cd /opt/vc/src/hello_pi/hello_tiger/ ; make ; cd

pal.sh:
#!/bin/sh
tvservice -o
tvservice --sdtvon='PAL 4:3'
/opt/vc/src/hello_pi/hello_tiger/hello_tiger.bin

vga.sh:
#!/bin/sh
tvservice -o
tvservice --explicit='CEA 1 HDMI'
/opt/vc/src/hello_pi/hello_tiger/hello_tiger.bin

svga.sh:
#!/bin/sh
tvservice -o
tvservice --explicit='DMT 9 HDMI'
/opt/vc/src/hello_pi/hello_tiger/hello_tiger.bin


xga.sh:
#!/bin/sh
tvservice -o
tvservice --explicit='DMT 16 HDMI'
/opt/vc/src/hello_pi/hello_tiger/hello_tiger.bin


sxga.sh:
#!/bin/sh
tvservice -o
tvservice --explicit='DMT 35 HDMI'
/opt/vc/src/hello_pi/hello_tiger/hello_tiger.bin


ntsc.sh
#!/bin/sh
tvservice -o
tvservice --sdtvon='NTSC 4:3'
/opt/vc/src/hello_pi/hello_tiger/hello_tiger.bin


  • Kommentarer(0)//enradare.orbin.se/#post57

Enbildstagning med en webbkamera

Bash, Raspbian WheezySkapad av M.O.B. 2015-01-25 00:38
Jag har två webbkameror kopplade till en Raspberry Pi som tar enbildstagning och det fungerar bra om man använder lägre upplösning än den maximala för vissa kameror. Visserligen kraschar kamerorna ibland, men då startas hela systemet om och därefter fungerar den felande kameran igen. Jag tror detta är ett bra projekt för att visa nyttan med RPi, ty Raspbian har drivrutiner för de flesta tillbehör till skillnad från t.ex. Android. Många har en massa gamla webbkameror hemma som kan komma till nytta igen. Det står här om hur man använder en webbkamera från Raspberry Pi:
http://www.raspberrypi.org/learning/webcam-timelapse-setup/
Det är dock inte så enkelt som det verkar med de webbkameror jag provat eftersom man oftast får palettfel och att Raspberry Pi med ARM-processor inte verkar ha samma kapacitet att ta emot högupplösta bilder som en laptop-PC med en Intel-processor. USB verkar också vara långsammare på Raspberry Pi än på en PC. Problemen med webbkameror och Raspberry Pi kan också bero på strömförsörjning, men jag har en strömförsörjd USB-hubb så det borde fungera. Först testar jag kamerorna i operativsystemet Ubuntu 14.04 LTS Linux på en laptop-PC och därefter i Raspbian på Raspberry Pi. Även i Ubuntu måste man ladda in bibliotek som sköter bl.a. palettkonvertering och det lär bero på att webbkamerorna är gamla. Längst ner i inlägget finns skript för att ta enbildstagning varje minut som laddas upp till ett webbhotell, göra filmer och hämta dessa från annan dator. Namnen på webbkamerorna kommer från kommandot lsusb och är oftast inte samma som står på förpackningen.

Ubuntu 14.04:
STMicroelectronics Imaging Division (VLSI Vision) Aiptek PenCam 1:
gvfs-mount -s gphoto2; sleep 10; LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l2convert.so fswebcam -d v4l2:/dev/video1 -i 0 --jpeg 95 -S 5 -r 352x292 test.jpg
Works!
gvfs-mount -s gphoto2; sleep 10; vgrabbj -d /dev/video1 -w 352 -H 292 -D 7 -f test.jpg
Works!

Microdia Sweex Mini Webcam
LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l2convert.so fswebcam -d v4l2:/dev/video1 -i 0 --jpeg 95 -S 20 -r 352x288 test.jpg
Works!
vgrabbj -d /dev/video1 -i cif -z 20 -D 7 -f test.jpg
Works!

Pixart Imaging, Inc. Digital camera, CD302N/Elta Medi@ digi-cam/HE-501A:
gvfs-mount -s gphoto2; sleep 10; LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l2convert.so fswebcam -d v4l2:/dev/video1 -i 0 --jpeg 95 -S 2 -r 352x288 test.jpg
Works!
gvfs-mount -s gphoto2; sleep 10; vgrabbj -d /dev/video1 -i cif -D 7 -f test.jpg
Works!

Pixart Imaging, Inc. Q-TEC WEBCAM 100:
LD_PRELOAD=/usr/lib/i386-linux-gnu/libv4l/v4l2convert.so fswebcam -d v4l2:/dev/video1 -i 0 --jpeg 95 -S 2 -r 352x288 test.jpg
Works!
vgrabbj -d /dev/video1 -i cif -D 7 -f test.jpg
Works!

Chicony Electronics Co., Ltd USB 2.0 Camera (built-in to laptop):
fswebcam -d v4l2:/dev/video0 -i 0 --jpeg 95 -S 20 -r 1280x1024 test.jpg
Works!
vgrabbj -d /dev/video0 -i sxga -z 20 -D 7 -f test.jpg
Works!

Raspbian Wheezy:
STMicroelectronics Imaging Division (VLSI Vision) Aiptek PenCam 1:
LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libv4l/v4l2convert.so fswebcam -d v4l2:/dev/video0 -i 0 --jpeg 95 -S 5 -r 352x292 test.jpg
Works!
vgrabbj -d /dev/video0 -w 352 -H 292 -D 7 -f test.jpg
Works!

Microdia Sweex Mini Webcam:
LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libv4l/v4l2convert.so fswebcam -d v4l2:/dev/video0 -i 0 --jpeg 95 -S 40 -r 352x288 test.jpg
Works, but better for lower resolutions.
vgrabbj -d /dev/video0 -i sif -z 20 -D 7 -f test.jpg
Works!

Pixart Imaging, Inc. Digital camera, CD302N/Elta Medi@ digi-cam/HE-501A:
LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libv4l/v4l2convert.so fswebcam -d v4l2:/dev/video0 -i 0 --jpeg 95 -S 20 -r 352x288 test.jpg
Works, but gray.
vgrabbj -d /dev/video0 -i cif -z 20 -D 7 -f test.jpg
Works, but gray.

Pixart Imaging, Inc. Q-TEC WEBCAM 100:
LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libv4l/v4l1compat.so fswebcam -d v4l1:/dev/video0 -i 0 --jpeg 95 -S 20 -F 2 -r 176x144 test.jpg
Works, but necessary skipping leads to:
"Error synchronising with buffer 0.
VIDIOCSYNC: Resource temporarily unavailable".
vgrabbj -d /dev/video0 -i qcif -z 20 -D 7 -f test.jpg
Works!

Script camera.sh running using crontab:
#!/bin/sh
PREFIX=/home/pi/camera
DATE=$(date +"%Y-%m-%d_%H%M")
vgrabbj -d /dev/video1 -w 352 -H 292 -z 5 -D 0 -f $PREFIX/pencam1_$DATE.jpg
vgrabbj -d /dev/video0 -i qcif -z 20 -D 0 -f $PREFIX/miniwebcam_$DATE.jpg
curl -T "$PREFIX/{pencam1,miniwebcam}_$DATE.jpg" ftp://ftp.mysite.se/mydir/ --user myusername:mypassword
if [ ! -s $PREFIX/pencam1_$DATE.jpg -o ! -s $PREFIX/miniwebcam_$DATE.jpg ] ; then /sbin/reboot ; fi
# End of camera.sh


Making movies in Raspbian Wheezy on Raspberry Pi:
find . -name 'pencam1_*' -empty | xargs rm -f
ls pencam1_*.jpg > pencam1_stills.txt
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=88/73:vbitrate=8000000 -vf scale=352:292 -o pencam1_timelapse.avi -mf type=jpeg:fps=24 mf://@pencam1_stills.txt


find . -name 'miniwebcam_*' -empty | xargs rm -f
ls miniwebcam_*.jpg > miniwebcam_stills.txt
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=11/9:vbitrate=8000000 -vf scale=176:144 -o miniwebcam_timelapse.avi -mf type=jpeg:fps=24 mf://@miniwebcam_stills.txt


Making movies in Ubuntu MATE on Raspberry Pi:
find . -name 'pencam1_*' -empty | xargs rm -f
rm pencam1_stills.txt; for f in pencam1_*.jpg; do echo "file $f" >> pencam1_stills.txt; done
ffmpeg -r 24 -f concat -i pencam1_stills.txt -r 24 -vcodec libx264 -crf 20 -g 15 -vf scale=352:292 pencam1_timelapse.mp4


find . -name 'miniwebcam_*' -empty | xargs rm -f
rm miniwebcam_stills.txt; for f in miniwebcam_*.jpg; do echo "file $f" >> miniwebcam_stills.txt; done
ffmpeg -r 24 -f concat -i miniwebcam_stills.txt -r 24 -vcodec libx264 -crf 20 -g 15 -vf scale=176:144 miniwebcam_timelapse.mp4

Download, using other Linux-computer, from Raspberry Pi:
scp pi@dojopi1.local:camera/pencam1_timelapse.avi .
scp pi@dojopi1.local:camera/pencam1_stills.txt .
scp pi@dojopi1.local:camera/miniwebcam_timelapse.avi .
scp pi@dojopi1.local:camera/miniwebcam_stills.txt .
ssh pi@aeblapi1.local 'rm -f camera/*.avi'

Om du ser något anmärkningsvärt i videon så kan du hitta ungefär rätt bild bland stillbilderna genom att t.ex. beräkna hur många procent händelsetiden är av den totala tiden och hitta radnumret i textfilen med stillbilderna med samma procentsats.

  • Kommentarer(0)//enradare.orbin.se/#post56