Marius van Witzenburg We fight for our survival, we fight!

29Mar/100

How to use Internet Explorer 8 (IE8) compatibility view mode

Posted by mariusvw

Everybody knows that Internet Explorer can be a bitch... And so for IE8!

For the scripts who do not work right yet on IE8 there is a way to put IE8 in compatibility mode so you can view the website in a IE7 sorta like environment.

In PHP you have to send the following header, my advice is to add it to your first index file if you handle everything through this index.

<?php
header('X-UA-Compatible: IE=EmulateIE7');
?>

Or you can add a header in the HTML head with a meta tag.
Add this right after the <head> tag:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

In the same way specify IE=5, IE=7, or IE=8 to select one of those compatibility modes. A complete table is given below.

I hope this makes your life with Internet Explorer a bit easier!

Ps. If you want to break this feature, you could use something like this to force IE to always be compatible:

<?php
header('X-UA-Compatible: IE=100');
?>
28Mar/100

How to limit the bandwidth of Apache with mod_bw on FreeBSD

Posted by mariusvw

First you have to install mod_bw:

cd /usr/ports/www/mod_bw
make install

Then open your httpd.conf and locate

#LoadModule bw_module          libexec/apache22/mod_bw.so

Remove the comment like this:

LoadModule bw_module libexec/apache22/mod_bw.so

Then you can add the following to your VirtualHost or global configuration to limit a directory speed, in my case I want to limit the band files where we host our demo materials width a limit of 50kb/s.

1
2
3
4
5
6
7
<directory /home/mariusvw/public_html/band>
    <ifmodule mod_bw.c>
        BandWidthModule On
        ForceBandWidthModule On
        Bandwidth all 50000
    </ifmodule>
</directory>

This is an example how you can globally limit all the traffic of your Apache installation.

1
2
3
4
5
<ifmodule mod_bw.c>
    BandWidthModule On
    ForceBandWidthModule On
    Bandwidth all 50000
</ifmodule>

For more info on this you can open the readme, which is located at:

/usr/local/share/doc/mod_bw/mod_bw.txt
28Mar/100

How to sync files to a ftp server with the use of ftpsync on FreeBSD

Posted by mariusvw

In the ports of FreeBSD I found a nice tool to sync a local directory to a remote FTP server.

First install ftpsync:

cd /usr/ports/ftp/ftpsync
make install clean

Next create a config file to configure ftpsync for synchronization:

localdir=/home/mariusvw/backups
ftpserver=rstore.kitara.nl
ftpdir=/
ftpuser=username
ftppasswd=password

Next you have two options for syncing...

Get-sync from server:

ftpsync.pl -g cfg=financenetwerk_eu-v1.cfg

Put-sync to server:

ftpsync.pl -n cfg=financenetwerk_eu-v1.cfg

You can add the -p flag to not-prune directories on the target.

I don't use this program anymore for syncing but I can tell you, it works great if you want to easy upload a website to a live server.

Geëtiketeerd als: , , , , , Geen reacties
24Mar/100

Test-driven development (TDD)

Posted by mariusvw

When I was googling for development flows I found the following page which almost describes completely how I work in my development projects.

A flowchart of how this goes:

For more info see: http://en.wikipedia.org/wiki/Test-driven_development

24Mar/100

How to make a Flash movie redirect with ActionScript3 from your timeline

Posted by mariusvw

You can use the following code to simply redirect from a key in your timeline.

I used this to redirect after my preloader finished.

var url:String = "home.html";
var request:URLRequest = new URLRequest(url);
try {
    navigateToURL(request, "_self");
} catch (e:Error) {
    trace("Error occurred!");
}
24Mar/100

How to use Bash to upload a file via FTP

Posted by mariusvw

This script is a simple example how you can use BASH to upload one or more files to a FTP server.

if [[ "${debug}" = "YES" ]]; then
	verbose="-v"
else
	verbose="-V"
fi
 
ftp -i -n -q 10 "${verbose}" < <EOF
open "${ftp_host}" "${ftp_port}"
quote USER "${ftp_user}"
quote PASS "${ftp_pass}"
quote CWD "${initial_directory}"
binary
put "${file}" "${file_name}"
quit
EOF

