Написано 10:46, ярлыки:

Гаджет проверки версий ядер Gentoo
Проверяет текущую версию ядра, последнюю и последнюю стабильную
#!/usr/bin/python
from grab import Grab
import subprocess,platform
g=Grab()
g.go('http://packages.gentoo.org/package/sys-kernel/gentoo-sources')
body=g.response.body
stable=g.xpath_list('//div[@class="changelogmsg"]/a/text()')[1].replace('.ebuild','').replace('gentoo-sources-','')
kernels =  g.xpath_list('//table[@class="main"]/tr/td[@class="ebuild"]/text()')
x= g.xpath_list('//table[@class="main"]/tr/td/text()')[10:]
last=kernels[0]
current=platform.release().replace('-gentoo','')
print "Current: %s | Last: %s | last stable: %s"%(current,last,stable)
subprocess.call('notify-send -i /home/megido/gentoo.png "Current: %s" "Last: %s | last stable: %s"'%(current,last,stable),shell=True)


поместить в /usr/bin/name
$ chmod +x /usr/bin/name
$ name
Enjoy ;)

edit post
Если вы системный администратор, вы в любой момент времени можете захотеть узнать кто залогинен на вашем Linux сервере. Несомневаюсь что вам известен способ, который позволяет вам узнать это, но знаете ли вы все их и используете самый удобный? В этой статье мы рассмотрим 4 возможных способа.

1. Получаем список пользователей и команды, используемые ими с помощью команды w

Команда w используется для получения списка залогиненных пользователей и выполняемых ими команд. Вывод команды w содержит следующие колонки:[cut]
 Имя пользователя
Номер tty
 Адрес, с которого произошло подключение
 Время подключения
 Время бездействия
 Время, затраченное всеми процессами в данном сеансе (JCPU)
 Время, потраченное текущим процессом (PCPU)
 Команда, выполняемая пользователем

Дополнительно могут быть использованы следующие опции:
 -h игнорировать информацию заголовка
 -u отображать текущую загрузку
 -s Удалить из вывода JCPU, PCPU, и время подключения
$ w
 23:04:27 up 29 days,  7:51,  3 users,  load average: 0.04, 0.06, 0.02
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
ramesh   pts/0    dev-db-server        22:57    8.00s  0.05s  0.01s sshd: ramesh [priv]
jason    pts/1    dev-db-server        23:01    2:53   0.01s  0.01s -bash
john     pts/2    dev-db-server        23:04    0.00s  0.00s  0.00s w
$ w -h
ramesh   pts/0    dev-db-server        22:57   17:43   2.52s  0.01s sshd: ramesh [priv]
jason    pts/1    dev-db-server        23:01   20:28   0.01s  0.01s -bash
john     pts/2    dev-db-server        23:04    0.00s  0.03s  0.00s w -h
$ w -u
 23:22:06 up 29 days,  8:08,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
ramesh   pts/0    dev-db-server        22:57   17:47   2.52s  2.49s top
jason    pts/1    dev-db-server        23:01   20:32   0.01s  0.01s -bash
john     pts/2    dev-db-server        23:04    0.00s  0.03s  0.00s w -u
$ w -s
 23:22:10 up 29 days,  8:08,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM               IDLE WHAT
ramesh   pts/0    dev-db-server        17:51  sshd: ramesh [priv]
jason    pts/1    dev-db-server        20:36  -bash
john     pts/2    dev-db-server         1.00s w -s

 
2. Получаем список пользователей с помощью команды who

Команда who используется для получения списка пользователей, залогиненных в системе. В выводе находятся следующие колонки: имя пользователя, номер tty, дата и время, адрес подключения.
$ who
ramesh pts/0        2009-03-28 22:57 (dev-db-server)
jason  pts/1        2009-03-28 23:01 (dev-db-server)
john   pts/2        2009-03-28 23:04 (dev-db-server)

Для получения отсортированного списка используем команду:
$ who | cut -d’ ‘ -f1 | sort | uniq
john
jason
ramesh
3. Узнаем под каким пользователем залогинены вы сами

Команда whoami сообщит вам информацию о том, под какой учетной записью вы залогинены в системе. Полезно использовать с похмелья
$ whoami
john

whoami дает такую же информацию, как и команда id -un
$ id -un
john
4. Смотрим историю подключений пользователя

