среда, 17 марта 2010 г.

Опять проблемы с аккумулятором

Сегодня опять остался без машины - аккум сел. Проблема получается где-то в проводке - но где никак не могу понять. Когда я каждую ночь снимал клемму с аккумулятора - все было хорошо, даже почти севший вначале аккум за 2 недели успешно зарядился от генератора. Когда вновь перестал снимать клемму - за 3 недели аккум сел :(

Не знаю куда копать. Мерял ток утечки - через минуту после постановки на сигнализацию - 0.01А - то есть все вроде бы норм.
Думаю нужен как-нибудь девайс который будет постоянно мониторить ток утечки, как такое реализовать?


пятница, 11 сентября 2009 г.

Мои скрипты blogger2lj и twitter2vkontakte

Решил выложить свои скрипты для кросспостинга, а то многие просят.

Сперва Кросспостринг из твиттера на вконтакте. В настройках укажите логин/пароль от сервисов. Также понадодобятся модули Net::Twitter, WWW::Curl::Easy, WWW::Curl::Share, Text::Iconv,
У меня скрипт запускается по крону каждые 10 минут

twi2vk.pl

#!/usr/bin/perl
use strict;
use warnings;
use Net::Twitter;
use WWW::Curl::Easy;
use WWW::Curl::Share;
use URI::Escape;
use Text::Iconv;
use CGI;
use CGI qw /unescapeHTML/;

my $c = Text::Iconv->new('utf-8','utf-8');
my $q = new CGI;

my $twlogin = 'neptunix';
my $twpass = '';
my $vklogin = '';
my $vkpass = '';
my $debug = 0;
my $add = '';
#my $add = ' « http://twitter.com/neptunix »'; # Что добавить в конец сообщения


my $nt = Net::Twitter->new(
traints => [qw/API::REST/],
username => $twlogin,
password => $twpass
);

my $twitterStatus;
eval {
my $statuses = $nt->user_timeline({count => 20});
for my $status (@$statuses){
if ($status->{text} !~ m/^\@/){ # Убираем реплаи
$twitterStatus = "$status->{text}";
last;
}
}
};

if (my $err = $@) {
die $@ unless $err && $err->isa('Net::Twitter::Error');

warn "HTTP Response Code: ", $err->code, "\n",
"HTTP Message: ", $err->message, "\n",
"Twitter error: ", $err->error, "\n";
}

# Vkontakte

my $curlsh = new WWW::Curl::Share;
$curlsh->setopt(CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
$curlsh->setopt(CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

# Setting the options
my $curl = new WWW::Curl::Easy;
$curl->setopt(CURLOPT_HEADER,1);
$curl->setopt(CURLOPT_URL, 'http://pda.vkontakte.ru/login?pda=index&acknowledge=0');
my $response_body = '';
open (my $fileb, ">", \$response_body);
$curl->setopt(CURLOPT_WRITEDATA,$fileb);
$curl->setopt(CURLOPT_SHARE, $curlsh);
$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_POSTFIELDS, "email=$vklogin&pass=$vkpass");

# Starts the actual request
my $retcode = $curl->perform;
# Looking at the results...
if ($retcode == 0) {
print("Transfer went ok\n") if($debug==1);
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
# judge result and next action based on $response_code
print("Received response: $response_body\n") if($debug==1);
} else {
print("An error happened: ".$curl->strerror($retcode)." ($retcode)\n");
exit 0;
}

# Request status edit form
$curl->setopt(CURLOPT_URL, 'http://pda.vkontakte.ru/status');
$curl->setopt(CURLOPT_POST, 0);
# Starts the actual request
$retcode = $curl->perform;
# Looking at the results...
if ($retcode == 0) {
print("Transfer went ok\n") if($debug==1);
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
# judge result and next action based on $response_code
print("Received response: $response_body\n") if($debug==1);
} else {
print("An error happened: ".$curl->strerror($retcode)." ($retcode)\n");
exit 0;
}

my $activityhash = '';
if($response_body =~ /name="activityhash" value="(\w+)"/){
$activityhash = $1;
} else {
print "An error happened: no activityhash found\n";
exit 0;
}

my $status = '';
if($response_body =~ /class="pad">\s+(.*)<br\/>/){
$status = $1;
} else {
print "An error happened: no status found\n";
exit 0;
}

if($status !~ /\.\.$/) {$status =~ s/(.*)\.$/$1/;}
$status =~ s/\S+\s+\S+\s+\S+\s+(.*)/$1/;
$status = unescapeHTML($status);

$twitterStatus = $c->convert($twitterStatus);

$twitterStatus .= $add;

if ($status eq $twitterStatus) {
if($debug) {print "Same status: $status\n";}
}

else {
if($debug) {
print "$status\n";
print "$twitterStatus\n";
}

## Update status
$curl->setopt(CURLOPT_URL, 'http://pda.vkontakte.ru/setstatus?pda=1');
$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_POSTFIELDS, 'activityhash=' . $activityhash . '&setactivity=' . uri_escape($twitterStatus));

# Starts the actual request
$retcode = $curl->perform;
if ($retcode == 0) {
print("Transfer went ok\n") if($debug==1);
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
# judge result and next action based on $response_code
print("Received response: $response_body\n") if($debug==1);
} else {
print("An error happened: ".$curl->strerror($retcode)." ($retcode)\n");
}

}



Постинг из Blogger в LiveJournal
Для работы нужно создать файл lastid.txt в той же директории (или прописать путь к нему), что и скрипт с правами на запись: touch lastid.txt;
chown user:user lastid.txt (user - пользователь от которого запускается скрипт)
У меня постинг работает по крону раз в сутки ночью
Здесь используются модули LJ::Simple, XML::FeedPP, Time::ParseDate

blogger2lj.pl

#!/usr/bin/perl
use strict; # Silly not to be
use POSIX; # For strftime()
use LJ::Simple;
use XML::FeedPP; # Parse Atom feed
use Time::ParseDate; # Parse date from feed

## Lj posting code taken from from ljpost

my $source = 'http://blogger.feed.source';
my $idfile = "lastid.txt";
my $user='lj-login';
my $pass='lj-pass';
my $post;
my $autoformat=0;
my $allowcomments=1;
my $add_to_post; # Эта переменная добавляется к посту. Определена ниже.

##
## Получаем фид и берем ID из файла
##
my $feed = XML::FeedPP->new( $source );

my $lastid; # Последний id

if(open(FILE, "$idfile")){
$lastid = readline(FILE);
chomp($lastid);
close(FILE);
}

# Просмотр списка на наличие ID и ищем его в файле


my @add; # Массив для добавления постов

foreach my $item ( $feed->get_item() ) {
my $id = $item->guid(); $id =~ s/.*post-(\d+)/$1/;
if ($id != $lastid) {
# Если новый id не соответствует старому - добавить в очередь на постинг (в массив $add)
push @add, $id;
}
else { last; }
}


##
## Начало цикла постинга в ЖЖ
##

my $last_good_id;
$|=1;
($LJ::Simple::VERSION<0.07) && ($LJ::Simple::timeout = 300);
my $lj = new LJ::Simple({ user=>$user,pass=>$pass });
(defined $lj) || die "$0: Failed to log into LJ - $LJ::Simple::error\n";


for(my $i=$#add; $i>=0; $i--){
foreach my $item ( $feed->get_item() ) {
my $id = $item->guid(); $id =~ s/.*post-(\d+)/$1/;
if($id == $add[$i]) { # Мы нашли наш пост. Будем его обрабатывать

my %Event=();
$lj->NewEntry(\%Event) || die "$0: Failed to prepare event - $LJ::Simple::error\n";

my $time = parsedate( $item->pubDate );
my(undef,$mins,$hrs,$dy,$mn,$yr,undef,undef,$l8)=localtime($time);

my $goodtime = mktime(0,$mins,$hrs,$dy,$mn,$yr,0,0,$l8);
$lj->SetDate(\%Event,$goodtime);

my $subject = $item->title();
($subject ne "") && $lj->SetSubject(\%Event,$subject);

my $tags;
if(ref($item->category())){
$tags = join (",", @{$item->category()});
}
else {
$tags = $item->category();
}
($tags ne "") && $lj->Setprop_taglist(\%Event,split(/,\s*/,$tags));

if ($autoformat) {
print "Autoformat: yes\n";
$lj->Setprop_preformatted(\%Event,1) ||
die "$0: Failed to set entry as preformatted - $LJ::Simple::error\n";
}

my $link = $item->link();
$add_to_post = <<END;
<br/>
<div style="position: relative; background-color: #b8daee; border: #98c6e2 1px dotted; padding: 5px; margin: 2px; text-align: center; clear:both">Запись опубликована в блоге blog.brigadirov.com. Лучше оставляйте свои комментарии <a href="$link">там</a>. Но можно и тут.</div>
END

my $post = $item->description();
$post .= $add_to_post;
$lj->SetEntry(\%Event,$post) ||
die "$0: Failed to set entry - $LJ::Simple::error\n";

if($allowcomments==0){
$lj->Setprop_nocomments(\%Event,1) ||
die "$0: Failed to set property - $LJ::Simple::error\n";
}
my ($item_id,$anum,$html_id)=$lj->PostEntry(\%Event);

if (defined $item_id) {$last_good_id = $id;}

(defined $item_id) ||
die "$0: Failed to post entry - $LJ::Simple::error\n";

}
}
}

if(defined $last_good_id) {
if(open(FILE, ">$idfile")){
print FILE $last_good_id;
close(FILE);
}
}

четверг, 10 сентября 2009 г.

Apple Event 09.09.09


Вчера случился Apple Event, где были представлены некоторые новинки продукции и программного обеспечения. Появление Стива на сцене встречали бурными аплодисментами! Он вернулся после операции по пересадки печени.


Расскажу вкратце об основных новинках ...



Вышла прошивка iPhone 3.1 и уже доступна к загрузке. Конечно рекомендуется к обновлению только пользователям официально-разлоченных телефонов!



Обновилась линейка плееров iPod - от самого младшего iPod Shuffle и до iPod Classic и iPod Touch. Новые шафлы доступны теперь в 5 цветах ($59 и $79) и специальный вариант - в корпусе из нержавеющей стали ($99).
Classic увеличил вместительность жесткого диска до 160Гб, Touch теперь появился с топовой памятью в 64Гб! По сути это тот же iPhone 3GS только без GSM модуля.





iPod shuffle получил интересное обновление в виде появления видео-камеры способной снимать видео с разрешением 640x480 при 30 кадрах в секунду в формате H.264 с AAC звуком. Синхронизация с iTunes позволяет сразу закачать видео на компьютер и залить на YouTube. Модели выпускаются с памятью в 8 и 16 Гб. И это первый iPod, который обзавелся встроенным радио!




Новый iTunes 9 / iTunes LP. Теперь исполнители могут сами добавлять информацию о себе в виде дискографий, видео, фотографий, текстов песен в своем дизайне.

Сортировка приложения iPhone/iPod Touch теперь возможна прямо из iTunes. Здесь даже можно сортировать экраны приложений!

понедельник, 7 сентября 2009 г.

Помогите с голосованием пожалуйста

Проголосуйте пожалуйста за альфабанковскую карту с фотографией моей девушки:
в конкурсе на сайте альфабанка

Для этого надо поставить нашу карточку и 2 других на пьедестал.
К сожалению каждый раз положения карточек - рандомное, потому не могу сказать на 1 или 2 странице она будет.
Спасибо большое :)

