Weby 1.0
czwartek, 16 września 2010
Właśnie zauważyłem że Weby ma już miesiąc.
To nie znaczy że przez cały ten czas nad nim siedziałem, tak na prawdę dziś, po raz pierwszy od dwóch tygodni, oglądam jego kod
To znakomita okazja do zrobienia małego podsumowania...
... a także wydania wersji 1.0.
W skrócie
Weby to oparty o HTML interfejs graficzny dla shella.
Pisałem o nim kilka razy, w miarę jak pomysł nabierał kształtów.
Zmiany
Początkowo Weby, miał zastępować polecenie dialog, a jedyną różnicą miało być wykorzystanie formularzy.
Tyle że dialog, ma poważne mankamenty niejako z definicji. Każde wywołanie to otwarcie nowego okna. Przepływ sterowania nie przypomina interfejsu CGI, co w moich oczach jest największą wadą, gdyż utrudnia późniejszy awans
na prawdziwą aplikację sieciową.
Dla tego, skłoniłem się ku nieco innemu rozwiązaniu, w rezultacie...
- Weby powoli staje się terminalem...
- ... lub jak kto woli, przeglądarką, wywołującą (lokalne) skrypty CGI z pominięciem serwera HTTP
Uruchomienie
Program uruchamiamy wpisując polecenie np weby formularz.html. Dodatkowo istnieje możliwość wczytania formularza ze stdin.
Do opisu interfejsu graficznego służy HTML. URL z prefiksem exec:, lub sh:, oznacza wywołanie zewnętrznego polecenia. Dla bezpieczeństwa, mechanizm jest ograniczony wyłącznie do pola action w formularzach.
- exec: oznacza wywołanie zewnętrznego polecenia, skryptu CGI
- sh: pozwala natomiast na wywołanie dowolnego polecenia w shellu, tak samo jak robi się to z linii poleceń. Przed wywołaniem następuje podstawienie zmiennych - w tym pól formularzy. (np sh:cat $weby_filename)
Wyniki zostaną wyświetlone w bieżącym oknie, zastępując formularz. Tu mała uwaga: Weby czeka na zakończenie programu, co wyklucza pewne zastosowania.
Styl polecenia dialog, jest nadal dostępny z opcją -q (quick, quit). W takim przypadku, po zatwierdzeniu formularza, Weby zakończy pracę wyświetlając wyniki na stdout.
Interfejs
Jak wspomniałem wcześniej, Weby używa interfejsu wzorowanego na CGI. Nie jest jednak i nie będzie nigdy w pełni kompatybilny z RFC3875.
- Ze wszystkich zmiennych, zaimplementowałem jedynie QUERY_STRING. Planuję dodanie kilku pól, by umożliwić wykonywanie klasycznych skryptów np w PHP
- W odróżnieniu od CGI, skrypt nie musi wyświetlać żadnych wyników. W takim przypadku Weby, zakończy pracę (sh:exit)
- Pole Content-Type, nie jest obowiązkowe. Weby automatycznie rozpoznaje formaty takie jak: text, html, jpeg i png. Umożliwia to bezpośrednie wywoływanie polceń systemowych.
- Dodatkowo, pola formularza są przypisywane zmiennym o tych samych nazwach z prefiksem weby_. W przypadku protokołu sh: możliwe jest też wywoływanie poleceń podając listę argumentów.
Odnośniki
Na przyszłość, założyłem odrębną stronę, oraz repozytorium svn.
Etykiety: c++, cgi, linux, qt, weby
Red 23:33
Prześlij komentarz