I have been stuck doing a lot of front-end web work lately and haven’t had a
chance to do much perl coding (I am planning on releasing an Mason based
renderer for Email::MIME::Kit
soon though). I’m very impressed
with the power of CSS in modern browsers. The last time I looked at it, browser
incompatibilities really made it difficult to use. It is much better still, I
find most of the work to be trial and error, so I have a couple of tips that
have saved me some time going back and forth…
I do all of my coding in vim and have ton of mappings (maybe I’ll share some in
future). One I really like right now it ,u
which saves the current
file then runs my xrefresh
perl script which finds my Firefox
window and refreshes the current page. It is a simple script that is based on
X11::GUITest
. It works particularly well when I am using two
monitors and can have the browser on in one of them. Here is the mapping, along
with the ,U
mapping which saves all files:
nmap <silent> ,u :w<cr>:! xrefresh 'Gran Paradiso'<cr>
nmap <silent> ,U :wa<cr>:! xrefresh 'Gran Paradiso'<cr>
It would probably be easy to extend this script to do things like refresh multiple browsers, refresh without using the cache, etc.
Next up is some fun with IE. (Oh, the hours wasted on you. Damn you IE!) Microsoft has actually been very helpful and provided disk images that you can use to test web pages in a virtual machine on different versions of their browser. They expire periodically and they are designed for Microsoft Virtual PC so it take a bit of work to set them up on linux using VirtualBox, so I created a bash script (create-ie-vbox) to do the heavy lifting.
Once you
download
the images run create-ie-vbox <path-to-image-.exe>
and wait
a while. The script uses perl and File::Spec to find the absolute path to the
.exe file
exe_file=`echo $exe_file | perl -MFile::Spec -e'print File::Spec->rel2abs(<>)'`
then the unrar
command (and perl) to find the .vhd file and unpack
it
vhd_file=`unrar l $exe_file | perl -ne'/(\w[\s\w-]*\.vhd)/ && print $1'`
nice unrar e "$exe_file" "$vhd_file" >> $log 2>&1 \
|| die "Couldn't extract $vhd_file from $exe_file"
Then the big trick is to convert the .vhd file to a .vdi file. While VBox can
work with .vhd files, Microsoft uses the same UUID for all of these disk images
which VBox doesn’t like. There is a command in VBoxManage to change the
UUID (VBoxManage internalcommands setvdiuuid "$vhd"
) but there is
an acknowledged bug that prevents it from being useful here. Instead we have to
use qemu
to convert it to a raw disk and then
VBoxManage
to convert that to a .vdi:
nice qemu-img convert -O raw -f vpc "$vhd" "$raw" || die "Error converting to raw"
nice VBoxManage convertdd "$raw" "$vdi" || die "Error converting to vdi"
Finally there are a number of VBoxManage
commands to create and
register the image and disk.
Once this is done, there is a bit more work that needs to be done within the vm to deal with some bugs and annoyances. The script prints out the remaining steps. Much thanks to George Ornbo who pointed the way on his blog. Note that this script only works on the XP disks at this point; I haven’t bothered to test the Vista versions yet.
BTW, most of my bash scripts use the die()
function (stolen
from perl) which is very simple but handy:
function die() {
echo $@
exit 1
}
Lastly, I like to check my pages in browsers at various widths. Most importantly (or is that annoyingly) 800px. Rather than change my screen resolution, I use this simple bash script to resize Firefox to the desire width (defaulting to 800 if nothing is supplied on the command line):
#!/bin/bash
SIZE=${1:-800}
echo Resize to $SIZE width
wmctrl -r "Firefox" -e 0,-1,-1,$SIZE,-1
Simple, but gets the job done quickly!
Hope these are helpful.
The contents of this blog are licensed under the Creative Commons “Attribution-Noncommercial-Share Alike 3.0″ license.