Команда last покажет вам историю подключений для определенного пользователя. Если в качестве аргумента не указан логин какого либо пользователя, отобразится история для всех пользователей. Данная информация берется из файла /var/log/wtmp. В выводе присутствуют следующие колонки:
Имя пользователя
Номер Tty
Время и дата подключения
Время отключения
Общее время работы сеанса
$ last jason
jason   pts/0        dev-db-server   Fri Mar 27 22:57   still logged in
jason   pts/0        dev-db-server   Fri Mar 27 22:09 - 22:54  (00:45)
jason   pts/0        dev-db-server   Wed Mar 25 19:58 - 22:26  (02:28)
jason   pts/1        dev-db-server   Mon Mar 16 20:10 - 21:44  (01:33)
jason   pts/0        192.168.201.11  Fri Mar 13 08:35 - 16:46  (08:11)
jason   pts/1        192.168.201.12  Thu Mar 12 09:03 - 09:19  (00:15)
jason   pts/0        dev-db-server   Wed Mar 11 20:11 - 20:50  (00:39

edit post
для этого нужно просто вывести содержимое /etc/passwd :
cat /etc/passwd
а если нужно только реальные юзеры исключая системные:
cat /etc/passwd | awk "/bash/{print}"
даже можно усовершенстовать предидущую команду для получения более простого списка:
cat /etc/passwd | awk "/bash/{print}" | cut -f1 -d :

edit post
для начала нужно все это поставить

cd /usr/ports/audio/musicpd && make config && make install clean
также не помешает mpc
 cd /usr/ports/audio/mpc && make install clean

 cd  /usr/ports/audio/icecast2 && make install clean

Внимание!!!!
затем идет несколько недочетов допущеных криворукими портировщиками MPD на фрибсд
при установке musicpd создается конфиг /usr/local/etc/musicpd.sample

но mpc и musicpd используют старый добрый mpd.conf


по этому копируем cp  musicpd.sample  mpd.conf

и приводим в примерно такой вид

music_directory "/var/mpd/music"
playlist_directory "/var/mpd/.mpd/playlists"
db_file "/var/mpd/.mpd/database_new"
log_file "/var/mpd/.mpd/log"
pid_file "/var/mpd/.mpd/pid"
state_file "/var/mpd/.mpd/state"
sticker_file "/var/mpd/.mpd/sticker.sql"
user "mpd"


audio_output {
type "shout"
encoding "mp3" # optional
  name "Radio"
host "localhost"
port "8000"
mount "/0"
password "hackme"
# quality "5.0"
bitrate "128"
format "44100:16:1"
protocol "icecast2" # optional
user "source" # optional
description "just unzip run enjoy" # optional
genre "industrial" # optional
public "Yes" # optional
timeout "2" # optional
mixer_type "software" # optional
}

bind_to_address "127.0.0.1"

затем конфигурируем icecast на ваш mountpoint

создаем ему повелителя, если сам не создался (icecast)
затем повелителю добавляем задание
crontab -e

@reboot /usr/local/bin/icecast -c /usr/local/etc/icecast.xml






ну и в /etc/rc.d

#for musicpd
musicpd_enable="YES"


ну  и для удобства:


 кому нибудь добавляем
@reboot /usr/local/bin/mpc play






edit post

Парсер Vkontakte.ru

Написано 12:41, ярлыки:

$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) ' . 
             'Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';

$cookie = '';

$login = 'qazqaz';
$password = 'qazqaz';

$ch = curl_init();

// true т.к. мы будем отправлять post запрос:
curl_setopt($ch, CURLOPT_POST, true);  

// чтобы сайт думал, что мы - браузер:
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 

// ответ сервера будем записывать в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_TIMEOUT, 10);

// по редиректам будем переходить автоматически.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login');

//Формирование запроса таким образом, я счел более наглядным
$post = array( 
             'act' => 'login',
             'q' => '',
             'al_frame' => '1',
             'expire' => '',
             'captcha_sid' => '',
             'captcha_key' => '',
             'from_host' => 'vkontakte.ru',
             'email' => $login,
             'pass' => $password
         );

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));

$answer = curl_exec($ch);

/* В $answer нам приходит javascript, который и устанавливает куки 
     с названием: remixsid Нам нужно cпарсить эти 60 символов, 
     идентификатора сессии. с помощью них vkontakte поймет,
     что мы авторизировались.*/

