Темы выпуска: сборка Pastexen из исходников, процедурное представление данных в Haskell, автоматическая загрузка картинок на radikal.ru, установка Adobe Air под Ubuntu x64 и не только. Предыдущие выпуски: девятый , восьмой , седьмой , шестой .
1. Собираем Pastexen под Linux и FreeBSD
Pastexen — это новая утилита для создания скриншотов и публикации их в интернете, что-то вроде Clip2Net. Из отличительных особенностей программы следует отметить кроссплатформенность, полную открытость исходного кода, славянские корни разработчиков, а также возможность публикации помимо скриншотов еще и отрывков исходного кода.
Важно! Кажется, эта инструкция уже устарела.
Сборка и установка в Linux:
Из ветки sid:
Далее:
cd Pastexen
make
sudo checkinstall
Установка и сборка во FreeBSD:
ln -s / usr / local / bin / qmake-qt4 / usr / local / bin / qmake
wget http: // dev.libqxt.org / libqxt / get / v0.6.2.tar.gz
-O libqxt-0.6.2.tar.gz
tar -xvzf libqxt-0.6.2.tar.gz
cd libqxt-libqxt-dadc327c2a6a
Заменяем в configure /bin/bash
на /usr/bin/env bash
, после чего говорим:
gmake
sudo gmake install
Затем собираем Pastexen по аналогии с тем, как это делается в Linux, только вместо make используем gmake.
2. Скрипт-уведомлялка о разрядке батареи
После того, как однажды мой Toshiba Portege Z930-DKS вырубился, даже на намекнув на то, что его батарея разряжается, я набросал вот такой скрипт:
use strict ;
use warnings ;
my $warnings = 0 ;
while ( 1 ) {
my $acpi_info = `acpi -b` ;
if ( $acpi_info =~ /, (d+)%, (S+) remaining/ ) {
my $percent = $1 ;
my $time = $2 ;
if ( $percent < 100 && $warnings <= 0 ) {
show_warning ( $percent , $time ) ;
$warnings = 1 ;
} elsif ( $percent < 50 && $warnings <= 1 ) {
show_warning ( $percent , $time ) ;
$warnings = 2 ;
} elsif ( $percent < 25 && $warnings <= 2 ) {
show_warning ( $percent , $time ) ;
$warnings = 3 ;
} elsif ( $percent < 10 && $warnings <= 3 ) {
show_warning ( $percent , $time ) ;
$warnings = 4 ;
}
} else {
$warnings = 0 ;
}
sleep 60 ;
}
sub show_warning {
my ( $percent , $time ) = @_ ;
my $msg = «Battery discharging, $percent % , $time remaining» ;
$msg =~ s/’/’/g ;
system ( «zenity —notification —text=’$msg’ —window-icon=warning —timeout=1 &» ) ;
}
Его я прописал на автозапуск в конфигурационном файле оконного менеджера i3 . Теперь в случае разрядки батареи соответствующее уведомление появится прямо по центру экрана, вместо того, чтобы скромно отображаться в строке состояния, куда я все равно почти никогда не смотрю.
3. Установка Adobe Air под Ubuntu 12.10 x64
Не спрашивайте, зачем мне это понадобилось.
sudo dpkg -i getlibs-all.deb
sudo aptitude install libhal-storage1 libgnome-keyring0 lib32nss-mdns
sudo getlibs -l libhal-storage.so.1
sudo getlibs -l libgnome-keyring.so.0.2.0
На вопрос об установке 100500 библиотек для i386 отвечаем утвердительно.
Затем говорим:
/ usr / lib / libgnome-keyring.so.0
wget airdownload.adobe.com / air / lin / download / 2.6 / AdobeAIRInstaller.bin
chmod u+x AdobeAIRInstaller.bin
sudo . / AdobeAIRInstaller.bin
Сами приложения устанавливаются через /usr/bin/Adobe AIR Application Installer
. А вот так: /opt/Prog/bin/Prog
запускаются установленные приложения. На самом деле, как мне кажется, куда более простой и правильный способ использования Adobe Air в Ubuntu — это поставить винду под VirtualBox.
4. Простой способ сделать port forwarding
На CPAN для этого есть специальный скрипт:
tcpforward -l localhost: 1080 -c remontka.com: 80
Можно использовать его, например, при тестировании программы для симуляции разрыва соединения с сервером. Также скрипт имеет флаг -v, включающий логирование трафика, что позволяет использовать его в качестве снифера.
5. Скрипт для прогрева кэша WordPress
В плагине WP-SuperCache есть кнопка для прогрева кэша, но она аффектит только посты. В отличие от следующего скрипта:
use strict ;
use warnings ;
use LWP :: UserAgent ;
my $home_url = shift ;
die «Usage: $0 http://example.ru n »
unless $home_url && $home_url =~ m { ^ http ://.* [ ^/ ] $ } i ;
my $ua = LWP :: UserAgent -> new (
max_redirect => 0 ,
agent => ‘update-cache.pl’
) ;
my @queue = ( ‘/’ ) ;
my %from ;
my %errors ;
my $parsed_urls = 0 ;
my $total_urls = 1 ;
while ( @queue ) {
my $url = shift @queue ;
$parsed_urls ++;
print «[$parsed_urls/$total_urls] $url… » ;
my $res = $ua -> get ( $home_url . $url ) ;
if ( $res -> is_success ) {
my $content = $res -> decoded_content ;
my $urls_count = ‘0’ ;
while ( $content =~ m #href=[‘»]$home_url(/[w/-]+)[‘»]#gio) {
if ( defined $from { $1 } ) {
push @ { $from { $1 } } $url if @ { $from { $1 } } < 16 ;
next ;
} else {
push @queue $1 ;
$from { $1 } = [ $url ] ;
}
$urls_count ++;
$total_urls ++;
}
print «»OK$urls_count new url(s) n «» ;
} else {
print «»ERROR: «» . $res -> status_line . «» n «» ;
$errors { $url } = $res -> status_line ;
}
}
if ( keys %errors ) {
print «»— ERRORS — n «» ;
while ( my ( $url