min-height, min-width в Internet Explorer

26.12.2008

Ппц, дорогая редакция.В последнее время опять занимаюсь некоторой версткой и выплывают баги IE  с каждым днем. Но в наше время уже все знают как с этим бороться, кроме меня.

Так вот, есть CSS2, в нем min-height, min-width. В IE - хрена. Решение, но надо чтобы был включен JavaScript:

.div { 
   height: expression( this.scrollHeight < 334 ? "333px" : "auto" ); /* sets min-height for IE */
   min-height: 333px; /* sets min-height value for all standards-compliant browsers */
}
.division { 
   width: expression( document.body.clientWidth < 334 ? "333px" : "auto" ); /* set min-width for IE */
   min-width: 333px; /* sets min-width value for all standards-compliant browsers */
}

 

Подглядел здесь.


Прозрачность в CSS

24.12.2008

До недавно был уверен, что полноценной кросброузерной прозрачности не бывает. До чего техника дошла... Обещают, что унифицированная реализация будет с приходом CSS3.

 

.transparent{
	z-index: 10;
	top: 0px;
	left: 0px;
	position: absolute;
	background-color: black;
	-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
	filter: alpha(opacity=50);
	opacity: .5;
}

Маки рулят, а MS не рулит

24.12.2008

Обкуренная девочка рассказывает, почему Маки рулят, а MS не рулит. Личный опыт.

 


Околиця Львова, ранок...

14.12.2008
Околиця Львова, ранок, перехрестя, стоїть ДАЇшник на дорозі. Їде модна така машина, дай думає спиню. Спиняє. 
- Добрий ранок! 
- Добрий! 
- Ваші документи будь-ласка. 
- Будь ласка! 
- Вийдіть з машини. 
- З задоволенням! Виходить здоровенний вуйко в вишиванці, все при ньому, посміхається собі у вуса. 
- Що гарний настрій? 
- Гарний. 
- Відкрийте багажник.
 - Прошу... 
Відкриває, а там труп в мішку, порубаний на дрібні шматки, кров м'ясо і все таке... 
- Шо москаль?... 
- Еге ж... 
- Яке прикре самогубство..


Домен по-умолчанию в Apache используя mod_rewrite

13.12.2008

У сайта есть несколько доменов, т.е.

ServerName server.com
ServerAlias www.server.com server2.com www.server2.com

Как сделать так, чтобы при заходе на алиасы переход шел на основное имя? Легко и просто.

RewriteCond %{HTTP_HOST}   !^server\.com
RewriteRule ^(.*)$         http://server.com/$1 [L,R]

dd скрипт для копирования больших объёмов данных с прогрессом

12.12.2008

Всегда раздражало, что у dd нет прогресса. Сколько осталось, сколько скопровалось - хрен его знает. Вот нашел решение.

 

dd.sh

#!/bin/bash                                  

unset parameters
ibs=512         
obs=512         
iconvrate=1024  
oconvrate=1024  

while [ -n "${1}" ] ; do
        key="${1%%=*}"  
        value="${1#*=}" 
        case "${key}" in
                (ibs)   ibs="${value}" ;;
                (obs)   obs="${value}" ;;
                (bs)    ibs="${value}" ; obs="${value}" ;;
        esac                                              

        parameters="${parameters} ${1}"
        shift                          
done                                   

#       BLOCKS  and  BYTES  may  be  followed by the following multiplicative suffixes: xM M, c 1, w 2, b 512, kB 1000, K 1024, MB 1000*1000, M                                                                           
#       1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.                         