$sid = substr($answer, strpos($answer, "setCookieEx('sid', '") + 20, 60);
$cookie = 'remixsid=' . $sid;

curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_COOKIE, $cookie); 

// укажем страницу, с которой мы получим данные для проверки
curl_setopt($ch, CURLOPT_URL, 'http://vkontakte.ru/id107073034'); 

$answer = curl_exec($ch);

preg_match('!id="profile_current_info">((.*?))</div>!si',$answer,$data);
//print_r($data);

$pars=iconv('cp1251','utf-8',$data[1]);
//echo $pars;

$p = file_get_contents('/home/megido/l.dat');
if($p != $pars)

$f = @fopen('/home/qazqaz/l.dat','w+');
fwrite($f,$pars);
fclose($f);





//echo $answer; 

curl_close($ch);





edit post
$cnt=100; // общее количество записей во всём выводе
$rpp=10; // кол-во записей на страницу
$rad=1; // сколько ссылок показывать рядом с номером текущей страницы (2 слева + 2 справа + активная страница = всего 5)
$link_sc='page_navigation.php'; // путь
if (isset($_GET['page']))
{
  $page=$_GET['page']-1; // текущая страница
}
else
{
  $page=0;
}
 
$links=$rad*2+1;
$pages=ceil($cnt/$rpp);
if ($page>0) { echo "First | Previous |"; }
$start=$page-$rad;
if ($start>$pages-$links) { $start=$pages-$links; }
if ($start<0) { $start=0; }
$end=$start+$links;
if ($end>$pages) { $end=$pages; }
for ($i=$start; $i<$end; $i++) {
 echo " ";
 
 if ($i==$page) {
  echo "";
 } else {
  echo "";
 }
// echo ($i*$rpp+1)."-";
// if ($i!=($pages-1)) { echo $i*$rpp+$rpp; } else { echo $cnt; }
 echo ($i+1);
 if ($i==$page) {
  echo "";
 } else {
  echo "";
 }
 if ($i!=($end-1)) { echo " |"; }
}
if ($pages>$links&&$page<($pages-$rad-1)) { echo " ... ".($pages).""; }
if ($page<$pages-1) { echo " Next | Last"; }

edit post
для начала создадим скрипт
var d = document;
var offsetfromcursorY=15 // y offset of tooltip
var ie=d.all && !window.opera;
var ns6=d.getElementById && !d.all;
var tipobj,op;
  
function tooltip(el,txt) {
 tipobj=d.getElementById('mess');
 tipobj.innerHTML = txt;
 op = 0.1; 
 tipobj.style.opacity = op; 
 tipobj.style.visibility="visible";
 el.onmousemove=positiontip;
 appear();
}

function hide_info(el) {
 d.getElementById('mess').style.visibility='hidden';
 el.onmousemove='';
}

function ietruebody(){
return (d.compatMode && d.compatMode!="BackCompat")? d.documentElement : d.body
}

function positiontip(e) {
 var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
 var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
 var winwidth=ie? ietruebody().clientWidth : window.innerWidth-20
 var winheight=ie? ietruebody().clientHeight : window.innerHeight-20
 
 var rightedge=ie? winwidth-event.clientX : winwidth-e.clientX;
 var bottomedge=ie? winheight-event.clientY-offsetfromcursorY : winheight-e.clientY-offsetfromcursorY;

 if (rightedge < tipobj.offsetWidth) tipobj.style.left=curX-tipobj.offsetWidth+"px";
 else tipobj.style.left=curX+"px";

 if (bottomedge < tipobj.offsetHeight) tipobj.style.top=curY-tipobj.offsetHeight-offsetfromcursorY+"px"
 else tipobj.style.top=curY+offsetfromcursorY+"px";
}

function appear() { 
 if(op < 1) {
  op += 0.1;
  tipobj.style.opacity = op;
  tipobj.style.filter = 'alpha(opacity='+op*100+')';
  t = setTimeout('appear()', 30);
 }
}
затем проинклюдим его и вставим в тело html div в каком будут отображатся подсказки

<div  Style="visibility: hidden; position: absolute" id="mess">





</div>
осталось толко заключить наш текст или картинку или еще чего

над этим текстом подсказка

Пример:

над этим текстом подсказка


* на блоггере она почему то ниже чем нужно

edit post