niedziela, 18 lutego 2007

Pakiet Dewelopera WWW

Teraz trochę o mojej pracy... magisterskiej rzecz jasna... Może ktoś stwierdzi, że to ciekawe ;)

Ogólnie tematem już jestem ...hm, trochę wyczerpany, bo to już prawie rok (sic!) od momentu jak zacząłem to tworzyć. W każdym razie temat brzmi:

Proces Tworzenia Biznesowych Aplikacji Webowych z Wykorzystaniem Oprogramowania Typu Open Source


Jakkolwiek to brzmi, temat jest zaklepany i taki musi zostać. Mam już ze 4 rozdziały, w tym dwa z nich są w fazie redesignu po uwagach promotora. Temat jaki chciałem tutaj poruszyć, to kwestia ściśle związana z częścią praktyczną tej pracy, a jest nią stworzenie aplikacji, która będzie pewnego rodzaju interfejsem, ułatwiającym tworzenie aplikacji WWW. Od tworzenia koncepcji, przez projektowanie, aż do kodowania i testowania. Wszystko to za pomocą wyselekcjonowanych programów. Oczywiście, oprócz samego kodowania, nie powinno zabraknąć aplikacji do śledzenia zmian, zarządzania wymaganiami, konfiguracją i personelem. Oczywiście wszystko to na aplikacjach otwartych, których jak wiadomo nie brakuje. Gorzej natomiast przedstawia się kwestia integracji. Z pewnością nie będzie możliwe uzyskania narzędzia typu CASE, ale myślę, że pomysł ten ma kilka zalet:
  • Po pierwsze, wszystkie aplikacje są otwarte, co pozwoli na ich modyfikowanie i rozszerzanie na potrzeby projektu.
  • Po drugie, wszystkie błędy, które zostaną odkryte, można poprawić, a poprawkę wysłać do ludzi, którzy się tym programem opiekują.
  • I, co najważniejsze, 95% niezbędnych aplikacji otwartych już istnieje.
Pozostaje tylko siąść i napisać ;) No bez przesady - trzeba to poważnie przemyśleć przed bezmyślnym klepaniem. Myślę, że na potrzeby pracy magisterskiej, stworzę sam szkielet takiej aplikacji, a później się zobaczy. Wstępnie zakładam wykorzystanie Linuksa, jako systemu operacyjnego. Myślę, że jak ktoś chce oszczędzać, to już pewnie na całego. Poza tym w Linuksie bardzo łatwo kontrolować wszelkiego rodzaju serwery, a także można stworzyć żywą płytkę, czyli LiveCD ;) Nie wspomnę już o fakcie, że staję się on w ostatnich latach bardzo kuszącą alternatywą dla "jedynego słusznego systemu operacyjnego".

To tyle, ale pewnie pojawi się więcej na ten temat - lepiej mi potem zebrać myśli jak sobie to napisze czarno na białym (to znaczy biało na czarnym - biorąc pod uwagę obecny temat graficzny strony).

piątek, 16 lutego 2007

Domowy SMS Gateway

W ramach relaksu i trochę z potrzeby, postanowiłem dodać do mojego domowego serwera bramkę SMS. Jak się można domyślić, zaraz pojawią się moje wypociny sprawozdawcze z przebiegu tej zabawy. Dodam, że ogólnie jest to bardzo przydatna sprawa, bo można:
  • Otrzymywać informację o stanie serwera na bieżąco.
  • Uruchamiać dowolne procesy/zdarzenia z komórki.
Oba te zastosowania dają nieograniczony wachlarz możliwości: od powiadomień o nowej poczcie, tudzież awarii modemu do neostrady (hehe), aż do informacji, że właśnie ktoś plądruje mieszkanie, albo że dym w kuchni jest już za gęsty i należałoby wezwać straż pożarną. Oczywiście trzeba to wszystko mieć podpięte do kompa, ale to jest już temat na innego posta...

Fajne, nie? :) ale do rzeczy.

