воскресенье, 28 марта 2010 г.

Linux Debian,Ubuntu - чуть-чуть о правах доступа к файлам

r =4 (чтение)
w =2 (запись)
x =1 (исполнение)
- =0 (никаких прав)
Для вычисления требуется сложить числа
Пример:
-rw-rw-rw-
rw =4+2+0=6

Таким образом получаем.
755:
Владелец файла - полные права, т.е. исполнение, запись, просмотр.
Участники группы - просмотр и исполнение.
Остальные пользователи - просмотр и исполнение.

777:
Все пользователи могу править, исполнять и просматривать.

666:
Все могут редактировать и просматривать, но никто не может запускать.

644:
Все могут просматривать, но только владелец может записывать.

Установка SUID-бита:
chmod 1xxx filename
xxx - это те 3 цифры, про которые мы говорили выше. 1-ка означает как раз таки этот самый suid бит, то есть файл будет исполняться с правами его владельца.

Позже постараюсь описать все это более развернуто, сейчас просто так, чтоб не забыть.
П.с.Кроме указанных Дебиана и Убунту это все также актуально для остальных Линуксов и BSD*.

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

Видеонаблюдение под Linux

Создаем систему видеонаблюдения с датчиком движения на основе Debian Linux и web-камеры.
На современном рынке присутствует множество различных компаний, которые предлагают всяческие системы видеонаблюдения, слежения и пр. Однако все они стоят значительных денег. В рассматриваемом же случае нам нужно всего лишь получить возможность посмотреть на то, что происходит в подъезде, когда нас там нет, или подглядеть за кем-то в другой комнате.
Для этого нам надо:
1) Компьютер с установленным на него Debian или Ubuntu
2) Web-камера.
3) проводок, их соединяющий.
Собственно, и все:) Ставим камеру в боевое положение, включаем компьютер и соединяем их. Система готова.

Остается только поставить необходимый софт.
Я для этих целей использовал программу motion, поставляемую в стандартном репозитории debian. Процитируем то, что про нее пишут разработчики:
Motion -- программа, которая контролирует видео сигнал от одной или более камер и в состоянии обнаружить, если часть изображения изменилась. Другими словами -- это детектор движения.

Работа с motion ведётся через командную строку. Программа не имеет графического интерфейса пользователя. Установка и настройка программы осуществляется через командную строку или через файлы конфигурации.

Motion сохраняет информацию с камер в следующих форматах:

- jpg файлы
- ppm файлы
- mpeg видео последовательности
Кроме того, Motion имеет собственный простой веб-сервер, позволяющий загружать изображения с веб-камеры через браузер.
То есть, своими словами, она предоставляет нам следующие возможности.
1) Постоянное получение картинки и видео с камеры и запись этого на носитель, т.е. она предоставляет возможность видеорегистратора.
2) Датчик движения. Т.е.мы можем записывать видео и картинку только в том случае, если кто-то или что-то двигается в области наблюдения. Кроме того, можно настроить, чтобы детекция видео происходила в какой-то определенной области изображения.
3) Трансляция видео по сети. Т.е. мы можем смотреть в реальном времени, что происходит дома, когда нас там нет.

Установка:
sudo aptitude install motion
Как было сказано выше, motion работает из командной строки и использует конфигурационные файлы для своих настроек.
В этом Файле возможно выбрать, с какой камерой работать, производить запись фото и видео постоянно или при движении, с каким качеством должна быть картинка, транслировать ли видео в сеть и много прочее. Все это очень подробно описано в комментариях этого файла.

Так же существуют альтернативные программы, такие как ZoneMinder и AVReg. Их я пока не тестировал.
Собственно, на этом все, удачного наблюдения:)

пятница, 19 марта 2010 г.

Linux: Добавляем jar-файлы в CLASSPATH, или подключаем сторонние библиотеки

В этом блоге я уже писал о том, как вообще прописывать переменную CLASSPATH в Linux Debian.
Сейчас же в ходе разработки столкнулся с необходимостью подключить в свой проект библиотеку, созданную сторонним разработчиком. Библиотека представлена файликом вида name.jar.
Для начала я попытался положить этот файл в директорию, заданную в уже прописанном classpath. Однако, это не помогло, компилятор не находил классов из этой библиотеки.
Задача: Добавить библиотеку в виде name.jar в CLASSPATH.
Решение: Сделать это просто.
1) Создаем директорию, в которой будет храниться эта библиотека:
mkdir /home/username/libraries/
2) Кладем файл в эту директорию:
mv name.jar /home/username/libraries/
3) Добавляем в CLASSPATH следующее (Как добавлять, описано здесь)
/home/username/libraries/*
Готово:)

четверг, 4 марта 2010 г.

Java - сравнение строк

Встала передо мной задача, сравнить пару строчек в Java.
Выглядело это примерно так:

String str1 = new String("Test");
String str2 = new String("Test");
if (str1 == str2)
System.out.println("Строчки совпадают!");

Однако, сообщение "Строчки совпадают!" не появилось.
Казалось бы, как так может быть, строки-то ведь одинаковые.
Разгадка же проста: при сравнении с помощью "==" в реальности сравниваются указатели на строки, а, так как str1 и str2 указывают на строки, находящиеся в разных местах памяти, они не равны друг другу.
Спасибо юзеру incrab, указавшему на мою ошибку в первоначальном варианте поста.
Если бы мы делали следующее:

String str1 = "Test";
String srt2 = str1;
if (str1 == str2)
System.out.println("Строчки совпадают!");

то сообщение бы вывелось, так как и str1 и str2 указывают на одну и ту же строку. (Проверить это можно, изменив str1, например str1 = "New string". Тогда, при выводе str2 на экран выведется не "Test", а "New string".

Так как же все-таки сравнить то, что находится по указателям?
У класса String существует специальный метод equals, переопределенный из класса object , возвращает true , если аргумент obj не равен null , является объектом класса string , и строка, содержащаяся в нем, полностью идентична данной строке вплоть до совпадения регистра букв. В остальных случаях возвращается значение false.

Пользоваться им можно, например, так:
if (str1.equals(str2))
System.out.println("Строчки совпадают!");