четверг, 24 декабря 2009 г.

Java - установка сокета с таймаутом

Представим, что вы пишете программу, которая бы открывала сокет на какой-либо порт и ждала бы от него ответа. Например, у вас есть список серверов, на каждый из которых надо зайти. И вдруг какой-то из серверов выходит из строя. Если не установить таймаут на создания сокета, то ваша программа будет висеть до тех пор, пока сервер не починят. Вот для этого случая и написан этот пост.
//Установка socket используя timeout
import java.net.*;
import java.io.*;
String AddAsStr="yandex.ru"
try {
AddrAsIAdr = AddrAsIAdr.getByName(AddrAsStr);//Переводим адрес из строки в тип InetAddress
} catch (Exception e) {
System.out.println("Could not resolve IP-address");
return 1;
};
try {
socket = new Socket();
socket.setSoTimeout(1000);
socket.connect(new InetSocketAddress(AddrAsIAdr,80),1000);//открываем сокет на сервере yandex.ru на порт 80 с таймаутом 1000 миллисекунд
} catch (Exception e) {
System.out.println("Could not establish socket");
return 1;
};

Вот и все:) В случае, если IP адрес не известен или socket не откроется за 1 секунду, программа выдаст соотвествующее сообщение.
P.s. подробнее про технологию сокетов в Java рекомендую читать на официальном сайте Java Sun.

Java - как сравнить строку с регулярным выражением (regexp)

Здесь просто и кратко о том, как сравнить в Java строку с регулярным выражением. Точнее, про то, как проверить, есть ли данный регексп в строке.
Делается это так:
String regexp="a*b";//Задаем регулярное выражение
String string="aaabbb";//Задаем строку, в которой будем его искать
boolean ok = Pattern.matches(regexp,string);//сравниваем
/* Если регексп присутствует в строке, то ok будет равно true,
* если нет - то false.
* В рассмотренном случае ok= true
*/
System.out.println(b);//на экране появится true

regexp="cd";
string="dddccc";
System.out.println(b);//на экране появится false
Вот и все.
О том, из чего составляются регулярные выражения и т.п. лучше всего читать официальную документацию. Полнее и лучше, чем там, написать очень сложно.

воскресенье, 20 декабря 2009 г.

Включение звука в Debian Linux (alsa)

Этот пост всего ради одной команды, которая включает звук в Linux:
sudo aptitude install alsa-base
Alsa - это звуковая подсистема в Linux, предоставляющая приложениям возможность воспроизведения звука. В вольном изложении суть такова - какое-то приложиение, например, плеер, хочет играть музыку. Тогда он говорит Алсе - я хочу играть вот это вот, а сама Альса уже обращается непосредственно к драйверу ядра, отвечающему за звуковую карту. Таким образом, чтобы у вас работал звук, вам надо установить Alsa и проследить, чтобы в ядре были модули для вашей звуковой карты. Для наиболее распространненых видов они там есть.

суббота, 19 декабря 2009 г.

Трактат о Любви в две сотни слов

Ты любишь меня наотмашь
По дачным полынным обочинам…
(Вера Павлова)

Что есть Любовь?

Этим вопросом каждый на протяжении жизни
Задается множество раз и не находит ответа.
Нет лучше способа узнать о том, что она есть,
Чем обнаружить ее в проявлениях.

Когда человек говорит о любви, он вынужден
Говорить о ней как о не-Любви.
Это и называют «говорить о любви».
Но почему это так?

Любовь, которая может быть выражена словами –
Не есть Истинная любовь.
В стремлении проявить Истинную любовь,
Которая не может быть выражена словами, образами и мыслями,

Человек вынужден говорить о ней
Не как об Истинной любви,
Которой она является,
Но как о том, чем она не является –
Как о словах, образах
И мыслях.

Не потому ли юный Петр из 5Б дергает Надю за косу?
Не за этим ли отрок Павел пишет на стене
«Оля - сиська»?
Не оттого ли говорят «Бьет, значит любит»?