Zakładam, że kompa działającego na linuksie już mamy, więc przejdźmy do sprzętu jaki będzie potrzebny.
  1. Komórka. Najlepiej jakaś stara, zapomniana, leżąca w szufladzie komórka, która posiada już interfejs do komputera. Proponuje sprawdzić na stronie F.A.Q. projektu Gnokii listę modeli, które są przezeń wspierane. Tutaj jednak muszę nadmienić, że w wypadku niektórych modeli mogą pojawić się problemy z kabelkami. O tym później.
  2. Kabelek. W tej kwestii jest również trochę informacji na stronie gnokii, jednak bywa, że kabelek powinien działać, a jednak nie działa... Wobec czego przed kupnem (tutaj chyba najbardziej konkurencyjne jest allegro) dobrze sprawdzić w jednym z licznych punktów handlujących gadżetami komórkowymi, czy podany na wiki gnokii kabel jest OK. W moim przypadku okazało się, że do modelu Nokia 6610 jest jakiś specjalny i postanowiłem zaoszczędzić sobie szukania i kupiłem go od ręki za trzy dychy w jakimś centrum handlowym. Morał z tego taki: masz dobry kabelek == jesteś w domu ;). Ah i jeszcze jedno. Czy można użyć infra red, lub bluetooth? Oczywiście, ale jeżeli mówimy o zastosowaniu na serwerze, to chyba jednak lepiej skorzystać z kabla...
  3. Karta SIM, która oferuje mega tanie sms'y. W moim przypadku wybrałem Orange popa. Jest tam jakaś promocja dla maniaków smsów. Nie jest to najistotniejszy szczegół tej zabawy, ale zawsze można powalczyć o mniejsze koszty sms'a.
  4. Hm... Głowa?
Teraz trzeba to wszystko zintegrować w, miejmy nadzieję, działającą całość...

Logujemy się na root'a:

su -

W Ubuntu trzeba inaczej, bo tam nie znamy hasła administratora:

sudo -s

Następnie Należy podpiąć posiadany kabelek. Dodam, że działam na jądrze systemu 2.6.19. Należy o tym pamiętać, jeśli kabelek nie jest wykryty, to może nie być obsługiwany przez jajko. Może też nie być skompilowany. Jeżeli jednak jest to jakaś dystrybucja w stylu Ubuntu, to nie powinno z tym być problemu. Tam na ogół wszystko jest ładnie skompilowane w modułach. Ja posiadam akurat ten kabel w wersji USB. Najpierw należy wpiąć sam kabelek (bez komórki) i wykonać polecenie

dmesg

Wysypie się trochę logów, ale najważniejsze jest na końcu. Powinniśmy widzieć coś takiego:

usbcore: registered new interface driver usbserial
drivers/usb/serial/usb-serial.c: USB Serial Driver core
drivers/usb/serial/usb-serial.c: USB Serial support registered for ark3116
ark3116 1-3:1.0: ark3116 converter detected
usb 1-3: ark3116 converter now attached to ttyUSB0
usbcore: registered new interface driver ark3116

Co tutaj można odczytać? Widać, że Linux zorientował się, że posiada sterownik do urządzenia usbserial, a konkretnie ark3116. Po czym przypisał do niego plik urządzenia /dev/ttyUSB0. To samo się tyczy urządzeń typu Irda, czyli portów podczerwieni. Powinny one zostać wykryte w momencie podłączenia, a informacja o wykorzystywanym porcie komunikacyjnym pojawi się w logu po wykonaniu tej samej komendy.

Jeżeli posiadamy kabel typu rs232 (comm), to niczego nie zobaczymy po podłączeniu, bo nie ma tam żadnej logiki. Należy posłużyć się istniejącym już urządzeniem ttyS[numer]. A sprawdzić to można na ogół w ten sposób:

dmesg | grep tty

U mnie są dwa porty rs232:

serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A

Może być problem z rozróżnieniem, jeśli są dwa porty COMM. W takim przypadku polecam instrukcje do płyty głównej, lub dokładne oględziny tych portów w poszukiwaniu oznaczeń. Na ogół COMM1 == ttyS0, COMM2 == ttyS1, itp. Ale głowy sobie nie dam uciąć, że nie będzie na odwrót :).