Another script that I wrote on a boring evening. I don't use it these days anymore but it might be useful for you :-)

Geëtiketeerd als: , , , Geen reacties
23Mar/104

How to backup from a Western Digital Sharespace to another Sharespace via rsync and FreeBSD

Posted by mariusvw

This script simply syncs from a WD ShareSpace drive to another WD ShareSpace drive. It gets started from a other server which is in my case FreeBSD.

You might need this: How to enable SSH on a Western Digital ShareSpace

Create the following files on FreeBSD:

/backup/sharespace/ssh-wrapper

#!/bin/sh
sh /backup/run &

/backup/sharespace/run

#!/bin/sh
# WD ShareSpace sync script v1.1
# By Marius van Witzenburg <info@kitara.nl>
# http://kitara.nl
#
# Works with busybox 1.1.1 and newer versions.
#
 
# Settings
source="192.168.8.4"
target="192.168.8.9"
mailto="info@kitara.nl"
mailfrom="noreply@kitara.nl"
daemon="yes"
force="no"
waittime=5
maxlogs=48
beforetime=6
aftertime=20
 
#
# DO NOT CHANGE BELOW!
#
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin
PID=$$
rarg="-aWvz"
 
curdir=`pwd`
cd /backup/
 
echo ${PID} > /backup/run.pid
cleanup() {
    rm /backup/key
    cd ${curdir}
    ssh -ax root@${target} "test -f /backup/rsyncd.pid && kill `cat /backup/rsyncd.pid`"
    return $?
}
s_hup() {
    logger -s -p daemon.notice -t 'backup' "*** SIGHUP! Ignoring... ***"
    #exit $?
}
s_int() {
    logger -s -p daemon.notice -t 'backup' "*** SIGINT! Exiting... ***"
    cleanup 
    echo -e "From: ${mailfrom}nTo: ${mailto}nSubject: ShareSpace backup.nnSIGINT! Exiting..." | /usr/sbin/msmtp ${mailto}
    rm /backup/run.pid
    kill ${JOB}
    exit $? 
}
s_term() {
    logger -s -p daemon.notice -t 'backup' "*** SIGTERM! Exiting... ***"
    cleanup
    echo -e "From: ${mailfrom}nTo: ${mailto}nSubject: ShareSpace backup.nnSIGTERM! Exiting..." | /usr/sbin/msmtp ${mailto}
    rm /backup/run.pid
    kill ${JOB}
    exit $?
}
 
trap s_hup SIGHUP
trap s_int SIGINT
trap s_term SIGTERM
 
if [ "${daemon}" = "yes" ]
then
    logger -s -p daemon.notice -t 'backup' "Having a rest for the first run..."
    sleep 30 &
    JOB=$!
    wait ${JOB}
fi
 
while [ "true" ]
do
    # Time to backup?
    hour=`date "+%H"`
    if [ "${hour}" -lt "${beforetime}" ] || [ "$hour" -gt "${aftertime}" ]
    then
        # Change the 1 to 1-3 depending on which load you want
        loadavg=`uptime | sed 's/.*average: ([0-9]).*/1/g'`
        if [ "${loadavg}" -eq 0 ] || [ "${force}" = "yes" ]
        then
            alive=`ssh -ax -q -q -o "BatchMode=yes" -o "ConnectTimeout 5" root@${target} "echo 2>&1" && return 0 || echo 1`
            if [ "${alive}" -eq 0 ]
            then
                user=`echo $(head /dev/urandom)$(date +%Y%m%d%H%M%S%N) | md5sum | uuencode -m -| sed -n 2p | cut -c3-43 | cut -c1-${1:-16}`
                sleep 1
                pass=`echo $(head /dev/urandom)$(date +%Y%m%d%H%M%S%N) | md5sum | uuencode -m -| sed -n 2p | cut -c3-43 | cut -c1-${1:-16}`
                echo ${pass} > /backup/key
 
                test -d /backup/log || mkdir /backup/log
                test -d /backup/server || mkdir /backup/server
 
                test -f /backup/log/run.${maxlogs} && rm -f /backup/log/run.${maxlogs}
                lcur=${maxlogs}
                while [ ${lcur} -gt 1 ]
                do
                    lpre=${lcur}
                    lcur=`expr ${lcur} - 1`
                    test -f /backup/log/run.${lcur}.gz && mv /backup/log/run.${lcur}.gz /backup/log/run.${lpre}.gz
                done
                test -f /backup/log/run && mv /backup/log/run /backup/log/run.1
                test -f /backup/log/run.1 && gzip /backup/log/run.1
 
                touch /backup/log/run
 
                logger -s -p daemon.notice -t 'backup' "Creating rsync server configuration"
 
                cat > /backup/server/rsyncd.conf < <EOF