Но поскольку Бог есть Любовь,
То Петр в проявлении своей Любви
Не отличен от Бога.

Но поскольку и Павел в проявлении своей Любви
От Бога не отличен,
То и Бог не отличен от каждого из них,
Равно как и от прочих.

Вот почему говорят, что Истинная Любовь
Не отлична от не-Любви,
Подобно тому, как совершенная мудрость
Не отлична от глупости.

Это не отличие и есть Любовь.

Устанавливаем Linux Debian c USB-флешки

Предыстория:
Купил себе ноутбук, Lenovo U350 и решил поставить на него Debian в компанию к предустановленной Viste. Висту, должен признаться, оставил только для игр. Все таки играть из под Wine не совсем то:) Возник вопрос - как ставить Debian, ведь у этого нетбука нет cd-дисковода. Ответ  - с флешки.
Задача:
Создать загрузочную флешку и установить с нее дебиан.
Решение:
1) Находим компьютер с Linux на борту. Вставляем в него свою флешку.
Скачиваем вот этот файл (Предназначен для архитектуры i386, если вы хотите для какой либо другой - то файл лежит там же, только в ссылке замените i386 на название вашей, например, amd64). В нем содержится установщик, который, после того, как вы загрузитесь с флешки, позволит вам выбрать, с какого iso-образа устанавливать систему.
Для скачивания можете выполнить:
wget http://mirror.yandex.ru/debian/dists/stable/main/installer-i386/current/images/hd-media/boot.img.gz
2) Заливаем этот файл на флешку следующей командой:
zcat boot.img.gz > /dev/sdX
где sdX - это устройство флешки. Узнать ее можно, выполнив команду dmesg, предварительно воткнув флешку в USB-порт.
3) Скачиваем образ, с которого будем устанавливать Debian. Я выбрал этот. Для этого выполняем следующую команду:
wget http://mirror.yandex.ru/debian-cd/current/i386/iso-cd/debian-503-i386-CD-1.iso
Скачав, заливаем его на флешку. К сожалению, на ту, с которой мы будем грузиться, залить его не получится, так как на ней создалась файловая система, с размерами, не позволяющими залить туда образ. Конечно, можно исхитриться, и увеличить ее, но мне проще было залить ее на другую флешку, предварительно ее примонтировав:
mount /dev/sdg1 /mnt/temp
где sdg1 - это раздел на этой флешке (можете посмотреть их все с помощью команды fdisk -l), а /mnt/temp - папка, куда производится монтирование.
Копируем образ на флешку и размонтируем ее:
cp debian-503-i386-CD-1.iso /mnt/temp
Если же вы хотите использовать установку по сети, то образ для нее влезет и на первую флешку.
4) Собственно, все готово.
Вставляем первую флешку в пациента, перезгружаемся, включив в биосе загрузку с usb-key, потом, когда запустится загрузчик, вставляем вторую флешку, он находит на ней наш iso-образ, и все, вперед и с песней ставим расово-верный Debian

четверг, 17 декабря 2009 г.

Google Chrome - включение синхронизации закладок

Синхронизация закладок - это крайне необходимая вещь для всех тех, кому часто приходится лазать по интернету с разных компьютеров. К примеру, нашлось свободное время на работе, нашёл какую-либо интересную статью на каком-то сайте, а прочитать не успел. Тогда надо всего лишь добавить его себе в закладки, потом придти домой, и эта ссылка будет уже и в закладках домашнего бразуера.
Насколько мне известно, синхронизация закладок в Google Chrome возможна пока только в dev-версии. Поэтому, чтобы ее включить, надо сначала сделать следующее.
Под Windows - скачать вот эту программку и запустить ее. В ней выбрать канал dev, потом пройти в Хроме так - настройки - О браузере Google Chrome - Обновить.  Если же там не будет кнопки обновить, или он не будет обновляться до версии 4 с чем-то, то попробуйте установить dev-версию, пройдя по этой ссылке. Потом перезапустить его и готово, в настройках появится кнопочка синхронизация закладок. Она синхронизирует ваши закладки с вашим google-аккаунтом. В Linux же порядок действий следующий - надо подключить репозиторий Chrome deb http://dl.google.com/linux/deb/ unstable non-free main. Тогда у вас Chrome будет сам автоматически обновляться до dev-версии, а синхронизация закладок будет работать так же, как описано для Windows чуть выше.
P.s. Если же у Вас нет Google-аккаунта или вы по каким-то причинам не хотите пользоваться способом, описанным выше, то к вашим услугам расширение Xmarks для Chrome, которое позволит синхронизировать закладки не только между бразузерами Chrome, но а также и между Mozilla FireFox, Safari и IE.

