Показаны сообщения с ярлыком скрипты. Показать все сообщения
Показаны сообщения с ярлыком скрипты. Показать все сообщения

четверг, 16 февраля 2012 г.

Обработка нажатий вложенного div в javascript

Недавно встала задача по обработке событий onClick для 2-х div'ов - один вложен в другой. Пример:

Мне нужно было обрабатывать нажатия по коричневому div'у (который был вложен в синий div) так, чтобы onClick для синего div'а не срабатывал. Мне помог этот тред на javascript.ru.

Ну и вот пример:

 
<div id="parent" style="width: 200px;height:200px;background-color: #0000aa;">
    <div id="nested" style="width:100px; height:100px; background:#CC6600;">
    </div>
</div>
<script>
    $("#parent").click(function() {alert("parent");});

    $("#nested").bind("click", function(e) {
        alert('nested');
        stop_bubbling(e);
    });
    
    function stop_bubbling(e) {
        if (e.stopPropagation) e.stopPropagation();
        else e.cancelBubble = true;
    }
</script>

суббота, 7 января 2012 г.

Bash: удаление всех директорий кроме указанной

Можно обойтись простой командой:

rm -rf $(ls -d */ | grep -v SAVETHISDIRECTORY)

Здесь список директорий передается как параметр команды rm с помощью блока $(). Параметр -d у ls необходим для вывода лишь каталогов.

Еще один вариант

find -maxdepth 1 -mindepth 1 -type d ! -name 'SAVETHISDIRECTORY' -exec rm -rf {} \;

В этом случае используется вызов команды rm -rf для всех найденных директорий в текущем каталоге, исключая указанную.
Параметры maxdepth 1 и mindepth 1 нужны для того, чтобы не удалялись вложенные директории внутри SAVETHISDIRECTORY, а также чтобы не производилось попытки удалить текущий каталог (".").
-type d необходим для поиска только директорий.
Самая важная часть здесь - это ! -name 'SAVETHISDIRECTORY'. Она указывает find на то, что необходимо пропустить ("!") все элементы, имя которых ("-name") соответствует шаблону SAVETHISDIRECTORY.
Ну и -exec rm -rf {} \; удаляет все найденные find каталоги.

понедельник, 14 марта 2011 г.

Эффективное управление вебкамерой с использование motion + bluetooth

"Everything is better with bluetooth" (c) The Big Bang Theory.

Предисловие

Для наблюдения за посещением серверной я уже больше года использую отличную программу motion. Единственная сложность, возникающая при использовании - не забыть выключать видеонаблюдение при входе в серверную и включать при выходе из серверной (что делалось по ssh). Недавно мне это надоело, тем более, что под руку попал USB донгл с bluetooth.

Немного магии shell

после этого меня посетила интересная мысль. Так как я и мой друг и напарник в одном лице mag_delta (спасибо ему за техническую базу :) ) имеем телефоны с поддержкой bluetooth, то почему бы не сделать автоматическое включение камеры, когда оба наших устройства находятся вне области доступности, и автоматическое выключение, как только мы в ней появляемся? Реализовать это все было задумано на bash. В общем, после пары минут написания и тестирования, я написал вот такой простенький скрипт:


#!/bin/sh
#Переменная,в которой хранится предыдущее состояние (в серверной мы или нет)
HERE=0
#Бесконечный цикл
while [ 1 -eq 1 ]; do
#Сканирование на предмет наличия наших телефонов
hcitool info XX:XX:XX:XX:XX:XX > /dev/null
V1RUS=$?
hcitool info XX:XX:XX:XX:XX:XX > /dev/null
MAG=$?
#В случае, если хоть один из телефонов в области досигаемости
if [ $V1RUS -eq 0 -o $MAG -eq 0 ] ; then
#Выводим на stdout сообщения...
echo "HE IS HERE"
if [ $V1RUS -eq 0 ] ; then
echo "V1RUS HERE"
fi
if [ $MAG -eq 0 ] ; then
echo "MAG HERE"
fi
#И, если предыдущее состояние равно нулю (нас здесь не было, а теперь появились), то убиваем motion, останавливая видеонаблюдение
if [ $HERE -eq 0 ]; then
echo "Stopping motion..."
killall motion
fi
#Устанавливаем переменную в значение 1 (мы здесь)
HERE=1
else
#Тоже самое, только включаем motion, если мы перед этим здесь были
echo "HE IS NOT HERE"
if [ $V1RUS -eq 1 ] ; then
echo "V1RUS NOT HERE"
fi
if [ $MAG -eq 1 ] ; then
echo "MAG NOT HERE"
fi

if [ $HERE -eq 1 ]; then
echo "Starting motion..."
motion
fi
HERE=0
fi
#Для избежания разных неприятных эффектов, устанавливаем интервал сканирования в примерно 10 секунд.
sleep 10
done


Итого:

Этот простой скрипт, хоть и написан в спешке, может быть сколь угодно расширен (например, можно добавлять данные о посещаемости в БД :)), а также он экономит кучу времени и нервов. Надеюсь, он кому-нибудь пригодится.

PS.

Вы можете спросить, почему используется hcitool info MAC_ADDRESS, а не hcitool scan? Ответ прост: bluetooth на телефоне может быть в скрытом режиме, и hcitool scan его не обнаружит, в то время как hcitool info найдет его.