pid file = /backup/rsyncd.pid
 
[shares]
path = /shares/
comment = Rsync Server
uid = root
gid = jewab
use chroot = no
read only = no
list = no
auth users = ${user}
secrets file = /backup/rsync.users
EOF
 
                cat > /backup/server/rsync.users < <EOF
${user}:${pass}
EOF
 
                cat > /backup/server/start < <EOF
#!/bin/sh
rsync --daemon --config=/backup/rsyncd.conf &
EOF
 
                # Transfer server files
                rsync -e 'ssh -ax' ${rarg} --timeout=30 --delete /backup/server/ ${target}:/backup/ >> /backup/log/run 2>&1 &
                JOB=$!
                wait ${JOB}
 
                # Start rsync server
                ssh -ax root@${target} "sh /backup/start > /dev/null 2>&1; exit"
                JOB=$!
                wait ${JOB}
 
                # Sync internal shares and exclude usb shares
                logger -s -p daemon.notice -t 'backup' "Syncing internal shares..."
                rsync ${rarg} --timeout=60 --password-file=/backup/key --exclude="/usb[1-3]-1share1" --delete /shares/ rsync://${user}@${target}/shares/ >> /backup/log/run 2>&1 &
                JOB=$!
                wait ${JOB}
                tail -2 /backup/log/run | logger -s -p daemon.info -t 'backup'
 
                # Sync usb shares if connected
                for x in `ssh -ax root@${target} ls -l /shares/| grep "^d" | awk '{ print $9 }'`
                do
                    if [ ! -z "`expr ${x} : '(usb[0-9]-[0-9]share[0-9])'`" ]
                    then
                        if [ -d "/shares/${x}/" ]
                            then
                            logger -s -p daemon.notice -t 'backup' "Syncing ${x}..."
                            rsync ${rarg} --timeout=60 --password-file=/backup/key --delete /shares/${x}/ rsync://${user}@${target}/shares/${x}/ >> /backup/log/run 2>&1 &
                            JOB=$!
                            wait ${JOB}
                            tail -2 /backup/log/run | logger -s -p daemon.info -t 'backup'
                        fi
                    fi
                done
 
                sleep 5
 
                echo -e "From: ${mailfrom}nTo: ${mailto}nSubject: ShareSpace backup.nnCycle finished..." | /usr/sbin/msmtp ${mailto}
 
                # Shutdown rsync server
                cleanup
            else
                logger -s -p daemon.notice -t 'backup' "No access to '${target}' - aborting"
            fi
        else
            logger -s -p daemon.notice -t 'backup' "Load average on '${source}' is ${loadavg} - aborting"
        fi
    else
        logger -s -p daemon.notice -t 'backup' "Not the time to make backups - sleeping"
    fi
 
    # Daemonize or stop?
    if [ "${daemon}" != "yes" ]
    then
        logger -s -p daemon.notice -t 'backup' "Backup finished"
        break
    fi
 
    # Cycle
    logger -s -p daemon.notice -t 'backup' "Waiting for cycle (${waittime} minutes)..."
    sleep `expr ${waittime} * 60` &
    JOB=$!
    wait ${JOB}
    logger -s -p daemon.notice -t 'backup' "Running cycle..."
done
 
# EOF

/backup/sync.sh

#!/usr/local/bin/bash
#
# Sync backup system on ShareSpace drive
#
 
ip="192.168.8.4"
 