UPD: Все возможные ключи запуска можно найти здесь.

Поднятие FTP-сервера в Debian для бытовых нужд.

Предисловие.
У меня сложилась следующая ситуация. Купил себе ноутбук, включил его в домашнюю сеть, до этого состоявшую из роутера и десктопа. И сразу захотелось получить возможность качать на него фильмы, программы и т.д. из локальной сети провайдера, а именно из местного p2p. Но там для того, чтобы что-то скачать, сперва надо что-то выложить самому. Как говорится, чтобы купить что-нибудь ненужное, сперва надо продать что-нибудь ненужное. Качать же что-то из других источников было лень. Поэтому решено было слить немножко шары с десктопа под управлением Linux Debian, за которым, кстати, в этот момент сидела моя девушка (вот, кстати, ее блог). При этом мешать ей было крайне нежелательно.
Задача.
Поднять на десктопе FTP-сервер, для того, чтобы можно было быстро скачать что-то с одного компа на другой в пределах своей домашней сети.д
Решение.
1) Была скачана программа Putty, которая позволяет из под Windows заходить на Linux-компьютеры и сервера по протоколу ssh и получать доступ к консоли. (К счастью, sshd я поднял на десктопе заранее)
2) В качесте FTP-сервера был выбран proftpd. Установил я его следующим образом:
sudo aptitude install proftpd
При установке он спросит, в каком режиме надо работать - как сервер или под управлением inetd, я выбрал inetd, так как в таком режиме он будет меньше грузить систему. Правда, производительность его тоже снизится, но ведь туда буду только я ходить, а не толпы народа.
3) Была произведена его минимальная настройка. Так как он ставился не для production-целей, я особо не стал грузиться и курить мануалы, а сделал следующее:
sudo vim /etc/proftpd/proftpd.conf
Все настройки были оставлены по умолчанию, я только добавил следующее:
<Anonymous /mnt/d/Downs>
User ftp
Group nogroup
UserAlias anonymous ftp
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell off
MaxClients 10
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
</Anonymous>
Вроде как все интуитивно понятно, но поясню: секция Anonymous задает параметры для анонимного доступа в директорию /mnt/d/Downs, где у меня лежит всякая вкуснятка. Аноним может входить под именем ftp, anonymous. В секции Limit мы запрещаем ему писать в этой директории.
4) Собственно, это все, осталось только выполнить reload сервера, чтобы он прочитал обновленный конфиг:
sudo /etc/init.d/proftpd reload
5) Заходим любым фтп-клиентом. Лично я использовал для этой цели свой браузер, Google Chrome. Чтобы зайти, в адресной строке надо набрать
ftp://192.168.0.153/
,
где 192.168.0.153 - это IP адрес моего десктопа.
В результате получаем следующее:

И все, берем и качаем то, что нам надо))

вторник, 15 декабря 2009 г.

Веборама - отличный бесплатный аналог Last.fm

Совершенно внезапно открыл для себя замечательный ресурс -Веборама. По сути он представляет собой бесплатный почти аналог крайне известного Last.fm. Музыка отсортирована по жанрам, можно выбрать жанр (рок, поп, рэп и т.п.), поджанр, и тогда вам будут рандомно проигрываться песни выбранного направления. Так же можно воспользоваться поиском и найти конкретно то, что вам нужно. Но самая главная фишка сервиса - подбор музыки в зависимости от настроения!

