Смс-информер о поломках метро

С разной переодичностью наш общественный транспорт, а именно метро ломается по разным причинам — люди падают на рельсы, горит проводка и много чего еще плохого. Бывает, что о поломке узнаем или непосредственно дойдя до толпы народу, из-за чего получается лишняя трата времени и возможность потолкаться или от СМИ. Чтобы избежать попадания в такие ситуации dcoder_mm и я сделали смс информер о поломках метро. Мы оба живем в Москве, потому детектируем поломки только столичного метро.

Детектируем поломки при помощи твиттера. Всетаки сначала такая информация попадает именно в него, а потом только в СМИ и то не всегда. Анализируем поток твитов с тегом #метро, среди которых выбираем твиты, которые попадают под фильтр, например: ремонт, чп, неполадки. Помимо таких филтьтров так же выделяем твиты, в которых указана станция метро или ветка.

Подписаться на рассылку можно тут.
Сервис бесплатный, но если кто-то хочет поддержать проект может нажать на кнопку в колонке сбоку, всетаки смски стоят денег.

Цветной консольный

У меня SSD на 250 гб и постоянно проверять сколько же у меня свободного места мне лень. А еще мне не нравится простой смерный dmesg, ну и так, по мелочам.

Каждый раз открывая консоль, я хочу видеть, что интересного у меня в системе. А именно: загруженность cpu, использование памяти, свободное место на диске, ошибки из dmesg.

Начнем с правки dmesg. Хочу время в цивильном формате и раскраску. На просторах интернетов нашла скриптик на перле и чуть поправила:


