Category Archives: Linux

Linux related topics. It includes server, desktop and embedded platforms

Using vim for Perl development

I am doing some Perl development at the moment, so decided to improve my Perl setup. After some work the result ended as shown below:

I use a couple of plugins to achive this setup.

  • NERD tree is the tree browser to the left. It helps with fast moving around in the files. It works either by mouse, or using the arrow keys.
  • tabbar is for showing the open buffers in the main section. I know it is old, but it does the job.
  • desert theme for the look. It is just a classic dark theme.
  • perl-support for all the perl related things. Makes it possible to check syntax, run scripts, starts debugger from the script.

As shown on the picture, it is combined with a clever tab for auto completions. All in all I am pretty happy with this solution for now.

Keyboard layout, when you are using remote desktop

I experience many situations where I need to connect to Windows over remote desktop. Until now I have just used tsclient, with a basic setup. Today I was too annoyed by the fact that AltGr and other keys don’t work on the Windows side in this basis setup.
Tsclient uses rdesktop behind the GUI, and rdesktop has a keymap parameter. This option is though not available from the Tsclient GUI. A small research later, the solution is calling rdesktop from command-line.

rdesktop -u "USER" -p - -g 1500x1096 -k da -T "TITLE" "HOST"

Here I have chosen the da keymap, equaling danish, and now all the characters is working.

Using KVM from commandline without vnc

As part of a major server upgrade, I have changed my old Compaq DL360G1, with a single pentium III to a Dell 2U 2950 with 2 Xeon E5420.

As part of the upgrade I have changed my setup from 32 bit to 64 bit, from ext3 to ext4 and from XEN virtualization to KVM.

Usually when working with KVM you use vnc. This have its pros and cons. Though, as the host server itself of cause is headless and the clients I use for administration not all have a vnc client, I was looking for a cleaner solution. The result was a way with uses screen and ncurses, so I just need a ssh access to the server for controlling everything.

#!/bin/bash
 
# Script for using kvm virtualization from a console
 
NAME="MACHINENAME"
MEMORY="512"
CPUS="1"
VM_GROUP="/dev/KvmGroup/"
BRIDGE_SCRIPT="/root/Scripts/qemu-ifup-brKvm.sh"
# Using the easyMAC script for a xen mac
MAC_ADDRESS="00:50:56:27:XX:XX"
 
/usr/bin/screen -A -m -d -S "kvm_${NAME}" -t "${NAME}" \
/usr/bin/qemu-system-x86_64 \
--enable-kvm \
-m ${MEMORY} \
-name ${NAME} \
-smp ${CPUS} \
-drive file=${VM_GROUP}${NAME}_root,if=scsi,boot=on \
-drive file=${VM_GROUP}${NAME}_swap,if=scsi \
-net nic,macaddr=${MAC_ADDRESS} \
-net tap,script=${BRIDGE_SCRIPT} \
-k da \
-monitor unix:/var/run/kvm/monitors/${NAME},server,nowait \
-pidfile /var/run/kvm/pids/${NAME} \
-nographic \
-curses #\
#    -cdrom /root/ISO/install-amd64-minimal-20110421.iso \
#    -boot d

This is a crude example for how it is used. But should give some ideas for how it is used. Notice the two commented lines. This is for booting from a iso image.
The result is shown in the following figure:

Kodestandard for PHP

I forbindelse med at jeg skal lave en stak projekter i PHP, har jeg ledt efter en kodestandard sammen med et værktøj til at håndtere denne, da det gør projekterne lettere at vedligeholde senere.

Som beskrevet hos TIOBE kan det at lave og benytte en kodestandard ses som følgende 7 trins proces.

  1. Define Coding Standard
  2. Select Code Checking Tool
  3. Customize Code Checking Tool
  4. Integrate in SW Environment
  5. Set up Quality Database
  6. Define Quality Targets
  7. Enforce Compliancy

Da projekterne ikke er specielt store, og der ikke er mange udviklere på, har jeg valgt at springe quality databasen over, og kun benytte punkt 1, 2, 3, 4 og 7.

Som udgangspunkt kan man jo lave sin egen standard. Dette tager dog lang tid, og kræver stadig vedligeholdelse, samt udvikling af værktøj til at kontrollere overholdelse af denne. Derfor kan der være mange fordele i at adoptere en anerkendt standard.