Таким образом, в каком настроении не находился бы пользователь, он всегда может слушать музыку "в тему". Собирается статистика по музыке, которую вы слушаете, какие-то альбомы  и треки можно откладывать для прослушивания на потом, если сейчас послушать некогда.
На главной странице так же отображаются популярные песни, клипы, исполнители. Есть информация о предстоящих концертах - кто, где, когда и что. Так же присутствуют сообщества, в которых можете написать свою и почитать другие рецензии на любимых исполнителей, альбомы и треки.
Должно заметить, что вся музыка на сайте загружается самими пользователями, так что бывают случаи, когда в альбоме не хватает пары песен и т.п.:) И да-да-да, все абсолютно бесплатно :))
Ну и вот вставил себе оттуда песенку своей любимой Аврил:)

понедельник, 14 декабря 2009 г.

Linux - посылаем сообщения другим пользователям через консоль

Всегда интересовался, как послать сообщения другим юзерам через консоль, так, чтоб у них это отобразилось. Сейчас наконец-то разобрался. Это очень просто, делается всего одной командой write:
write username
где username - имя пользователя, с которым вы хотите пообщаться.
Чтобы запретить другим вот так вот вламываться в вашу консоль, используйте команду mesg. C параметром y она разрешает слать вам мессаги, а с n - запрещает:
mesg n
В довесок, есть команда wall, которая шлет сообщения всем пользователям, залогиненным на этот момент:
 wall [file]
[file] - это имя файла, который выведется всем пользователям. Если его не печатать, то будет посылаться то, что вы печатает, то есть стандартный поток ввода.
Все проверено в Debian Linux.

воскресенье, 13 декабря 2009 г.

Небольшой обзор аудиопроигрывателей под Linux

На днях столкнулся с проблемой (точнее, столкнулся давно, но решать решил лишь сейчас) - мой любимый проигрыватель Amarok написан под KDE, хотя мне самому намного больше нравится использовать Gnome. Поэтому перечислю, что я пробовал, и на чем остановился:
Amarok - очень мощный плеер,  с удобной библиотекой, поиском текстов, обложек, информации об исполнителях на википедии. Глобальные хот-кеи, сворачивание в трей, поддержка многих форматов, отправка статистики на LastFM - все это в нем есть. В общем, все то, что мне нужно в нем есть. Но - под Gnome он работает совсем не так хорошо, как под KDE, и тащит с собой в зависимостях кучу всяких библиотек.


Exaile - его я попробовал после Amarok'a, вычитав в интернете, что это проигрыватель, очень похожий на Амарок, но написанный на GTK+, то есть подходящий под Gnome. Однако, когда я его поставил, во всем почувствовал какую-то урезанность и уж слишком явный закос под Amarok. Да и подтормаживал он у меня почему-то.


Audacios - он оказался маленьким и быстрым плеером, выглядящим приблизительно как Winamp второй версии. Однако в нем мне не удалось найти вообще даже подобия той библиотеки медиа, которая была в моем любимом Амароке. Да и поиск по плейлисту работал ужасно. Точнее, совсем не работал.


Banshee - вот на нем я и остановился. Banshee - проигрыватель на GTK+, отлично работает под Gnome и радует меня всеми теми функциями, которых я жду от приличного проигрывателя.


Ну и на последок - можно теоретически вообще какой-то определенный файл прослушать просто проигрывателем mpg123 или mpg321 - всего лишь командой "mpg123 filename.mp3":)
И да, все проигрыватели из этого списка можно установить так
sudo aptitude install amarok
Слово "amarok"  замените на имя того проигрывателя, который вам нужен:)

Linux - многопоточная скачка с сетей p2p - dc.

