The Wayback Machine - https://web.archive.org/web/20220819200122/https://enradare.orbin.se/
Blog Image

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.

Visa typsnitt från Applesoft Toolkit

Bash, Raspbian Buster Posted on 2022-02-06 22:06

Man kan visa alla tecken i typsnitt som följer med Applesoft Toolkit, t.ex. ASCII.SET eller BYTE.SET:
for n in $(cat ASCII.SET.txt | sed 's/ /\n/g' | sed '/:/d;/^BS/d;/^AS/d;/^$/d');do python3 -c "print('%7s'%('%8s'%bin(0x$n)[2:])[::-1][:-1])";done | sed 's/0/./g;s/1/#/g'

Först måste man extrahera ASCII.SET från diskettavbilden. Det är en binär fil, men spara som ASCII, ty då sparas den i Apple II monitor-format:
./fid -d ../ApplesoftToolkit\ V1.0\ (by\ Apple\ Computer).dsk

Applesoft Toolkit är en diskett till Applesoft BASIC som bl.a. innehåller ett system för att skriva text på grafikskärmen.



VT52 färger i PuTTY

Bash, Raspbian Buster Posted on 2019-10-12 23:12

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

PuTTY i Raspbian Buster Linux kan visa färger i VT52-läge. Det är den enda terminalemulatorn jag känner till som kan detta.


Konvertera från RegEdit till edid.dat och visa i klartext

Bash, WSL Ubuntu 18.04 Posted on 2018-10-15 16:27

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


Läs ABC80&ABC800-dokument i Linux!

Bash, Raspbian Jessie Posted on 2018-05-01 19:17

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.



Spela Windows-ljud i Ubuntu från Microsoft Store

Bash, Ubuntu 14.04 Posted on 2018-01-30 01:25

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



Omvandla Windows-sökväg till WSL-sökväg

Bash, Ubuntu 14.04 Posted on 2018-01-15 20:04

echo 'C:\Users\pi\Documents\Arduino' | sed 's|\\|/|g;s|\(.*\):|/mnt/\L\1|'

wslpath är ett alternativ.



Uppdatera pip-paket

Kommandotolken, Windows Vista Posted on 2017-12-10 21:10

pip list --outdated --format=freeze
Visar utdaterade paket.

pip install --upgrade paket
Uppgradera paketet paket.



Skriva ut Windows Build Version

Kommandotolken, Windows Vista Posted on 2016-10-11 12:44

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



Hämta ner alla ljudfiler till 'Vård- och omsorgsarbete 1'

Bash, Ubuntu 12.04 Posted on 2016-07-19 19:48

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



Hitta alla installerade program som använder biblioteket nCurses

Bash, Raspbian Jessie Posted on 2016-05-02 00:58

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



Visa alla dator- eller programspråk på GitHub

Bash, Ubuntu 14.04 Posted on 2016-03-02 00:57

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



Montera en annan dators filsystem

Bash, Raspbian Jessie Posted on 2016-01-13 23:50

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



Förena flera datorers X-skärmar med x2x

Bash, Raspbian Jessie Posted on 2016-01-13 19:03

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



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

Bash, Raspbian Wheezy Posted on 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.



Arbetsförmedlingens öppna data & API

Bash, Raspbian Wheezy Posted on 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.)



Skapa nytt GitHub-repo från mapp

Bash, Raspbian Jessie Posted on 2015-04-19 20:12

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



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

Bash, Raspbian Wheezy Posted on 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.



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

Bash, Raspbian Wheezy Posted on 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.



Ladda ner MagPi

Bash, Raspbian Wheezy Posted on 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.



Installera Perl-modulen Tkx på Raspberry Pi

Bash, Raspbian Wheezy Posted on 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");'



Visa en topplista över skriptspråk på datorn

Bash, Raspbian Wheezy Posted on 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



Byta mellan komposit video och olika HDMI-upplösningar

Bash, Raspbian Wheezy Posted on 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



Enbildstagning med en webbkamera

Bash, Raspbian Wheezy Posted on 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.



Gör alla möjliga skyltar med ASCII-konst

Bash, Ubuntu 14.04 Posted on 2014-10-05 14:53

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.



Visa installerade Perl-moduler

Bash, Ubuntu 12.04 Posted on 2014-06-20 18:11

perl -E'use Module::CoreList;print join("\n",Module::CoreList->find_modules(qr/.*/))."\n"'