# Fix permissions
find /backup/sharespace/ -type d -exec chmod 700 '{}' ; 
find /backup/sharespace/ -type f -exec chmod 600 '{}' ; 
 
echo "-- Shutting down current backup"
ssh -ax root@${ip} "test -f /backup/run.pid && kill `cat /backup/run.pid`"
sleep 15
echo "-- Syncing new files"
rsync -e 'ssh -ax' -aWv --timeout=30 --exclude '.svn' --delete --delete-excluded /backup/sharespace/ root@${ip}:/backup/
echo "-- Restarting backup"
ssh -ax root@${ip} "sh /backup/ssh-wrapper > /dev/null 2>&1; exit"
 
# EOF

After creating these files set these permissions and start the script:

chmod 700 /backup/sync.sh
/backup/sync.sh

Keep in mind that you setup SSH-keys before you use these scripts :-)

Have fun!

23Mar/100

How to restore your iPhone when its bricked with DFU mode

Posted by mariusvw

Here are some simple steps I use to restore friends their iPhones.

  1. Connect your iPhone to your computer.
  2. Turn of your iPhone by holding the power button
  3. Wait for your iPhone to completely shutdown
  4. Hold POWER and HOME for 10 seconds
  5. Release POWER but keep holding HOME
  6. iTunes should now detect your iPhone in DFU mode

Note, in case you do a redsn0w jailbreak, you might need to disconnect press power and reconnect the iPhone to make it work (do this quickly).

16Mar/100

How to get SSH to execute a command in the background on target machine

Posted by mariusvw

If you try to accomplish this directly with SSH... I can tell you, this can be hard to get the job done!

But the solution is quite simple... Create a wrapper around your command which does the job for you.

First prepare your SSH command like:

ssh -ax marius@192.168.3.7 "sh /home/marius/ssh-wrapper > /dev/null 2>&1; exit"

Second is to create the wrapper:

#!/bin/sh
sh /home/marius/run &

You don't have to make the files executable since you prefix it with sh.

This works for me on 2 machines without any problems so far.

Good luck! :-)

13Mar/102

How to backup from a Western Digital Sharespace to another Sharespace (v2)

Posted by mariusvw

I earlier wrote a script to sync two Western Digital ShareSpace drives. Since that was written in a hurry I thought lets have another good look at it...

I changed the checks for USB drives and sync the complete the shares directory instead of only the shares.

The following script is a new rewritten version of the old script which works faster for my use.

You may modify it to suit your situation but please leave the credits in the file :-)

You might need this: How to enable SSH on a Western Digital ShareSpace

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/bin/sh
# WD ShareSpace sync script v1.1
# By Marius van Witzenburg <info@kitara.nl>
# http://kitara.nl
#
# Works with busybox 1.1.1 and newer versions.
#
 
# Settings
src_ip="172.20.20.22"
mailto="marius@kitara.nl"
mailfrom="noreply@kitara.nl"
daemon="yes"
force="no"
waittime=5
maxlogs=48
 
#
# DO NOT CHANGE BELOW!
#
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin
PID=$$
 
pwd=`pwd`
root=`dirname $0`
logdir=${root}/logs
logfile=`basename $0`
cd ${root}
 
cleanup() {
    #rm -f ${log}
    return $?
}
s_hup() {
    logger -s -p daemon.notice -t ${logfile} "*** SIGHUP! Exiting... ***"
    cleanup
    #exit $?
}
s_int() {
    logger -s -p daemon.notice -t ${logfile} "*** SIGINT! Exiting... ***"
    echo -e "From: ${mailfrom}nTo: ${mailto}nSubject: ShareSpace backup.nnSIGINT! Exiting..." | /usr/sbin/msmtp ${mailto}
    kill ${JOB}
    exit $?
}
s_term() {
    logger -s -p daemon.notice -t ${logfile} "*** SIGTERM! Exiting... ***"
    echo -e "From: ${mailfrom}nTo: ${mailto}nSubject: ShareSpace backup.nnSIGTERM! Exiting..." | /usr/sbin/msmtp ${mailto}
    kill ${JOB}
    exit $?
}
 