Протокол Direct Connect используется в пиринговых сетях типа DC++. В этих сетях пользователи могут обмениваться файлами самых разных типов. Каждый из них присоединяется к серверу-хабу, при этом расшаривает какую-то свою информацию. В хабе реализован чат и возможность посмотреть, сколько пользователей на нем и у кого что расшарено, возможен поиск. Есть самые различные клиенты для таких сетей - FlyLinkDC, StrongDC и т.д. У самого распростарненного клиента под Линукс  есть один большой недостаток - невозможна одновременная скачка одного файла с различных пользователей:( Я сумел найти только вот тут пропатченную версию linuxdcpp, поддерживающую многопоточную скачку. И то она только для архитектуры i386:(

воскресенье, 6 декабря 2009 г.

Устанавливаем калькулятор в Linux Debian

Внезапно передо мной встала задача установить калькулятор в линуксе, так как в моем Debian предустановлено его не было. Причем я искал приложение на GTK, так как у меня установлен Gnome. Google же в ответ на мои запросы выдавал всякие страшные штуковины типа вот этого или этого. Мне же хотелось получить просто аналог того самого calc, который был в windows, чтобы можно было парой щелчков перегонять числа из десятеричной системы в двоичную и т.д., а не изучать еще один режим программированя. Вот он, calc, на картинке:

Решение же нашлось в виде gcalctool - симпатично и очень похоже на виндовую реализацию:


Вот его я и решил себе поставить. Для этого надо выполнить всего лишь одну команду:
sudo aptitude install gcalctool
И все, можно наслаждаться подсчетами. Стоит заметить, что он обладает тремя режимами - простым, финансовым и научным.

Взаимодействие PHP и MySQL

В этом посте расскажу о том, как с помощью PHP осуществлять запросы к базе данных на основе MySQL. Использовать для этого будем web-сервер apache 2 с установленным модулем PHP. Все эти три компоненты практически бесплатны и распространяются под лицензией GNU. Подробнее о том, как устанавливать PHP, Apache и MySQL постараюсь написать в одной из следующих статей. Сейчас же представим, что все это уже установлено и сконфигурировано у вас дома, либо вы используете хостинг с поддержкой PHP и MySQL.
Итак, пусть у нас в MySQL есть база world, а в ней таблица people с полями name и age, где name - это имя, а age - возраст человека. И мы ставим себе целью выбрать из этой таблицы всех людей моложе 20 лет. Очевидно, для этого нам надо использовать запрос SELECT.
Начнем. Создаем в папке, которую Apache считает корневой, файл со следующим содержанием
<!DOCTYPE html>
<html>
<head>
<title>Запрос к базе данных</title>
</head>
<body>
<?
//прописываем параметры для соединения с БД
$hostname='localhost';//Имя хоста с БД MySQL, в нашем случае это localhost
$dbName='world';//Имя базы данных, которая нам нужна
$dbUser='username';//Имяпользователя MySQL
$dbPasswd='password';//Его паролт
$dblink=mysql_connect($hostname,$dbUser,$dbPasswd) or exit (3); //Соединяемся с сервером или ошибка
$db_selected=mysql_select_db($dbName,$dblink) or exit(3);//Выбираем БД world
//Подготавливаем наш запрос SELECT
$query="SELECT * FROM people WHERE people.age<20";
//Отправляем запрос в базу
$result=mysql_query($query,$dblink);
//Функция mysql_query отправляет запрос $query по указателю $dblink на базу.
//Обрабатываем результат
while ($man=mysql_fetch_array($result))
//Функция mysql_fetch_array обрабатывает результат, занося по строчке из него в ассоциативный массив $man по полям, которые называются так же, как заголовки столбцов в MySQL
{
 echo "Name = ".$man['name']." Age= ".$man['age']."<br>";//выводим каждую строчки из результата на экран
};
?>
</body>
<html>
Сохраняем этот файл как testquery.php и переходим браузером по адресу http://your_host_name/testquery.php
Все готово) Apache запускает PHP скрипт, и тот выводит нам внутри вашей веб-страницы содержимое таблицы MySQL.