Expect: Wprowadzenie

Poniższy kod pozwala na połączenie ssh, automatyczne podanie użytkownika i hasła, wykonanie prostej komendy, przejście do katalogu /tmp i oddaje władzę w ręce w użytkownika skryptu. Taka mała wprawka do programowania w tcl/expect…

#!/usr/bin/expect

## usage if no options
if {[llength $argv] != 3} {
        puts "usage: ssh_login   "
        exit 1
}

# setup variables
set timeout 20
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]

# call ssh command
spawn ssh "$user\@$ip"

# give password
expect "password:"
send "$password\r";

# give commands when you see "]#" mean all welcome messages are showed
expect "]#"
send "touch ~/I_was_HERE2.txt\r"
send "cd /tmp\r"

# give control to user
interact

Sed: usuwanie „inline” linii z pliku

Problem:
W pewnym pliku logów miałem stare wpisy i chciałem szybko usunąć. Wzorzeć był znany ale zabawa z tymczasowymi plikami i grepem raczej nie wchodziła w grę (nie chciałem zgubić logów właśnie zapisywanych).
Wpisy do usunięcia miały postać (chodziło o datę):

2013-08-08 11:39:17 temp:21.25

Rozwiązanie:
Sed z opcją -i pozwala zmieniać pliki w locie (inline):

sed -i  "/2013-08-08/d" temperature_all.txt

Sed: zmiana w plikach z wykorzystaniem zapamiętywania wzorców (inline):

Problem:
Piszę sobie hobbystycznie małą aplikację to zarządzania domowymi urządzeniami. Jednym z nich jest Arduino z podczepionymi czujnikami temperatury i natężenia światła. Dane z czujników są zapisywane na karcie SD. Na początku format daty ustaliłem sobie dość dowolnie i wyglądał on tak:

10/07/13-20:03:23 photo:49

Jednak w trakcie pisania aplikacji doszedłem do wniosku iż potrzebuję nastepujący format daty:

2013-10-07 19:53:58 photo:399

Rozwiązanie:
Rozwiązaniem okazała się jednolinijkowa komenda sed-a:


sed -i -r 's/([0-9]+)\/([0-9]+)\/([0-9]+)\-/20\3-\1-\2 /' photo_all_*.txt

Opcja -i powoduje nadpisanie pliku, -r włącza wyrażenia regularne.

PHP: curl oraz logowanie przez login i hasło

W moim projekcie musiałem uzyć curl oraz logowanie przez login i hasło (w przeciwnym wypadku wystarczyło by użycie fopen). Wobec tego użyłem kodu podobnego do tego poniżej:

  protected function UseCurl($url) {

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_USERPWD, "$this->username:$this->password");
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        $output = curl_exec($ch);
        $info = curl_getinfo($ch);
        curl_close($ch);

        return $output;

  }

Proszę zwrócić uwagę na część z CURLOPT_USERPWD…

PHP i autoload klass

W nowszych wersjach PHP występuje nowa funkcja odpowiedzialna za ładowanie klass spl_autoload_register(’function_name’) w przeciwienstwie do poczciwego __autoload(). Wobec tego aby móc znowu automatycznie ładować klasy należy stworzyć kod podobny do poniższego:

function my_autoload($class_name) {

        include "lib/class/$class_name".'.class.php';
}

spl_autoload_register('my_autoload');

SVN i duże repozytorium oraz sciąganie tylko kawałka drzewa

Jeżeli chcesz pracować tylko na jakimś fragmencie drzewa zainteresuj się poniższą komendą:

svn checkout file:///var/svn/repos mom-empty --depth empty

Zwróć uwagę na –depth empty. Pozwala ona sciągnąć dane tylko konkretnego katalogu bez rekursji. Mnie to umożliwiło dodanie do drzewa projektów w svn tylko jednego nowego katalogu bez ściągania całej zawartości drzewa przy checkout…

Słuchanie e-książek – Android i Ivona

Postanowiłem dzisiaj zmusić mój tablet do czytania książek. Okazało się to wyjątkowo proste:

  1. Instalujemy syntezator mowy Ivona z sklepu google play
  2. Instalujemy głos do Ivony
  3. Zmieniamy w ustawieniach domyślny syntezator mowy
  4. Instalujemy Moon+ Reader Pro – program do czytania ebooków (płatny)

I gotowe, można słuchać książek korzystając programu Moon+ Reader Pro…

Linki:

  1. http://www.ivona.com/pl/pomoc/

Lighttpd – index plików w katalogu

Zaraz po zainstalowaniu Lighttpd zaczeło mnie irytować ze nie widzę plików w katalogu. Nie zawsze mam plik indeksu a w wielu przypadkach mam katalogi i chce móc spokojnie między nimi nawigować.
Rozwiązanie tego problemu jest proste, włączamy direktywę server.dir-listing:

## virtual directory listings
server.dir-listing = "enable"

OpenWRT i php date problem

Jeżeli masz problem jak poniżej:

Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /www1/php_xml/lib/Smarty-3.1.14/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 183

Fatal error: strftime(): Timezone database is corrupt - this should *never* happen! in /www1/php_xml/lib/Smarty-3.1.14/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 183

To rozwiązanie jest proste, należy doinstalować pakiety z lokalizacją daty:

#opkg install zoneinfo-core zoneinfo-europe

Wiadomości o Linuksie, AIX-ie, oprogramowaniu open-source itp…