trap s_hup SIGHUP
trap s_int SIGINT
trap s_term SIGTERM
 
if [ "${daemon}" = "yes" ]
then
    logger -s -p daemon.notice -t ${logfile} "Having a rest for the first run..."
    sleep 30 &
    JOB=$!
    wait ${JOB}
fi
 
# Loop and loop and loop...
while [ "true" ]
do
    # Check if ssh host is up and running.
    alive=`ssh -ax -c blowfish -q -q -o "BatchMode=yes" -o "ConnectTimeout 5" root@${src_ip} "echo 2>&1" && return 0 || echo 1`
    if [ "${alive}" -eq 0 ]
    then
        # Change the 1 to 1-3 depending on which load you want
        #loadavg=`ssh -ax -c blowfish root@${src_ip} uptime | sed -e "s/.*load average: (.*...), (.*...), (.*...)/1/" -e "s/ //g"`
        loadavg=`ssh -ax -c blowfish root@${src_ip} uptime | sed 's/.*average: ([0-9]).*/1/g'`
 
        if [ "${loadavg}" -eq 0 ] || [ "${force}" = "yes" ]
        then
            # Be sure we have a log dir
            test -d ${logdir} || mkdir ${logdir}
 
            # Shift logs
            test -f ${logdir}/${logfile}.${maxlogs} && rm -f ${logdir}/${logfile}.${maxlogs}
            lcur=${maxlogs}
            while [ ${lcur} -gt 1 ]
            do
                lpre=${lcur}
                lcur=`expr ${lcur} - 1`
                test -f ${logdir}/${logfile}.${lcur}.gz && mv ${logdir}/${logfile}.${lcur}.gz ${logdir}/${logfile}.${lpre}.gz
            done
            test -f ${logdir}/${logfile} && mv ${logdir}/${logfile} ${logdir}/${logfile}.1
            test -f ${logdir}/${logfile}.1 && gzip ${logdir}/${logfile}.1
 
            logger -s -p daemon.notice -t ${logfile} "Starting backup from '${src_ip}'"
 
            # Sync internal shares and exclude usb shares
            logger -s -p daemon.notice -t ${logfile} "Syncing internal shares..."
            rsync -e 'ssh -ax -c blowfish -l root' -aWvz --timeout=30 --exclude="/usb[1-3]-1share1" --delete --stats ${src_ip}:/shares/ /shares/ > ${logdir}/${logfile} 2>&1 &
            JOB=$!
            wait ${JOB}
 
            # Sync usb shares if connected
            for x in `ssh -ax -c blowfish root@${src_ip} ls -l /shares/| grep "^d" | awk '{ print $9 }'`
            do
                if [ ! -z "`expr ${x} : '(usb[0-9]-[0-9]share[0-9])'`" ]
                then
                    if [ -d "/shares/${x}/" ]
                        then
                        logger -s -p daemon.notice -t ${logfile} "Syncing ${x}..."
                        rsync -e 'ssh -ax -c blowfish -l root' -aWvz --timeout=30 --delete --stats ${src_ip}:/shares/${x}/ /shares/${x}/ >> ${logdir}/${logfile} 2>&1 &
                        JOB=$!
                        wait ${JOB}
                    fi
                fi
            done
 
            tail -2 ${logdir}/${logfile} | logger -s -p daemon.info -t ${logfile}
        else
            logger -s -p daemon.notice -t ${logfile} "Load average on '${src_ip}' is ${loadavg} - aborting"
        fi
    else
        logger -s -p daemon.notice -t ${logfile} "No access to '${src_ip}' - aborting"
    fi
 
    if [ "${daemon}" != "yes" ]
    then
        logger -s -p daemon.notice -t ${logfile} "Backup finished"
        break
    fi
 
    logger -s -p daemon.notice -t ${logfile} "Waiting for cycle (${waittime} minutes)..."
    sleep `expr ${waittime} * 60` &
    JOB=$!
    wait ${JOB}
    logger -s -p daemon.notice -t ${logfile} "Running cycle..."
done
 
# Go back to old location
cd ${pwd}
 
# EOF
Page 1 of 212