воскресенье, 30 августа 2009 г.

Мой переход с Лео на Снежного Барса

Вот мы наконец и дождались - вышел последний билд Снежного Барса (Snow Leopard) под номером 432 и 28 Августа поступил в продажу. Опишу свои впечатления за 3 недели использования.

Первое что бросается в глаза - скорость работы. На моем макбуке все просто летает. Приложения грузятся заметно быстрее, Safari - почти мгновенно. Только ради этого стоит обновиться.

Quick Time X
После установки в глаза бросается новый Quick Time, который сразу перепрыгнул с 7 версии на 10-ю. Я ждал от него поддержу огромного числа форматов "из-коробки", однако ничего принципиально нового не произошло.
Аппаратного декодирования видео на своем макбуке я не заметил (тут видимо дело в видео от Intel GMA-950, однако на более новых макбуках должно работать). В результате простенький AVI-DVDRip съедает 25% процессорного времени. Для поддержки MKV и WMV по-прежнему нужны Perian и Flip4Mac. 720p WMV откровенно тормозит :( В общем все как и было.


64-битное ядро и приложения
Помимо отказа от архитектуры PPC, новая версия OS X поставляется с 64-битным ядром и приложениями. По умолчанию 64-битное ядро грузится только на серверах OS X. Для клиентов нужно при загрузке удерживать клавиши "6" и "4", однако это сработает только на следующих моделях:

Остальные довольствуются 32-битным ядром и 64-битными приложениями, правда как работает такая схема - непонятно, но действительно работает:

Exposé
Обновленный Exposé стал симпатичнее и информативнее - теперь он также отображает свернутые окна после горизонтального разделителя, в общем удобно!


Приложения
Все приложения, которые были на OS X 10.5 сохранились после установки 10.6 и отлично работают. Я правда ставил систему на новый HDD и воспользовался ассистентом миграции. Скопировалось все что было, даже файлы разбросанные по самым глубоким путям файловой системы. Правда нельзя просмотреть список копируемых файлов и удалить ненужные.

Недостатки
Стал хуже работать Wi-Fi. Иногда просто отваливается связь до роутера. Помогает отключение и включение AirPort.

В целом Snow Leopard смотрится как хорошее обновление Leopard :)