Informacja o porcie posłuży do skonfigurowania programu wysyłającego smsy. A jest nim program gnokii. W szczególności chodzi o smsd, czyli demon sms. Programik ten w niektórych dystrybucjach jest instalowany razem z gnokii, a gdzie indziej trzeba go osobno zainstalować. W gentoo należało dodać kilka USE flags, żeby się zainstalował (polecam wszystkie, bo tak naprawdę chodzi o moduły/programy). W przypadku Ubuntu, wystarczy zainstalować gnokii-smsd oraz wybrany front-end bazy danych (gnokii-smsd-mysql lub/i gnokii-smsd-postgresql). Po zainstalowaniu, warto zmienić konfigurację w pliku /etc/gnokiirc (dla wszystkich użytkowników, chyba tak jest najwygodniej...). Mój plik, po usunięciu komentarzy wygląda tak:

[global]
port = /dev/ttyUSB0
model = 6510
initlength = default
connection = serial
use_locking = yes
serial_baudrate = 19200
# Tutaj trzeba bylo zwiekszyc timeout
# Dla wiekszych wiadomosci program konczyl
# za wczesnie...
smsc_timeout = 30
[gnokiid]
bindir = /usr/sbin/
[connect_script]
TELEPHONE = 12345678
[disconnect_script]
[logging]
debug = off
rlpdebug = off
xdebug = off

Najważniejsze pola to port, gdzie należy podać nazwę urządzenia tty, które będzie się komunikować z komórką (uzyskane wcześniej) oraz model. Model, to raczej klasa komórek, która obejmuje więcej modeli. Szczegółowe informacje można znaleźć na stronie gnokii. Jak już znajdziemy właściwy model, wpisujemy go i zapisujemy plik.

Teraz należy podpiąć telefon i uruchomić funkcje identyfikującą programu gnokii:

gnokii --identify

i za chwilę powinniśmy otrzymać coś takiego na ekranie:

GNOKII Version 0.6.14
IMEI : XXXXXXXXXXXXXXX
Manufacturer : Nokia
Model : 6100
Product name : NPL-2
Revision : V 05.80

Oczywiście zamiast znaków X powinien być normalny numer :). Jeżeli w tym momencie program wisi, to warto poczekać... Może zadziała... Jak po jakimś czasie zdechnie i wypluje błąd, to znaczy, że jest kicha... W tym momencie warto zwiększyć poziom logowania. Zmieniamy na on wszystkie opcje w sekcji 'logging' w pliku konfiguracyjnym i sprawdzamy co się pojawi. Tutaj ciężko mi się wypowiadać, bo jeśli chodzi o mnie, to jak to się mówi: "u mnie działa"... Jeżeli używamy portu COMM, to można spróbować przepiąć się do drugiego, lub spróbować wykorzystać drugi plik urządzenia (ttyS0 -> ttyS1). Niestety na ogól może to oznaczać problem z kablem. W ostateczności można przejść na korzystanie z podczerwieni, ale nie wiem jak będzie wtedy z inicjowaniem połączenia (w nokiach jak mi się zdaje potrzeba ręcznego uaktywnienia odbioru przez podczerwień).

Jeżeli wszystko pójdzie jak należy można spróbować wysłać testowego smsa:

echo "And now for something completely different..." | gnokii --sendsms +48503XXXXXX

powinno się pojawić

GNOKII Version 0.6.14
Send succeeded!

no i oczywiście sms powinien znaleźć się w skrzynce odbiorczej wskazanego telefonu :).

Teraz konfiguracja smsd. Zaletą smsd jest fakt, że smsy wysyłane są po umieszczeniu ich w bazie danych. Smsd sprawdza periodycznie bazę i wysyła wiadomości wrzucone do tablicy 'outbox'. Jednocześnie wszystkie przychodzące wiadomości lądują w tablicy 'inbox'. Wobec tego nie trzeba się martwić, że kilku użytkowników (tudzież skryptów) zacznie sobie przeszkadzać w momencie, gdy każdy będzie chciał wysłać smsa z tej samej komórki.