#!/usr/bin/perl -w
use Term::ANSIColor;
use strict;
my @dmesg_new = ();
my $dmesg = "/bin/dmesg";
my @dmesg_old = `$dmesg`;
my $now = time();
my $uptime = `cat /proc/uptime | cut -d"." -f1`;
my $t_now = $now - $uptime;
sub format_time {
my @time = localtime $_[0];
$time[4]+=1;
$time[5]+=1900;
return sprintf colored( sprintf('%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5]), 'white' );
#return sprintf '%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5]; no color
}
foreach my $line ( @dmesg_old )
{
chomp( $line );
if( $line =~ m/\[\s*(\d+)\.(\d+)\](.*)/i )
{
# now - uptime + sekunden
my $t_time = format_time( $t_now + $1 );
push( @dmesg_new , "[$t_time] $3" );
}
}
print join( "\n", @dmesg_new );
print "\n";

Я его положила в /etc/scripts/

Теперь редактировать .bashrc. Вписала строку
alias dmesg="/etc/scripts/dmesg_time.pl"

А теперь информер


cat /etc/profile.d/login.sh

#!/bin/bash
uptime | awk -F, '{print "\033[1;37muptime\033[0m" $1}'
ps aux | awk '{s += $3} END {print "\033[1;37mcpu\033[0m " s "%"}'
ps aux | awk '{s += $4} END {print "\033[1;37mmem \033[0m" s "%"}'
df | grep -E "/$" | awk '{print "\033[1;37muse / \033[0m" $5}'
df | grep -E "/home$" | awk '{print "\033[1;37muse /home \033[0m" $5}'
df | grep -E "/home$" | awk '{print "\033[1;31mfree /home \033[0m" $4}'
df | grep -E "/$" | awk '{print "\033[1;31mfree / \033[0m" $4}'
echo -e "\033[1;37mprocess: \033[0m " `ps aux | wc -l`
echo -e "dmesg error \n `/etc/scripts/dmesg_time.pl | grep -i error | tail -10` "

зы. Когда-нибудь я заведу гитхаб.

Видеонаблюдение своими руками часть 4

Обычно под этим заголовком рассказ про новую железку, но в этот раз я расскажу про программную часть своего видеонаблюдения.

Имеем 2 вебки, подключенные в нетбуку. Ось fedora 16 с xfce. ОЗУ мало — всего 1 гб, но этого оказалось более чем достаточно. Лаптоп вещает видео с камер в локалку, а записи с них льются в облако. В итоге просмотр записей возможен из любого места, где есть интернет. Почти в прямом эфире — задержка в пару минут тут не имеет значения.

Вещает в сеть при помощи motion. (Камеры имеют микрофон, но что-то мне лениво настроить запись звука)
У меня под каждую камеру по папке. Конфиги почти одинаковые, путь к папкам и девайсы, разумеется разные. Конфиг вбрасывать не буду, там ничего необычного. А лишить удовольствия прочтения мана своих читателей я не в силах. По webdav все кино сливается в облако к Яндексу.

Установка motion просто и очевидно.

Рерайтом и пересказом заниматься не буду, читайте с хабра о webdav. Encfs для сий поделия совсем не обязательно, но тут появляется возможность спокойно хранить бекапы или что-то там еще и не параноить.

При необходимости повторить на всех девайсах где это требуется. На телефон ставим Яндекс диск. Так, с трансляцией и доступом к файлам разобрались. Теперь о структуризации.

#!/bin/bash
date=`date +"%d.%m.%y"`
mkdir -p /home/irenica/YaDisk/motion/backup; tar -cjvf /home/irenica/YaDisk/motion/backup/$date.gen.tar.bz2 /home/irenica/YaDisk/motion/gen/*
mkdir -p /home/irenica/YaDisk/motion/backup; tar -cjvf /home/irenica/YaDisk/motion/backup/$date.lift.tar.bz2 /home/irenica/YaDisk/motion/lift/*
rm -f /home/irenica/YaDisk/motion/gen/* /home/irenica/YaDisk/motion/lift/*

Запускаю от рута, ибо motion работает от рута.

Ну и в крон

45 23 * * * /home/irenica/move.sh

утилитки и не только

objdump — дизассемблер
dig — dns
irb — ruby
fping — пингануть все хосты в сети
svn add from; ./ac commit -m «comment» to
file file_name узнать тип файла
strip срезать дебаг инфу из бинарника

ruby
File.open(‘file.txt’, ‘a’){ |file| file.puts string } запись в файл

make flash

будет пополняться

О escape последовательностях и regexp

Была у меня задача распарсить вывод с утилиты схожей с top и по cron’y отправлять на почту.  Через cat значит все ровно и красиво, а на почте


9 36 user proc
8 32 user 
proc
3 12 user 
proc
2 8 user 
proc
2 8 user 
proc
1.66667 6.66667 user 
proc[m
1 4 user 
proc
1 4 user [;
proc
1 4 user [;
proc
1 4 user roc


А вот

cat log | mail -s re user
отправляет бинарник

Проблема оказалась в цветном выводе этой утилиты и отсутствия опции —no-color, а именно escape последовательностях, которые записались в файл.

Вылечилось при помощи sed -i 's;\[\;m;;g;s;\[m;;g;'

В этих escape последовательностях должны быть еще и цифры, но их убил другой regexp.

How to DDOS-attack the IIS 7.5-8, Master Class by me

Как-то в вузе устраивали мероприятие по ИБ. У меня был доклад по DOS атаке. Девушка заливавшая видео слоупок, нуб и вообще не в теме происходящего.
Посему корректировки к описанию. Это не DDOS атака. Я пишу на С/C++, Perl (не для веба), Bash про php и ruby, веб сайты полный бред.
Да, я действительно student partner Microsoft.
смотреть с 4 минуты

скрипт из видео
https://www.dropbox.com/s/nyaorhyzgj8f65j/sieg.sh

Парсер Alexa Rank

Все владельцы ресурсов сети Интернет хотят, чтобы их сайты были в топе выдачи поисковых систем. Для этого выполняется поисковая оптимизация, раскручивается ресурс под целевые аудитории, выполняется презентацию информации, товаров и услуг. Реклама носит характер убеждения и направляется в сторону обширной аудитории возможных клиентов или посетителей ресурса. Чтобы определить направления, которые наиболее востребованы посетителями конкурентных ресурсов, стоит оценить рейтинг ресурса в поисковой системе относительно аналогичных сайтов. Для удобства оценки рейтинга и, соответственно, анализа выбранной конкурентом рекламной кампании я предлагаю использовать скрипт, который автоматизирует проверку рейтинга Alexa Rank.


#!/bin/bash
i=1
s=`cat url.txt |wc -l`
while [ $i -lt $s ]
do
name=`sed ''$i'!d' url.txt`
echo $name
curl http://www.alexa.com/siteinfo/$name | grep '&rank=' >> log.txt
sed 's/.*=\(.*\)$/\1/g' < log.txt > newlog.txt
echo `sed ''$i'!d' url.txt` '=' `sed ''$i'!d' newlog.txt` >> rank.txt
let "i = $i + 1"
sleep 15
done
rm log.txt
rm newlog.txt