case "${ibs: -1}" in
        (c)     ibs="${ibs%c}" ; iconvrate=1024 ;;
        (w)     ibs="$(( ${ibs%w} * 2))" ; iconvrate=1024 ;;
        (b)     ibs="${ibs%b}" ; iconvrate=1024 ;;          
        (B)     ibs="${ibs%B}" ; iconvrate=1000 ;           
                case "${ibs: -1}" in                        
                        (K)     ibs="$(( ${ibs%K} * 1000 ))" ;;
                        (M)     ibs="$(( ${ibs%M} * 1000 * 1000 ))" ;;
                        (G)     ibs="$(( ${ibs%G} * 1000 * 1000 * 1000 ))" ;;
                        (T)     ibs="$(( ${ibs%T} * 1000 * 1000 * 1000 * 1000 ))" ;;
                        (P)     ibs="$(( ${ibs%P} * 1000 * 1000 * 1000 * 1000 * 1000 ))" ;;
                        (E)     ibs="$(( ${ibs%E} * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 ))" ;;
                        (Z)     ibs="$(( ${ibs%Z} * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 ))" ;;
                        (Y)     ibs="$(( ${ibs%Y} * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 ))" ;;                                                                                                          
                esac ;;                                                                                      
        (K)     ibs="$(( ${ibs%K} * 1024 ))" ; iconvrate=1024 ;;                                             
        (M)     ibs="$(( ${ibs%M} * 1024 * 1024 ))" ; iconvrate=1024 ;;                                      
        (G)     ibs="$(( ${ibs%G} * 1024 * 1024 * 1024 ))" ; iconvrate=1024 ;;                               
        (T)     ibs="$(( ${ibs%T} * 1024 * 1024 * 1024 * 1024 ))" ; iconvrate=1024 ;;                        
        (P)     ibs="$(( ${ibs%P} * 1024 * 1024 * 1024 * 1024 * 1024 ))" ; iconvrate=1024 ;;                 
        (E)     ibs="$(( ${ibs%E} * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 ))" ; iconvrate=1024 ;;          
        (Z)     ibs="$(( ${ibs%Z} * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 ))" ; iconvrate=1024 ;;   
        (Y)     ibs="$(( ${ibs%Y} * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 ))" ; iconvrate=1024 ;;                                                                                                         
esac                                                                                                         

case "${obs: -1}" in
        (c)     obs="${obs%c}" ; oconvrate=1024 ;;
        (w)     obs="$(( ${obs%w} * 2))" ; oconvrate=1024 ;;
        (b)     obs="${obs%b}" ; oconvrate=1024 ;;          
        (B)     obs="${obs%B}" ; oconvrate=1000 ;           
                case "${obs: -1}" in                        
                        (K)     obs="$(( ${obs%K} * 1000 ))" ;;
                        (M)     obs="$(( ${obs%M} * 1000 * 1000 ))" ;;
                        (G)     obs="$(( ${obs%G} * 1000 * 1000 * 1000 ))" ;;
                        (T)     obs="$(( ${obs%T} * 1000 * 1000 * 1000 * 1000 ))" ;;
                        (P)     obs="$(( ${obs%P} * 1000 * 1000 * 1000 * 1000 * 1000 ))" ;;
                        (E)     obs="$(( ${obs%E} * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 ))" ;;
                        (Z)     obs="$(( ${obs%Z} * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 ))" ;;
                        (Y)     obs="$(( ${obs%Y} * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 ))" ;;                                                                                                          
                esac ;;                                                                                      
        (K)     obs="$(( ${obs%K} * 1024 ))" ; oconvrate=1024 ;;                                             
        (M)     obs="$(( ${obs%M} * 1024 * 1024 ))" ; oconvrate=1024 ;;                                      
        (G)     obs="$(( ${obs%G} * 1024 * 1024 * 1024 ))" ; oconvrate=1024 ;;                               
        (T)     obs="$(( ${obs%T} * 1024 * 1024 * 1024 * 1024 ))" ; oconvrate=1024 ;;                        
        (P)     obs="$(( ${obs%P} * 1024 * 1024 * 1024 * 1024 * 1024 ))" ; oconvrate=1024 ;;                 
        (E)     obs="$(( ${obs%E} * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 ))" ; oconvrate=1024 ;;          
        (Z)     obs="$(( ${obs%Z} * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 ))" ; oconvrate=1024 ;;   
        (Y)     obs="$(( ${obs%Y} * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 ))" ; oconvrate=1024 ;;                                                                                                         
esac                                                                                                         

tmp="$( mktemp )"
rm -f "${tmp}"   
mkfifo "${tmp}"  
chmod 0600 "${tmp}"

dd ${parameters} 2> ${tmp} &
pid=${!}                    

SECONDS=0
while [ -d /proc/${pid} ] ; do
        sleep 1               
        kill -USR1 ${pid} > /dev/null 2> /dev/null