Najpierw musimy stworzyć bazę danych. Do tego celu najlepiej użyć plik sql załączony do smsd. Ja takiego nie znalazłem w gentoo. Korzystam z mysql, więc po prostu wykorzystałem wyszukiwarkę kodu, żeby znaleźć ten plik (tutaj jest zapytanie, które powinno znaleźć aktualny skrypt sql). Dla wersji 0.6.14 wygląda on tak:

CREATE TABLE inbox (
id int(10) unsigned NOT NULL auto_increment,
number varchar(20) NOT NULL default '',
smsdate datetime NOT NULL default '0000-00-00 00:00:00',
insertdate timestamp(14) NOT NULL,
text varchar(160) default NULL,
phone tinyint(4),
processed tinyint(4) NOT NULL default '0',
PRIMARY KEY (id)
) TYPE=MyISAM;

CREATE TABLE outbox (
id int(10) unsigned NOT NULL auto_increment,
number varchar(20) NOT NULL default '',
processed_date timestamp(14) NOT NULL,
insertdate timestamp(14) NOT NULL,
text varchar(160) default NULL,
phone tinyint(4),
processed tinyint(4) NOT NULL default '0',
error tinyint(4) NOT NULL default '-1',
dreport tinyint(4) NOT NULL default '0',
not_before time NOT NULL default '00:00:00',
not_after time NOT NULL default '23:59:59',
PRIMARY KEY (id)
) TYPE=MyISAM;

Następnie można dodać użytkownika sms, który będzie z tej bazy korzystał:

CREATE USER 'sms'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT , INSERT , UPDATE , DELETE ON `sms` . * TO 'sms'@'localhost';


Baza danych jest już przygotowana. Dokładne zastosowanie pól jest opisane w podręczniku do smsd (man smsd). Korzystając również z mana, należy uruchomić smsd:

smsd --user sms --password password --db sms --host localhost --module mysql --logfile /var/log/smsd --inbox IN 

i już można oglądać przychodzące smsy w bazie danych, ewentualnie wrzucać do inboxa smsy do wysyłki. Jeszcze tylko trzeba to opakwać w jakiś ładny skrypt startowy. Można w łatwy sposób stworzyć bramkę www w oparciu o PHP, gdzie mysql to raczej codzienność :). Również Perl i masa innych języków posiada wsparcie Mysql, więc możliwości są praktycznie nieograniczone.

Miłej zabawy. B.

P.S. Jeszcze drobna uwaga. Istnieje aplikacja gammu, która jest bardziej wypasiona od gnokii. Jednak w moim przypadku po ciężkich próbach nie udało mi się uruchomić na niej mojej komórki. Jednak jęsli macie problemy z gnokii, to warto spróbować -- może na gammu ruszy. Jednak zdecydowanym minusem (IMHO) jest nieco chaotyczna dokumentacja na stronie wiki tej aplikacji.

sobota, 10 lutego 2007

Zaległości

No więc to jest mój blog... Hehe, opór mój nie miał końca, ale stwierdziłem, że może nadszedł moment, w którym wejdę w ten blogerski klimat starej nowomody internetowej, dla której nie miałem za grosz zrozumienia i... zacznę sobie po cichutku blogować.

Mówiąc zaległości (w tytule) mam na myśli fakt, że przecież mogłem już wcześniej otworzyć ten biznes. A konkretnie w momencie, w którym pojawiła się w naszym życiu mała Kasieńka. Ale jak to mówią, lepiej późno niż wcale... Mała przyszła na świat 11 czerwca 2006, a teraz ma już ponad 8 miesięcy. Zdjęć ma już chyba z kilka tysięcy (tych wywołanych trochę mniej, heh). Oczywiście nie ma sobie równych pod względem "urodziwości". Żeby nie być gołosłownym, dołączyłem do wpisu foty. W stopce jest link do całego albumu :D

From The Family


To chyba tyle... na dziś. Wracam do pracy (tak, tak... jeszcze piszę, tę %$#%$%# pracę...). Do zobaczenia, wkrótce.