i=0; while [ $i -le 7 ]; do printf "\e[?2l\eC\eC\ec\10$i\ebFHello,\ec\11$i\ebF world\ec\100\e<\n"; i=expr $i + 1; done

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.
i=0; while [ $i -le 7 ]; do printf "\e[?2l\eC\eC\ec\10$i\ebFHello,\ec\11$i\ebF world\ec\100\e<\n"; i=expr $i + 1; done
Exportera registerfil i Registereditorn regedit den markerade undermappen HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\{Type}\{SWnummer}\Device Parameters som edid.reg.
sed '1,3d;s/\x0//g;s/,//g;s/\\//;s/.*://g;s/\x0d//g' edid.reg | xxd -r -p - edid.dat
Visa med edid-decode edid.dat
curl -s -k https://www.abc.se/programbanken/abc/abc800/spel/adventur/starwars.bas | sed ’y/`{|}~@[\\]^$\x7F/éäöåüÉÄÖÅܤ■/’ | dos2unix | less
Alternativ som fungerar i Git Bash för Windows, men ej i t.ex. WSL Ubuntu från Microsoft Store:
curl -s -k https://www.abc.se/programbanken/abc/abc800/spel/adventur/starwars.bas | tr ’`{|}~@[\\]^$\177’ ’éäöåüÉÄÖÅܤ■’ | dos2unix | less
Dessa rader visar ABC 80- & ABC 800-dokument och program i less.
cd /mnt/c/Windows/media ; find . -name ’*.wav’ | while read file; do printf ”echo $file\npowershell.exe -c ’(New-Object Media.SoundPlayer \”C:/Windows/media/$file\”).PlaySync();’\n” ; done > ~/sounds.sh ; . ~/sounds.sh
Själva PowerShell-kommandot med varianter finns här: https://superuser.com/questions/101974/play-a-sound-maybe-wav-from-windows-line-command
echo ’C:\Users\pi\Documents\Arduino’ | sed ’s|\\|/|g;s|\(.*\):|/mnt/\L\1|’
wslpath är ett alternativ.
pip list –outdated –format=freeze
Visar utdaterade paket.
pip install –upgrade paket
Uppgradera paketet paket.
Windows PowerShell:
(Get-ItemProperty -Path ’HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion’ -Name BuildLab).BuildLab
14955.rs_prerelease.161020-1700
(Get-ItemProperty -Path ’HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion’ -Name BuildLabEx).BuildLabEx
14955.1000.amd64fre.rs_prerelease.161020-1700
Bash on Ubuntu on Windows:
/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -command ”(Get-ItemProperty -Path ’HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion’ -Name BuildLabEx).BuildLabEx”
14955.1000.amd64fre.rs_prerelease.161020-1700
wget http://www.sanomautbildning.se/Laromedel/Gymnasie–vuxenutbildning/Vard-och-omsorgsprogrammet/Programgemensamma/Vard–och-omsorgsarbete-1/Lyssna-mp3-filer/ ; grep ’\.mp3’ index.html | sed ’s/\.mp3/.mp3\n/g’ | grep ’\.mp3’ | sed ’s/.*href=”/wget http:\/\/www.sanomautbildning.se/’ > wget.sh ; . wget.sh
find / -xdev -type f -perm /a+x 2>/dev/null | while read file; do ldd $file | grep libncurses.so | sed -e ’/^[^\t]/ d’ | sed ”s|.*|$file|”; done
Detta hittar alla installerade program som använder biblioteket nCurses.
Hittade:
/home/pi/blockis/blockis
/home/pi/blockis/blockis_max7219
/usr/bin/timidity
/usr/bin/mplayer
/usr/bin/mtr
/usr/bin/slabtop
/usr/games/atc
/usr/games/battlestar
/usr/games/hunt
/usr/games/canfield
/usr/games/robots
/usr/games/phantasia
/usr/games/sail
/usr/games/dab
/usr/games/boggle
/usr/games/hangman
/usr/games/rain
/usr/games/gomoku
/usr/games/worms
/usr/games/cribbage
/usr/games/snake
/usr/games/worm
/usr/games/mille
curl -s ’http://github-awards.com/users?utf8=%E2%9C%93’ | sed -n -e ’/<.*”>.*<\/option>/ s/<.*”>//p’ | sed -e ’s/<.*>//’ -e ’s/^ *//’ -e ’s/ /_/g’ -e ’s|\(.*\)|<a href=”https://en.wikipedia.org/wiki/\1″>\1</a><br>|’ | sort
Detta skriver ut länkar till programspråkens sidor på engelska Wikipedia. Dock fungerar länken inte alltid och ibland hamnar man fel, kommer till en sida med en lista med olika betydelser eller hamnar på en sida där man kan söka efter ordet. Hamnar man fel kan man ofta hitta länken till sidan med listan med olika betydelser och där leta efter ”programming language”.
Ovanstående enradare skriver idag ut:
ABAP
ActionScript
Ada
Agda
AGS_Script
Alloy
ANTLR
ApacheConf
Apex
APL
AppleScript
Arc
Arduino
ASP
AspectJ
Assembly
ATS
Augeas
AutoHotkey
AutoIt
Awk
Batchfile
Bison
BitBake
BlitzBasic
BlitzMax
Bluespec
Boo
Brainfuck
Brightscript
Bro
C
C#
C++
Ceylon
Chapel
Cirru
Clean
CLIPS
Clojure
CMake
COBOL
CoffeeScript
ColdFusion
Common_Lisp
Component_Pascal
Cool
Coq
Crystal
CSS
Cuda
Cycript
Dart
DCPU-16_ASM
D
Delphi
DM
Dogescript
DOT
Dylan
eC
Ecl
E
Eiffel
Elixir
Elm
Emacs_Lisp
EmberScript
Erlang
Factor
Fancy
Fantom
F#
FLUX
Forth
FORTRAN
Frege
Game_Maker_Language
GAMS
GAP
GDScript
Glyph
Gnuplot
Go
Golo
Gosu
Grace
Grammatical_Framework
Groovy
Hack
Harbour
Haskell
Haxe
HaXe
HTML
Hy
IDL
Idris
IGOR_Pro
Inform_7
Io
Ioke
Isabelle
Jasmin
Java
JavaScript
J
JSONiq
Julia
Kotlin
KRL
LabVIEW
Lasso
LiveScript
Logos
Logtalk
LOLCODE
LookML
LoomScript
LSL
Lua
Makefile
Mathematica
Matlab
Max
Mercury
Mirah
M
Monkey
Moocode
MoonScript
Nemerle
nesC
NetLogo
Nimrod
Nit
Nix
Nu
Objective-C
Objective-C++
Objective-J
OCaml
Omgrofl
ooc
Opal
Opa
OpenEdge_ABL
OpenSCAD
Ox
Oxygene
Oz
Pan
Papyrus
Parrot
Pascal
PAWN
Perl6
Perl
PHP
PigLatin
Pike
PLSQL
PogoScript
Powershell
PowerShell
Processing
Prolog
Propeller_Spin
Protocol_Buffer
Puppet
PureBasic
Pure_Data
PureScript
Python
Racket
Ragel_in_Ruby_Host
REALbasic
Rebol
Red
RobotFramework
Rouge
R
Ruby
Rust
SAS
Scala
Scheme
Scilab
Self
Shell
Shen
Slash
Smalltalk
SourcePawn
SQF
SQL
Squirrel
Standard_ML
Stata
SuperCollider
Swift
SystemVerilog
Tcl
TeX
Thrift
Turing
TXL
TypeScript
UnrealScript
Vala
VCL
WebIDL
Verilog
VHDL
VimL
wisp
Visual_Basic
Volt
xBase
XC
XML
Xojo
XProc
XQuery
XSLT
Xtend
Zephir
Zimpl
sshfs pi@raspberrypi1.local:/media ~/mnt
Nu kan man använda filsystemet på den andra datorn som om det vore lokalt. Detta är bl.a. bra för att köra program som använder den lokala hårdvaran för att behandla data som finns på en annan dator. Man måste först installera paketet sshfs. När man vill koppla ner kör man:
sudo umount ~/mnt
ssh -XC pi@raspberrypi2.local x2x -east -to :0.0
Man måste köra X Windows på bägge datorerna och de måste ha nätverk så att man kan SSH:a mellan dem. Man kör ovanstående på den vänstra skärmen och efter det kan man köra muspekaren till den högra skärmen och då kopplas tangentbordet också till den skärm/dator där muspekaren är. Att kopiera och klistra mellan skärmarna (och därmed mellan datorerna) går att göra genom att markera för att kopiera och klicka med mittknappen/mushjulet för att klistra in — d.v.s. på vanligt X-manér. Däremot fungerar inte kopiering och inklistring med Ctrl+C och Ctrl+V mellan datorerna med x2x, ty den funktionen går ej via X, men det lär systemet Synergy klara. Paketet x2x är installerat från början i Raspbian Jessie. Avahi (d.v.s. Linux-versionen av Apple’s Bonjour) är också installerat från början, så man kan använda datorernas namn och slipper ta reda på IP-nummer.
Det finns några shellskript som gör hanteringen bekvämare:
https://github.com/mobluse/x2x
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.
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.)
mv PROJECT PROJECT.org
curl -u ’USER’ https://api.github.com/user/repos -d ’{”name”:”PROJECT”}’
git clone https://github.com/USER/PROJECT.git
cd PROJECT
cp -r ../PROJECT.org/* .
Uppdatera och lägg upp några filer.
ls | while read file; do git add $file; done
git commit -a -m ’First commit.’
git push -u origin master
När man vill uppdatera senare gör man:
git commit -a -m ’Another commit.’
git push
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.
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.
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.
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”);’
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
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
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 352×292 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 352×288 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 352×288 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 352×288 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 1280×1024 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 352×292 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 352×288 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 352×288 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 176×144 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.
ls /usr/share/figlet/ | sed ’s/\..*//’ | while read font; do toilet -F list | sed -n ’/”/ {s/”\(.*\)”.*/\1/;p}’ | while read filter; do toilet -f $font -F $filter Orbin 2> /dev/null; done; done
Visar texten ”Orbin” som skylttext med alla typsnitt och filter. Idé från https://www.linux.com/learn/tutorials/790121-assorted-fun-linux-command-line-hacks.
perl -E’use Module::CoreList;print join(”\n”,Module::CoreList->find_modules(qr/.*/)).”\n”’
VICE emulerar CMB:s datorer med 6502/6510-processorer, t.ex. PET, VIC20, Commodore 64 (ä.k. VIC64/C64) och Commodore 128 (ä.k. C128) inklusive dess Z80-processor för CP/M-operativsystemet.
sudo apt-get install vice; wget http://www.zimmers.net/anonftp/pub/cbm/crossplatform/emulators/VICE/vice-2.3.tar.gz; tar xvf vice-2.3.tar.gz; cd vice-2.3/data; find . -name ’*’ -not -name ’*.*’ | sed ’s|\.\/\(.*\)|sudo cp \1 /usr/lib/vice/\1|’ > run.sh; . run.sh; cd ../..; rm -r vice-2.3; rm vice-2.3.tar.gz
Detta kan och bör optimeras i framtiden eftersom vi bara behöver extrahera de filer vi använder direkt till det ställe där de skall lagras.
På denna webbplats finns en guide i hur man programmerar 6502-assembler på C64:
http://digitalerr0r.wordpress.com/category/commodore-64/
Då används Dasm, t.ex.
./dasm.Linux.x86 test.asm -otest.prg -v3
wget -qO- http://packages.riscosopen.org/RISC-OS_Pico.zip | bsdtar -xvf- -C /media/riscospico/
Detta laddar ner och packar upp zip-filen på ett SD-kort anslutet via en adapter. Notera att SD-kortet i mitt fall heter /media/… men troligen heter något annat hos dig.
Om SD-kortet inte redan är formaterat så gör detta först:
sudo fdisk -l
För att hitta rätt enhet genom att t.ex. känna igen den på storleken.
Obs! Byt ut sde mot rätt enhet.
umount /dev/sde
sudo mkdosfs -n riscospico -F 32 -I /dev/sde
I mitt fall tog jag ut USB-adaptern och satte in den igen för att montera den.
curl -L -o editor.po http://translate.scratch.mit.edu/download/sv/editor/editor.po ; curl -L -o blocks.po http://translate.scratch.mit.edu/download/sv/blocks/blocks.po ; sudo cat blocks.po editor.po > ’/opt/Scratch 2/share/locale/sv.po’
Detta uppdaterar översättningen av Scratch 2 offlineredigeraren i Linux. Tag först backup av den ursprungliga sv.po med:
cp ’/opt/Scratch 2/share/locale/sv.po’ sv.po
Byt språkkoden sv mot valfri annan språkkod.
find . -name ’*.pdf’ -exec sh -c ’pdftotext ”{}” – | grep -H –label=”{}” –color -i ”RISC”’ \; 2> /dev/null
Denna rad hittar texten RISC/risc/Risc o.s.v. bland alla pdf-filer.
proj=12612306; mkdir sb2tmp; cd sb2tmp; curl -L http://projects.scratch.mit.edu/internalapi/project/$proj/get/ 2> /dev/null | tee project.json | grep -i MD5 | cut -d’ ’ -f2 | sed ’s/[\”,]//g’ | while read file; do curl -L -o $file http://scratch.mit.edu/internalapi/asset/$file/get 2> /dev/null; done; i=1; while [ $i -le `expr $( ls -1 | wc -l ) – 2` ]; do sed -i ”{s/ID\”: -1/ID\”: $i/;t end;b;:end;n;b end}” project.json; i=`expr $i + 1`; done; i=0; ( grep penLayerMD5 project.json; grep ’\(baseLayerMD5\|md5\)’ project.json ) | cut -d’ ’ -f2 | sed ’s/[”,]//g’ | while read file; do ext=`echo $file | cut -d. -f2`; mv $file $i.$ext; i=`expr $i + 1`; done; zip $proj.sb2 *; mv *.sb2 ..; cd ..; rm -r sb2tmp
Detta hämtar ett Scratch 2-projekt (sb2-fil) med det angivna numret. Notera att detta ej fungerar för Scratch 1.4-projekt, men för dem finns en enklare lösning, se annat inlägg.
Man kan också hämta ner alla projekten i en studio:
studio=263477; curl -L http://scratch.mit.edu/site-api/projects/in/$studio/1/ 2> /dev/null | sed -n ’/title.*projects\/[0-9]*/ {s/.*projects\/\([0-9]*\).*/\1/;p}’ | while read proj; do echo $proj; mkdir sb2tmp; cd sb2tmp; curl -L http://projects.scratch.mit.edu/internalapi/project/$proj/get/ 2> /dev/null | tee project.json | grep -i MD5 | cut -d’ ’ -f2 | sed ’s/[\”,]//g’ | while read file; do curl -L -o $file http://scratch.mit.edu/internalapi/asset/$file/get 2> /dev/null; done; i=1; while [ $i -le `expr $( ls -1 | wc -l ) – 2` ]; do sed -i ”{s/ID\”: -1/ID\”: $i/;t end;b;:end;n;b end}” project.json; i=`expr $i + 1`; done; i=0; ( grep penLayerMD5 project.json; grep ’\(baseLayerMD5\|md5\)’ project.json ) | cut -d’ ’ -f2 | sed ’s/[”,]//g’ | while read file; do ext=`echo $file | cut -d. -f2`; mv $file $i.$ext; i=`expr $i + 1`; done; zip $proj.sb2 * > /dev/null; mv *.sb2 ..; cd ..; rm -r sb2tmp; done
proj=12766255;wget -O $proj.sb http://projects.scratch.mit.edu/internalapi/project/$proj/get/
Detta hämtar ett Scratch 1.4-projekt (sb-fil) med det angivna numret. Notera att detta ej fungerar för Scratch 2-projekt. Här är en version med cURL som lär fungera på Mac OS X:
proj=12766255;curl -L -o $proj.sb http://projects.scratch.mit.edu/internalapi/project/$proj/get/
Följande hämtar ner alla projekt i en studio:
curl -L http://scratch.mit.edu/site-api/projects/in/244489/1/ 2> /dev/null | sed -n ’s|.*data-id=\”\([0-9]*\)\”.*|\1|p’ | while read proj; do curl -L -o $proj.sb http://projects.scratch.mit.edu/internalapi/project/$proj/get/; done
Detta raderar alla filer i en katalog som inte är binärfiler, d.v.s. icke Scratch 1.4-projekt:
file * | sed -n ’/:.*data/! {s/:.*//p}’ | xargs rm
mp3info -p ”%S\n” *.mp3 | awk ’{s+=$1} END {s/=3600; print s}’
Detta visar den totala speltiden i timmar på decimalform för alla mp3-filer i aktuell mapp.
mp3info -p ”%f;%S\n” Music/A\ Masterpiece\ Collection/*.mp3 | sort -t’;’ -k2nr
Lista mp3-filer sorterade efter längd på ljudet med längsta först.
mypwd=$(pwd); cat dirswoindex.txt | while read dir; do echo ”$mypwd/$dir”; cd ”$mypwd/$dir”; ls -1ap | sed ’s|\(^.*$\)|<a href=\”\1\”\>\1</a><br>|’ > default.html ; mv default.html b_i ; echo ’<!DOCTYPE HTML SYSTEM ”about:legacy-compat”><html><head></head><body>’ > h_i ; echo ’</body></html>’ > t_i ; cat h_i b_i t_i > default.html ; rm -f h_i b_i t_i ; done
Syftet är att man skall kunna surfa runt i filhierarkin trots att man inte har en webbserver som automatiskt genererar index-filer (innehållsförteckningar). Det finns en bugg i Ubuntu när man har monterat FTP-servrar som lokala filsystem som yttrar sig i att lägg till (>>) inte fungerar. Därför kringgår jag den buggen genom att skapa flera filer och slå ihop dem och sedan radera beståndsdelarna. Ovanstående är sista steget och föregås av:
awk ’NR==FNR{l[$0];next;} !(FNR in l)’ lines.txt dirs.txt > dirswoindex.txt
Syftet med ovanstående rad är att ta bort de rader ur en fil (dirs.txt) som finns numrerade i en annan fil (lines.txt).
cat dirswindex.txt | while read dir; do grep -n ”^$dir$” dirs.txt; done | sed ’s|:.*$||’ | sort -n | uniq > lines.txt
Ovanstående rad genererar radnummer för de rader som finns i en annan fil (dirswindex.txt) vars rader skall tas bort ur huvudfilen (dirs.txt).
find . -type d -name ’*’ | sort > dirs.txt
Ovanstående rad genererar en fil med alla underkataloger och är den fil ur vilken rader skall tas bort.
find . -name ’index.*’ | sort | sed ’s|/index\..*||’ > dirswindex.txt
Ovanstående rad genererar en fil med alla underkataloger som innehåller t.ex. index.html, index.htm eller index.php.
find /media/SEA_FAT32/ -size +512M 2> /dev/null | sed ’s/\(.*\)/”\1″/’ | xargs ls -l | sort -k5nr | cut -d’ ’ -f5- | less
Hittar alla filer på en enhet som är större än 0,5 GB och visar dem i fallande storleksordning.
sudo minicom -o -D /dev/ttyACM0
Startar minicom, ett terminalemuleringsprogram för serieportar. Detta fungerar t.ex. för DuinoMite-Mini via USB-porten. Kolla med dmesg vilken device som serieporten hamnar på.
vlc v4l2:///dev/video0:input=1:width=720:height=576
Startar VLC med live-visning av PAL komposit-video med hjälp av EasyGrabber (AGK Model: 10195, chipset: em2860) via USB. Alternativ för ansluten C64 (C64C):
mplayer tv:// -tv device=/dev/video0:input=1:width=720:height=576:fps=5 -hardframedrop -msglevel all=6 -vf crop=690:552:10:0 -zoom -vo x11 -fs
Tyvärr fungerar ljudet ej och bilden flimrar lite.
Man kan spela in bilden, men detta exempel är för Ubuntu 12.04 (Elementary OS Luna):
mencoder tv:// -tv driver=v4l2:norm=PAL:device=/dev/video1:input=1:width=720:height=576:outfmt=uyvy:fps=25:alsa:amode=1:forcechan=2:audiorate=48000:adevice=hw.1,0:forceaudio:immediatemode=0 -ffourcc DX50 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:turbo:vbitrate=1200:keyint=100 -oac mp3lame -lameopts cbr:br=128 -msglevel all=6 -vf pp=lb,crop=690:552:10:0 -o test.avi
Från http://easycap.blogspot.se/.
sudo mphidflash -v 15BA -p 0032 -r -n -w Olimex\ DuinoMite\ Mega\ MMBasic\ Project.hex
Detta flashar en DuinoMite-Mini med en ny version av DMBASIC eller MMBASIC. Innan detta måste man koppla in DuinoMite-Mini:n till Linux-datorn via USB och hålla ned användarknappen samtidigt som man trycker på resetknappen, d.v.s. User+Reset, där User fungerar som en skiftknapp. Då blinkar de gula och gröna lysdioderna omväxlande.
zgrep ’special\.pdf’ /var/log/apache2/access.log* | sed -r ’s/.*:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*(\[.*\]).*/\2 \1/’ | sort -k3n,3 -k2M,2 -t’/’
De IP-nummer som hämtat en viss fil på webbservern hittas. Loggfilen finns på olika ställen på olika servrar och äldre loggar brukar komprimeras och då behövs zgrep. Olika webbservrar ger olika loggfiler och därför måste enradaren anpassas.
ls *.zip | while read file; do unzip -l ”$file” | grep ’zx81.*\.rom’ && echo $file; done
I detta fall hittas filer med namn som börjar på ’zx81’ och slutar på ’.rom’ i samtliga zip-filer i aktuell katalog och zip-filens namn skrivs ut efter de funna filerna inom respektive zip-fil.
ls -tr | while read file; do convert $file -flop $file; done
Bilderna spegelvänds i samma tidsordning som de modifierades senast.
scp muzak.wav myusername@mywebsite.se:public_html/abc/80/
Denna rad laddar upp en fil till en SSH-server och med följande raderar man filen:
ssh myusername@mywebsite.se ’rm -f public_html/abc/80/muzak.wav’
Lösenordet får man skriva för hand, men man kan skicka flera filer samtidigt eller ett arkiv som man packar upp.
curl -T muzak.wav ftp://ftp.mywebsite.se/dl/ –user myusername:mypassword
Denna rad laddar upp en fil till en FTP-server. För att radera filen kan man använda:
curl ftp://ftp.mywebsite.se/dl/ -X ’DELE muzak.wav’ –user myusername:mypassword
i=1; while [ $i -le 9 ]; do fold -w 64 ramdisc0$i.zx4th > ramdisc0$i.zx4th.txt; i=`expr $i + 1`; done
Gör så att Forth-skärmar (screens) för programspråket ZX FORTH kan läsas som textfiler genom att lägga in radbrytningar efter var 64:e tecken i den ursprungliga filen. Här omvandlas 9 filer, numrerade 01-09.
rename ’s/\.82u$/\.txt/’ *.82u; ls -1 *.txt | sed ’s/\.txt$//’ | while read file; do ln -s $file’.txt’ $file’.82u’; done
Ändrar filtyp på alla filer i en katalog men behåller den gamla m.h.a. symboliska länkar för att externa http-länkar skall fortsätta att fungera.
sed ’/\.mp3/!d;s|.*href=\”\(\./mp3/.*\.mp3\)\”.*|curl -O \”http://www.tefy.se/\1\”|’ ../mp3_fysik_lpo1.htm > curl.sh; . curl.sh
sed ’/\.mp3/!d;s|.*href=\”\(\./mp3/.*\.mp3\)\”.*|curl -O \”http://www.tefy.se/\1\”|’ ../mp3_fysik_lpo2.htm > curl.sh; . curl.sh
sed ’/\.mp3/!d;s|.*href=\”\(\./mp3/.*\.mp3\)\”.*|curl -O \”http://www.tefy.se/\1\”|’ ../mp3_fysik_lpo3.htm > curl.sh; . curl.sh
sed ’/\.mp3/!d;s|.*href=\”\(\./mp3/.*\.mp3\)\”.*|curl -O \”http://www.tefy.se/\1\”|’ ../mp3_kemi_lpo1.htm > curl.sh; . curl.sh
sed ’/\.mp3/!d;s|.*href=\”\(\./mp3/.*\.mp3\)\”.*|curl -O \”http://www.tefy.se/\1\”|’ ../mp3_kemi_lpo2.htm > curl.sh; . curl.sh
sed ’/\.mp3/!d;s|.*href=\”\(\./mp3/.*\.mp3\)\”.*|curl -O \”http://www.tefy.se/\1\”|’ ../mp3_kemi_lpo3.htm > curl.sh; . curl.sh
Man kan hämta ner alla mp3-filer till böckerna Fysik Lpo och Kemi Lpo om man har sparat HTML-filen i katalogen ovanför katalogen mp3 som man skall stå i. Man kan hämta en HTML-fil med t.ex. kommandot:
curl -O http://www.tefy.se/mp3_fysik_lpo[1-3].htm
curl -O http://www.tefy.se/mp3_kemi_lpo[1-3].htm
Man måste öppna HTML-filerna för redigering i SeaMonkey och göra en liten ändring som man återställer och spara dem innan man kör enradarna. Resultatet av SeaMonkey-operationen är att ÅÄÖ & åäö byts ut mot HTML-entities: t.ex. Å. Detta behövs eftersom Sed ej verkar klara ÅÄÖ & åäö i den teckenkodning som filerna använder.
pdftk A=mbvim101.pdf B=mbvim102.pdf cat $(i=1; while [ $i -le 11 ]; do echo -n ”A$i B`expr 11 + 1 – $i` ”; i=`expr $i + 1`; done) output lsg-mbvim1.pdf
Min skanner med arkmatare (Brother MFC-5840CN) kan bara skanna enkelsidigt, men jag vill skanna en hög med 11 blad dubbelsidiga papper till ett dokument. Framsidorna av högen med papper finns skannade i filen mbvim101.pdf. Baksidorna av samma hög finns skannade med sista sidan först i filen mbvim102.pdf (det blir så automatiskt om man bara vänder på högen). Med enradaren ovan så sätts filerna ihop till en pdf-fil med rätt ordning på sidorna. Man kan ändra 11 i raden ovan (på två ställen) till antalet ark för att anpassa till sin egen hög med papper. Det går att få reda på antalet sidor med pdftk så även inmatningen av antalet ark kan automatiseras.
i=0; while [ $i -le 289 ]; do curl http://partiintresserade.se/?page=$i > PI$i.html; i=`expr $i + 1`; done
Raden hämtar ner samtliga sidor mellan 0 och 289 från webbplatsen och sparar dem i HTML-filer. Programmet kan t.ex. användas för att inhämta data för undersökande journalistik samt för samhällsvetenskaplig och historisk forskning.
sed ’/\.pdf/!d;s|.*=\”\(.*pdf\)\”.*|curl -O \”http://www.ciberdigital.net/books/\1\”|’ Index_of_books.html > curl.sh ; . curl.sh
php -r ’$_GET[cmd]=718750; $_GET[pid]=2; include ”DriveReporterServlet.php”;’
Att köra problematiska PHP-skript i terminalfönstret i stället för på webbservern ger bättre felmeddelanden.
find . -name ’*.html’ | xargs -n 1 sed -i ’/counter-ord-lang/ {N;s|<P><FONT.*</FONT></P>|<!– counter-ord-lang –>|}’
Jag hade en besöksräknare som inte längre fungerade och som jag ville ta bort från alla webbsidor. HTML-koden som skulle bytas ut spände som mest över två rader.
ssh login@dator.domän.se ”tar cf – ~/” | gzip -9 > backup.tar.gz
Denna rad gör säkerhetskopiering på ett helt konto på en annan dator utan att mellanlagra något i en temporärfil. Resultatet blir en packad fil på den lokala datorn. Fjärrdatorn kan ha Linux eller Solaris.
För STK500:
avrdude -c stk500v2 -p m8515 -P /dev/ttyUSB0 -U hfuse:r:h-fuse.txt:r -U lfuse:r:l-fuse.txt:r
För USB-ASP:
sudo avrdude -c usbasp -p m88 -U hfuse:r:h-fuse.txt:r -U lfuse:r:l-fuse.txt:r -U efuse:r:e-fuse.txt:r
Ovanstående rader för respektive mikrokontrollerprogrammerare lagrar säkringsvärdena i filer som måste tolkas med:
od -d h-fuse.txt | head -1 | sed -e ’s/0000000 *//’ | xargs -i perl -e ’$str= unpack(”B32”, pack(”N”,{})); $str =~ s/.*([01]{4})([01]{4})$/$1 $2/; print ”$str\n”;’
(AVR Fuses HOWTO Guide)
Alternativt för STK500:
avrdude -vv -c stk500v2 -p m8515 -P /dev/ttyUSB0 -F
Alternativt för USB-ASP:
sudo avrdude -vv -c usbasp -p m88
Här får man säkringsvärdena i hexadecimalt i slutet av en längre text.
sed -n ’s/\([^ ]*\)\( *\)/”\1″;/;/^”[A-Z][^e]/h;/@/G;/@/p’ riksdagen.txt|sed ’N;s/\n//;s/;$//’ > riksdagen2.txt
Koda om en textfil med e-postadresser och med rubriker med organisationsnamn så att den kan importeras av MySQL.
jar cvfM dos_pascal.jar dos_pascal.img
Denna rad skapar en jar-fil (Java archive) med en hårddiskavbild men utan manifest. Det är precis vad JPC.jar eller JPCApplet.jar (bantad JPC) behöver för att ladda hårddiskavbilden.
dd if=dos_pascal.img of=dos_pascal2.img bs=4096 count=512
Syftet med denna rad är att förkorta hårddiskavbilden för att spara minne vid körning. Om man först gjort defrag med full optimization i JPC (Java PC-emulator) på hårddiskavbilden och sedan chkdsk, så vet man hur mycket man kan förkorta filen. Sätt bs till klusterstorleken. Tänk på att sätta count något större än minimalt så att utrymme finns för temporära filer.
dd if=/dev/zero of=dos_pascal.img bs=1MB count=5
Denna rad används för att skapa en tom hårddiskavbild på 5 MB (5000000 B). Avbilden kan sedan fyllas med filer innefrån Java PC-emulatorn.
/usr/local/jdk1.6.0_06/bin/java -jar Downloads/JPC.jar -fda mem:floppy.img -hda dosprog.img -hdb dir:dosprog -boot fda
Denna rad startar Java PC-emulatorn med den inbyggda FreeDOS 1.1 på A:. C: motsvaras av en hårddiskavbild, och D: motsvaras av en katalog. Syftet är att preparera hårddiskavbilden genom att kopiera filer från katalogen.
sed -i ’//s//\\xa0/g;/\\xa0/s/’\”/”/g’ MKBTest.pl
Denna byter ut mot \xa0 ty WWW::Mechanize kräver detta. Sedan gör den om enkelcitat till dubbel för de redigerade raderna eftersom escape bara fungerar med dubbelcitat.
Följande gör det omvända:
sed -i ’/\\xa0/s/\\xa0/\/g;//s/”/’\”/g’ MKBTest.pl
”../gsed407x/sed” ”/220k\.rm/!d;s|.*\(ocw.*rm\).*|curl -O http://ocw.mit.edu/ans7870/8/8.03/f04/video/\1|” ../MITPhysics8_03Vibrations.htm >curl8_03.bat
Man måste först installera gsed för att generera bat-filen i Windows Vista Kommandotolken och curl för att köra den.
dirs=`find mkb -type f | sed ’s|^mkb||’`; for dir in $dirs; do ln -sf ’/usr/local/mkb’$dir ’mkb2’$dir; done
Detta förutsätter att katalogstrukturen redan är skapad med t.ex.:
dirs=`find mkb -type d| sed ’s|^mkb|mkb2|’`; for dir in $dirs; do mkdir $dir; done
find mkb -name ’*~’ -type f| xargs rm
gunzip -c ../backup.tar.gz| tar -xv
find mkb ! -name MKBCfg.pm -type f| xargs tar -czvf backup_mkb.tar.gz
find . -name ’*.cgi’ ! -name wwwwais.cgi -type f| xargs -n 1 sed -i ’1s|^.*$|#!/usr/local/bin/perl|’
Detta förutsätter att alla CGI-program utom undantaget är Perl-program.
find . -name ’*.cgi’ ! -name wwwwais.cgi -type f| xargs tar -czvf backup_cgi.tar.gz
Ett program är undantaget eftersom det är en binär fil (kompilerat C-program).
who | while read user term date time junk; do echo $user has been on $term since $date $time; done
Man kan ”pajpa” till while om man använder read.
QUERY_STRING=’mkbadmsid=1&func=redirect&uRId=6′ perl -W admin.pl 2>&1 | grep ’admin.pl’
QUERY_STRING=’func=show&cId=100000′ perl -W mkb.pl
Bra för avlusning av kod.
find . -type f ! -name ’*~’ |xargs grep ’\[include[^.]*\]’
Backupfiler undantas.
find . -type f |xargs grep ’action=”mkb’ |sed ’/~/d;s/:.*//’ |sed ’s|.*|sed -i ’\”/action=”mkb/s#action=”mkb#\&.pl#’\” &|’ |uniq >run.sh; sh run.sh
find . |xargs grep ’<html\|<body\|<table’ |sed ’/~/d;s/:.*//’ |sed ’s/.*/mv & &.html/’ |uniq >run.sh; sh run.sh
javascript:20-2*Math.pow(3,2)+4/2*3
Klistra in i adressrutan och tryck Enter. Är lika med 8. Fungerar även i MSIE 6. Webbläsarnas JavaScript-skal är något som man nästan alltid har tillgång till och därför är det utmärkt att lära sig. I Firefox 2 kan man skriva enbart javascript: och då få en felkonsol där man kan skriva in JavaScript-kommandon utan att behöva skriva javascript: före.
find / -xdev -type f |xargs grep ’export.\+PATH=’ 2>/dev/null
zcat mkb.sql.gz | sed ’/^CREATE TABLE/,/^)/!d;/^)/s/;/;\n/’ > ../tables.txt
mysql -uroot -ppasswd -Dmkb_lub -e’show tables’|sed ’s/ *| *//’|sed -n ’/^[a-z]/p’ |sed ’s/\(.\+\)/select * from \1\;/’
dirs=`find ../jinfo -type d | sed ’s|^../jinfo/||;/^\.\./d’`; for dir in $dirs; do mkdir $dir; done
Enradare i programmeringssammanhang är program som skrivs på en rad och avslutas med Enter. (Även om raden skulle vara bruten p.g.a. sidbredden så skall koden skrivas in på en rad.) Programmen är oftast kryptiska men är inte avsiktligt tillkrånglade och utför (oftast) nyttiga saker. De är troligen ibland inte optimala utan bör ses som en utgångspunkt för diskussion. Inga garantier ges för att de fungerar, men de är kopierade från terminalfönstret eller historiken. I vissa fall är de automatiskt uppladdade till bloggen och då finns en liten risk för buggar i uppladdningsprogrammet. Det är tryggt att skapa en kopia av en katalog och underkataloger (cp -R dir1 dir2) innan man utför ett kommando som skall förändra många filer i katalogen. När man har kontrollerat att programmet gjorde vad det skulle så kan man ta bort kopian (rm -R dir2).
Denna blogg är ett hobbyprojekt, men bygger bl.a. på erfarenheter ur arbetslivet.
Alla inlägg i denna blogg ”Enradare” är copyright respektive bloggare. Programmen i blogginläggen är licensierade som öppen källkod enligt GNU GPL v3. Själva blogginläggen är licensierade enligt Creative Commons BY-SA.