Her er valgt at adoptere PHP PEAR standarden, da dette er en anerkendt standard i PHP miljøet, og der er meget PHP kode der bygger på denne. Samtidig er den meget gennemarbejdet.

Den væsentlige fordel ved at benytte PEAR standarden, er at PHP teamet også har udviklet et værktøj til at kontrollere kodestandarden i form af PHP_CodeSniffer, så punkt 1,2 og 3 kan klares af en gang.

Installering af værktøj

Først skal php pear installeres.
sudo apt-get install php-pear

Opdater pear databasen.
sudo pear channel_update pear.php.net

Installer kodestandarden.
sudo pear install PHP_CodeSniffer

Med dette kommer kommandoen phpcs som kan benyttes til at kontrollere php kode for om den overholder standarden.

Hvad punkt 4 angår, så benytter jeg bluefish som web editor, da denne er ekstrem hurtig (letvægts editor) på min gamle 1 GHz pentium 3, samtidig har den nogen pænt advanceret muligheder der gør den genial til web udvikling. Her integrere jeg phpcs, ved at gå ind i Rediger -> Præferencer og vælger uddata parsere, og tilføjer phpcs på samme måde som de andre muligheder.

Med dette haves en kodestandard for PHP, samt værktøj der integrere med ens IDE i form af phpcs integreret med bluefish. Alt i alt en stor hjælp når man ønsker at skrive PHP kode til lidt større projekter end single hygge projekter.

Forberede billeder til gallery

Som i kan se på mit wpg2 link har jeg installeret gallery. Problemet er at den server jeg har det hostet på (stort tak til kollegienet) kun understøtter GD som Graphics Toolkits, og denne kan i dette tilfælde ikke bygge thumbnails/resizes hvis billederne bliver for store, samt kan ikke rotere billederne.

Som så meget andet kan dette problem løses med et script til bash som tager sig af at rotere og ændre størrelse på billederne, så de er parate til gallery.

Første del er et interface der tager en path til mappen med billederne, og en skaleringsstørelse.

echo "Starts the pic2gallery script"

while [ $# -gt 0 ]; do
case $1 in
(–help)
echo “pic2gallery is written by Claus Stovgaard – frosteyes.dk”
echo “Use -s for scale and -p for path”
exit 0
;;
(-s)
# Next param is scale
shift
SCALE=$1
;;
(-p)
# Next param is path
shift
FOLDER_PATH=$1
;;
*)
echo “Unknown param: $1”
exit 1
;;
esac
shift
done

Anden del er at rotere billederne ud fra deres exif information

function rotate_jpgpictures(){
for FIL in $FOLDER_PATH*; do
# Only work width the jpg, jpeg, JPG or JPEG files
JPEG_FILES=`echo $FIL | awk '/\.jpg$/ || /\.jpeg$/ || /\.JPG$/ || /\.JPEG$/' `
if [ -n "$JPEG_FILES" ]; then
case `jpegexiforient $JPEG_FILES` in
(1)
echo "$JPEG_FILES do not need rotating"
;;
([2-8])
echo "$JPEG_FILES need rotation, use exifautotran"
exifautotran $JPEG_FILES
;;
(*)
echo "Something wrong with $JPEG_FILES, maybe we can read the exiforient"
;;
esac
fi
done
}

Tredie del er at skalere billedet.

function scale_jpgpictures(){
for FIL in $FOLDER_PATH*; do
# Only work width the jpg, jpeg, JPG or JPEG files
JPEG_FILES=`echo $FIL | awk '/\.jpg$/ || /\.jpeg$/ || /\.JPG$/ || /\.JPEG$/' `
if [ -n "$JPEG_FILES" ]; then
echo "scaling $JPEG_FILES, new picture is named ${FOLDER_PATH}gal_${JPEG_FILES#*/}"
convert -scale $SCALE% $JPEG_FILES ${FOLDER_PATH}gal_${JPEG_FILES#*/}
fi
done
}

Det samlede script kan hentes her pic2gallery.sh , og løser i hvert fald mine problemer med at forberede billeder til gallery