Installera VICE i Ubuntu Linux

Bash, Ubuntu 12.04 Posted on 2014-06-02 01:51

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



Ladda ner och extrahera en zip-fil utan att mellanlagra

Bash, Ubuntu 10.04 Posted on 2014-05-04 18:08

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.



Uppdatera översättning i Scratch 2 offlineredigeraren

Bash, Ubuntu 10.04 Posted on 2014-02-25 09:12

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.



Sök efter text i pdf-filer

Bash, Ubuntu 10.04 Posted on 2013-12-11 22:30

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.



Hämta Scratch 2-projekt

Bash, Ubuntu 10.04 Posted on 2013-10-02 01:06

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



Hämta Scratch 1.4-projekt

Bash, Ubuntu 12.04 Posted on 2013-09-29 01:10

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



Totala speltiden för en samling mp3-filer

Bash, Ubuntu 10.04 Posted on 2013-09-11 01:20

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.



Sortera mp3-filer efter längd

Bash, Ubuntu 10.04 Posted on 2013-09-07 23:54

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.



Skapa default.html automatiskt där index.* inte existerar

Bash, Ubuntu 10.04 Posted on 2013-06-29 21:36

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.



Hitta alla större filer & visa sorterat

Bash, Ubuntu 10.04 Posted on 2013-05-24 13:42

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.



Starta terminalemulering mot en serieport

Bash, Kubuntu 8.04 Posted on 2013-02-24 20:02

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å.



Visa komposit video live

Bash, Raspbian Jessie Posted on 2013-02-24 19:36

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/.



Flasha en DuinoMite-Mini med ny firmware

Bash, Kubuntu 8.04 Posted on 2013-02-16 19:58

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.



Hitta alla IP-nummer som hämtat fil & sortera efter åtkomstdatum

Bash, Kubuntu 8.04 Posted on 2013-01-09 23:33

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.



Sök i alla zip-filer i en mapp efter ett filnamn

Bash, Kubuntu 8.04 Posted on 2013-01-05 02:53

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.



Spegelvända bilder i en mapp

Bash, Kubuntu 8.04 Posted on 2012-07-26 04:16

ls -tr | while read file; do convert $file -flop $file; done

Bilderna spegelvänds i samma tidsordning som de modifierades senast.



Ladda upp en fil till en SSH-server och radera filen

Bash, Kubuntu 8.04 Posted on 2012-07-23 16:56

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.



Ladda upp en fil till en FTP-server och radera filen

Bash, Kubuntu 8.04 Posted on 2012-07-23 15:58

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



Konvertera ZX FORTH-skärmar till textfiler

zsh, Fedora 7 Posted on 2012-07-21 01:45

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.



Ändra filtyp men behåll den gamla m.h.a. symboliska länkar

zsh, Fedora 7 Posted on 2012-05-19 20:11

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.



Ladda ner alla mp3-filerna till böckerna Fysik Lpo & Kemi Lpo

Bash, Kubuntu 8.04 Posted on 2012-05-01 22:54

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. &Aring;. Detta behövs eftersom Sed ej verkar klara ÅÄÖ & åäö i den teckenkodning som filerna använder.



Skanna dubbelsidiga pappershögar med enkelsidig skanner

Bash, Kubuntu 8.04 Posted on 2011-11-22 20:14

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.



Ladda ner samtliga numrerade webbsidor

Bash, Kubuntu 8.04 Posted on 2010-09-22 20:32

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.



Ladda ner pdf-filer länkade från HTML-fil

Bash, Kubuntu 8.04 Posted on 2010-08-03 22:55

sed '/\.pdf/!d;s|.*=\"\(.*pdf\)\".*|curl -O \"http://www.ciberdigital.net/books/\1\"|' Index_of_books.html > curl.sh ; . curl.sh



Köra PHP-servlet från kommandoraden

Bash, Kubuntu 8.04 Posted on 2009-06-15 22:07

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.



Sök och ersätt HTML-kod i alla filer

zsh, Fedora 7 Posted on 2009-03-25 14:37

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.



Strömmande backup av konto

Bash, Kubuntu 8.04 Posted on 2009-03-11 10:03

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.



Läsa av säkringar på Atmel AVR mikrokontroller

Bash, Kubuntu 8.04 Posted on 2009-03-08 15:22

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.



Koda om en textfil