#114718+0 records in                              
#114717+0 records out                             
#58735104 bytes (59 MB) copied, 5.61526 seconds, 10.5 MB/s

        read line1
        read line2
        read line3
        isuff=""  
        osuff=""  
        ipssuff=""
        opssuff=""
        line1="${line1%+*}"
        line2="${line2%+*}"
        in="$(( ${line1} * ${ibs} ))"
        out="$(( ${line2} * ${obs} ))"
        ips="$(( ${in} / ${SECONDS} ))"
        ops="$(( ${out} / ${SECONDS} ))"
        for x in k M G T P E Z F ; do
                if [ ${ips} -gt ${iconvrate} ] ; then
                        ips="$(( ${ips} / ${iconvrate} ))"
                        ipssuff="${x}"
                        [ ${iconvrate} -eq 1000 ] && ipssuff="${ipssuff}B"
                fi
                if [ ${ops} -gt ${oconvrate} ] ; then
                        ops="$(( ${ops} / ${oconvrate} ))"
                        opssuff="${x}"
                        [ ${oconvrate} -eq 1000 ] && opssuff="${opssuff}B"
                fi
                if [ ${in} -gt ${iconvrate} ] ; then
                        in="$(( ${in} / ${iconvrate} ))"
                        isuff="${x}"
                        [ ${iconvrate} -eq 1000 ] && isuff="${ipssuff}B"
                fi
                if [ ${out} -gt ${oconvrate} ] ; then
                        out="$(( ${out} / ${oconvrate} ))"
                        osuff="${x}"
                fi
        done
        echo -en "\rIn: ${in}${isuff} (${ips}${ipssuff}/sec) - Out: ${out}${osuff} (${ops}${opssuff}/sec)"
done < "${tmp}"
echo
rm -f "${tmp}"

 

 

dd-sda-sdb.sh - копирует 10000Mb с обного винта на другой

dd.sh if=/dev/sda of=/dev/sdb count=10000 bs=1M

Мои цвета в Midnight Commander

12.12.2008

Зеленый с черным, для рута красный с черным. Вставить в ~/.bashrc

 

MC_COLOR_TABLE=normal=green,default:directory=brightcyan,default:link=,black:executable=,black:device=,black:special=white,black:marked=brightmagenta,black
if [ "`id -u`" = "0" ]; then
    MC_COLOR_TABLE=normal=brightmagenta,default:directory=brightcyan,default:link=,black:executable=,black:device=,black:special=white,black:marked=brightgreen,black
fi
export MC_COLOR_TABLE

Импорт MySQL баз

12.12.2008

Импортирует базы из дампов.

 

#!/bin/sh

USER="fern"
PASSWORD="1"
MYSQL="/usr/local/bin/mysql"

echo "Got $# to import"
for i in $*
do
    echo "Importing $i file";
    gzip -dc $i | $MYSQL --user=$USER --password=$PASSWORD --default-character-set=utf8
done

Backup MySQL баз

12.12.2008

Скрипт сохраняет дамп каждой базы в отдельный файл.

 

#!/bin/sh
# sonia 16-nov-05
# backup each mysql db into a different file, rather than one big file
# as with --all-databases - will make restores easier

USER="fern"
PASSWORD="1"
OUTPUTDIR="/root/backup"
MYSQLDUMP="/usr/local/bin/mysqldump"
MYSQL="/usr/local/bin/mysql"

# clean up any old backups - save space
#rm "$OUTPUTDIR/*.sql.gz" > /dev/null 2>&1

# get a list of databases
databases=`$MYSQL --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
#databases=djb

# dump each database in turn
for db in $databases; do
  echo Dumping $db
  $MYSQLDUMP --force --opt --user=$USER --password=$PASSWORD \
  --databases $db | gzip -c > "$OUTPUTDIR/$db.sql.gz"

Автоматическое копирование файлов большого объёма по ssh

12.12.2008

Стала задача переписать домашние директории с одного сервера на другой. Места запаковать файлы нет. По FTP долго. 

Скрипт заворачивает налету в tar.bz2, пихает в stdin по ssh и на той стороне это налету распаковывается (или не распаковывается). Чтобы не вводить пароль для каждого файла, пробросил ssh ключики на другом хосте.

 

#!/bin/sh

TARGETDIR="/root/HOMES";
USERNAME="root";
SERVER="62.149.9.30";

echo "Got $# input files"
for i in $*
do
  echo "Doing $i"

  ## Unpack on other side
  #tar cjf - $i | ssh $USERNAME@$SERVER "cd $TARGETDIR ; tar xjf - ;"

  ## Do not unpack on other side
  tar cjf - $i | ssh $USERNAME@$SERVER "cd $TARGETDIR ; cat > $i.tar.bz2 ;"