воскресенье, 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("Строчки совпадают!");

понедельник, 22 февраля 2010 г.

Контроль температуры процессора в Linux Debian (Ubuntu)

Предыстория: Сейчас в Питере очень холодно, -18 градусов при 98% влажности, включил ноутбук и надеюсь, что согрею пальцы его клавиатурой. А от чего зависит температура клавиатуры? Правильно, от температуры процессора:)
Соответственно, стало интересно, какая же сейчас температура у процессора.
Задача: Найти способ, как узнать температуру процессора в Linux Debian (Ubuntu)
Решение: Необходимо установить пакет lm-sensors.
Устанавливается он следующей командой:
sudo aptitude install lm-sensors
После того, как он установится, запускаем из-под рута приложение sensors-detect:
sudo sensors-detect
Оно определит, значения каких датчиков вы сможете контролировать. В моем случае все свелось к нажатию энтеров:)
Итак, когда все датчики определены, запускаем приложение sensors:
$ sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:       +42.0°C  (crit = +98.0°C)
Вот и все, температура процессора у меня составляет 42 градуса цельсия!:)

P.s. необходимо также отметить, что существуют специализированные программы для мониторинга системы, которые показывают температуру процессора, его загрузку, скорость передачи данных по сети, заполненность жестких дисков, нагрузку на винчестеры и многое другое другое. Это conky и gkrellm

четверг, 18 февраля 2010 г.

JQuery - изучение. Часть 2. Пробы.

Продолжение этой статьи.
Еще один пример - отмена действий по умолчанию.
Теперь мы укажем в head вместо файла jquery.js, лежащего у нас на компьютере, файлик, лежащий на сайте jquery на Гугловском CDN. Таким образом, мы сможем понизить нагрузку на наш сервер, засчет того, что библиотека jquery будет запрашиваться не с нашего сервера, а с серверов гугла:)
Приведем страницу к следующему виду:
 <!DOCTYPE html>
 <html lang="en">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
   <script type="text/javascript">
     $(document).ready(function(){
       $("a").click(function(event){
         alert("As you can see, the link no longer took you to jquery.com");
         event.preventDefault();
       });
     });
  
   </script>
 </head>
 <body>
   <a href="http://jquery.com/">jQuery</a>
 </body>
 </html>
 Строчка "event.preventDefault();" означает предотвращение дефолтного действия по событию. В данном случае это значит, что при клике по ссылке не будет осуществлен переход по ней, который является действием по умолчанию для события "клик по ссылке".
Пример - добавление и забирание CSS-класса.
На всякий случай, тем, кто не знает, что такое CSS - предлагаю ознакомиться с этой статьей в Википедии.
Добавим в head нашей страницы следующие строки:

<style type="text/css">
    a.test { font-weight: bold; }
</style>
Они описывают класс ссылок test. Ссылки, принадлежащие этому классу, будут написаны жирным шрифтом.
Далее, в нашу функцию, вызываемую при нажатии на ссылку, добавляем следующую строчку:
$("a").addClass("test");
В результат при клике по ссылки все ссылки в документе станут написаны жирным текстом.
Эффекты.
В JQuery присутствует поддержка многих эффектов, призванных сделать ваши страницы как можно более красивыми и оригинальными.
Например, заставим нашу ссылку постепенно исчезать после клика по ней.
Для этого в обработчик клика следует добавить следующую строку:

$(this).hide("slow");
И все, мы видим, как ссылка постепенно исчезает после клика.
На этом на сегодня всё, продолжим разбираться с JQuery в следующих статьях:)

среда, 17 февраля 2010 г.

JQuery - изучение. Часть 1. Что это за зверь?

Что такое JQuery
В интернете я все чаще и чаще натыкаюсь на слово JQuery почти во всем, что так или иначе связано с дизайном сайтов,  разработкой веб-приложений, AJAX-запросами и прочими интернет-фишками. Естественно, что мне захотелось разобраться, что же это за зверь такой и как его использовать в своих целях.
Итак, определение следующее:
jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.
То есть, говоря простыми словами, JQuery это библиотека на языке JavaScript, которая упрощает разработку веб-страничек (в том числе обработку событий, добавление анимации и AJAX-взаимодействий для ускорения web-разработки). Как говорят разработчики, JQuery  должна полностью изменить способ, которым  мы пишем JavaScript-код.
С чего же начать изучение этого чуда? Я решил, что лучше всего для этого подходит документация и примеры с официального сайта.

Скачиваем JQuery
С начала, разумеется, надо скачать JQuery-библиотеку.  В разделе "Скачиваем JQuery" приведены ссылки на различные релизы. Лучше всего, конечно, скачать самый последний - JQuery 1.4.1.  Скачиваем его и кладем в нужную папочку, у меня это "scripts":
wget http://code.jquery.com/jquery-1.4.js
Отлично, теперь библиотека JQuery установлена на вашем компьютере. Остается только использовать. Для этого хорошо бы понять, как она работает. На сайте JQuery этому посвящена отдельная страница.
Итак, попробуем следовать в точности их рекомендациям.
Создаем страничку со следующим кодом:
<!doctype html>
<html>
<head>
<script type="text/javascript" src="jquery-1.4.js"></script>

<script type="text/javascript">

</script>
</head>
<body>
<a href="http://jquery.com/">jQuery</a>
</body>
</html>
В строке <script type="text/javascript" src="jqery-1.4.js"></script>" "jquery-1.4.js" необходимо заменить на путь к скачанному файлику jquery-1.4.js, в моем случае - это "script/jquery.js". Если у вас этот файлик лежит в той же директории, что и файл странички, который мы только что создали, то ничего менять не надо:)
Запуск функций при загрузке документа:
Нам предлагают рассмотреть самый первый пример JQuery:
Когда JavaScript программисты хотят, чтоб какое-либо событие выполнилось после того, как страница загрузится, они обычно пользуются следующим способом:
window.onload=function(){alert('welcome!');}
Внутри фигурных скобок тот код, который исполнится при срабатывании события onload объекта window.  Он начинает выполняться уже тогда, когда еще не загрузились все картинки. В JQuery есть такое понятие, как "событие готовность", которое выполняется, когда документ полностью готов к манипулированию им.
Добавим обработчик к событию нажатия на ссылку, ведущую на сайт JQuery:
для этого нам надо в элемент между тегами <script type="text/javascript"> и </script> вписать следующее:
    $(document).ready(function(){
       $("a").click(function(event){
         alert("Спасибо за визит!");
       });
     });
Открываем страницу, кликаем по ссылке и видим, что перед переходом на другой сайт выдает сообщение "Спасибо за визит!".
Словами это можно описать так:
Когда документ полностью загрузился
   при нажатии на a
      выдать сообщение
Итак, в целом я получил кое-какое представление о том, как работает JQuery, что это такое и даже рассмотрел пример использования JQuery.
Постараюсь в дальнейших постах углубиться в эту область, ведь JQuery - это действительно отличный инструмент.