среда, 26 августа 2009 г.

Каникулы строгого режима

Моя рецензия на «Афише»

Каникулы строгого режима

Очень понравилось - смотрится на одном дыхании, как веселая сказка. Фильм очень добрый, смешной и трогательный. Безруков с Дюжевым молодцы!

пятница, 7 августа 2009 г.

Mixero - твиттер клиент

У меня сегодня какая-то ерунда с Твиттером. Началось все с того что я попробовать попользоваться Mixero (Adobe Air клиент) под Убунтой.


В приложении не работал постинг твитов, после нескольких неудачных попыток решил попробовать воспользоваться web интерфейсом - там тоже самое. Скорее всего это совпадение, но странно. Gwibber при этом работает нормально.
Сами по себе AIR-приложения в линуксе выглядят как-то убого. Нет теней от Compiza, шрифты какие-то слишком виндовые с неправильным сглаживанием. Хотя само приложение достаточно симпатичное.



Но разочаровал тот факт, что оно часто валится при выполнении тех или иных операций, а также не умеет открывать ссылки в браузере по умолчанию, а всегда открывает в firefox-е. В общем под линуксом - не юзабельно. В очередной раз после twihrl-а убедился что AIR приложения - полная фигня. В данном случае в линуксе.

Если кто-то хочет попробовать - напишите ретвит к себе:
"RT @Shatohin Все, кто хотят промокод для нового тви-клиента Mixero, должны быть моим фолловером и RT это сообщение."

пятница, 3 июля 2009 г.

loudtwitter.com


Loudtwitter умер, потому пока больше обновлений твиттера в ЖЖ не ждите. Но думаю вскоре все исправиться, так что рано не радуйтесь :)

среда, 1 июля 2009 г.

Удаленная загрузка торрента


Тут в голову пришло как закачивать торренты с работы на домашний ноут.
Создаем директорию в Dropbox для torrent файлов. И кидаем туда файлы с рабочего компьютера.

Дома настраиваем торрент клиент на мониторинг той-же директории в Dropbox (Transmission и uTorrent точно умеют) и ставим автоматическое удаление .torrent файлов. Все!

Если torrent файл исчез из Dropbox - значит закачка пошла. Если нет - проблемы в интерент канале.
И никаких веб интерфейсов не нужно! Все легко и просто!

тви: #

А ну-ка все в Twitter


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

Сейчас же для меня ситуация кардинально поменялась, через твиттер я общаюсь гораздо больше чем через IM, не говоря уже про запись в блог (который я почти заброчил пару лет назад).

А все почему? Лень писать в блог. Проще кинуть пару слов в твиттер, передавая основной смысл. В общем всех призываю им пользоваться!