Bash, Kubuntu 8.04 Posted on 2008-06-18 08:42

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.



Skapa jar-fil med hårddiskavbild men utan manifest

Bash, Kubuntu 8.04 Posted on 2008-06-16 11:38

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.



Förkorta hårddiskavbilden

Bash, Kubuntu 8.04 Posted on 2008-06-16 11:31

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.



Skapa en tom hårddiskavbild

Bash, Kubuntu 8.04 Posted on 2008-06-15 17:29

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.



Starta Java PC-emulator med DOS

Bash, Kubuntu 8.04 Posted on 2008-06-15 15:01

/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.



Korrigera fil skapad av HTTP::Recorder så att den kan användas av WWW::Mechanize

Bash, Kubuntu 8.04 Posted on 2008-04-24 18:44

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



Skapa bat-fil för att ladda ner filmer

Kommandotolken, Windows Vista Posted on 2008-04-07 20:54

"../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.



Skapa en länkstruktur

Bash, Fedora 7 Posted on 2008-03-12 14:55

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



Radera alla backupfiler i en katalog med underkataloger

Bash, Fedora 7 Posted on 2008-02-20 14:27

find mkb -name '*~' -type f| xargs rm



Packa upp backup

zsh, Solaris 9 Posted on 2008-02-16 18:18

gunzip -c ../backup.tar.gz| tar -xv



Skapa backup av katalog förutom en fil

Bash, Fedora 7 Posted on 2008-01-31 18:06

find mkb ! -name MKBCfg.pm -type f| xargs tar -czvf backup_mkb.tar.gz



Byta shebang på alla CGI-program

zsh, Fedora 7 Posted on 2008-01-29 11:32

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.



Skapa backup av alla CGI-program

zsh, Solaris 9 Posted on 2008-01-29 11:19

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).



Behandla utmatning från ett kommando rad för rad

zsh, Fedora 7 Posted on 2008-01-13 20:18

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.



Söka efter vissa fel i CGI-program

Bash, Fedora 7 Posted on 2008-01-04 16:22

QUERY_STRING='mkbadmsid=1&func=redirect&uRId=6' perl -W admin.pl 2>&1 | grep 'admin.pl'



Köra CGI-program i terminalfönstret

Bash, Fedora 7 Posted on 2007-12-12 11:31

QUERY_STRING='func=show&cId=100000' perl -W mkb.pl
Bra för avlusning av kod.



Hitta alla mallar som inkluderar filer utan ändelse

Bash, Fedora 7 Posted on 2007-12-12 11:00

find . -type f ! -name '*~' |xargs grep '\[include[^.]*\]'
Backupfiler undantas.



Lägger till pl-ändelsen i action-attributvärden i html-filer

Bash, Fedora 7 Posted on 2007-12-10 16:53

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



Lägg till html-ändelse till alla filer i en katalogstruktur som innehåller html-kod

Bash, Fedora 7 Posted on 2007-12-10 15:46

find . |xargs grep '<html\|<body\|<table' |sed '/~/d;s/:.*//' |sed 's/.*/mv & &.html/' |uniq >run.sh; sh run.sh



JavaScript som miniräknare

JavaScript, Firefox 2.0 Posted on 2007-12-06 23:45

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.smiley



Hitta filer som ändrar $PATH

Ash, BasicLinux 3.50 Posted on 2007-12-06 21:45

find / -xdev -type f |xargs grep 'export.\+PATH=' 2>/dev/null



Utvinn tabelldefinitioner ur en MySQL dump

Bash, Fedora 7 Posted on 2007-12-06 00:25

zcat mkb.sql.gz | sed '/^CREATE TABLE/,/^)/!d;/^)/s/;/;\n/' > ../tables.txt



Konstruera SQL-frågor för alla tabeller (specialfall)

Bash, Fedora 7 Posted on 2007-12-06 00:22

mysql -uroot -ppasswd -Dmkb_lub -e'show tables'|sed 's/ *| *//'|sed -n '/^[a-z]/p' |sed 's/\(.\+\)/select * from \1\;/'



Kopiera en katalogstruktur (specialfall)

Bash, Fedora 7 Posted on 2007-12-06 00:15

dirs=`find ../jinfo -type d | sed 's|^../jinfo/||;/^\.\./d'`; for dir in $dirs; do mkdir $dir; done



Om bloggen

Övrigt Posted on 2007-12-06 00:13

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.