cz.1 | Programowanie w Linuksie
Witam was wszystkich. Ostatnio przez dłuższy czas nie miałem ani minyty czasu aby cokolwiek napisać na blogu ale jako, że coś się zmieniło i mam teraz troszkę więcej czasu to zacznę znowu pisać. W tej serii opiszę swoje doświadczenia w programowaniu pod Linuksem.
jakiś tam wstęp
Wciąż pracuję nad swoim Subgetem i szczerze mówiąc sporo się uczę przy jego tworzeniu. Dalej i dalej siedzę w Pythonie bo jest przewygodny - to prawda.
Ostatnio pomyślałem aby zamiast wadliwej obsługi COM'u zaimplementować w Subgecie obsługę socketów pod Windowsem ponieważ COM i Python się zwyczajnie nie lubią. API COM'u w Pythonie jest felerne, to znaczy nie wiem czy tylko w Pythonie ale w samym Pythonie jest do bani, to jest pewne. Chyba nie będę tego opisywać bo to długa historia. No chyba, że będziecie chcieli to w następnej części albo w osobnym wpisie opiszę moją przygodę z COM'em i Pythonem.
Python zapewnia interfejs socketów kompatybilny zarówno z WinSocks oraz z Unix Sockets dlatego kod programu dla obu platform byłby mniej więcej taki sam. Dobra, koniec tego gadania takiego tam... : )
Do rzeczy, teraz trochę o środowisku Uniksowym...
Ostatnio stworzyłem małą aplikację w shellu "subget-translator " ma ona za zadanie monitorować zmiany w pliku z źródłowym tłumaczeniem językowym programu i w razie jakiejkolwiek zmiany (jak zapiszemy plik w edytorze tekstowym) to aplikacja sama skompiluje tłumaczenie do postaci binarnej GNU Gettext oraz uruchomi program do testów.
Fajną sprawą w Linuksie jest środowisko ze zmiennymi łatwo dostępne z poziomu aplikacji i shella, możemy w nim ustawić praktycznie wszystko do testowania aplikacji. W translatorze Subgeta użyłem właśnie zmiennych środowiskowych do ustawienia języka aplikacji na chwilę jednego uruchomienia.
env jest dostępnym narzędziem w każdym systemie, pokazuje ono listę zmiennych środowiskowych którymi kierują się aplikacje w integracji z systemem operacyjnym. Aby ustawić inny język w dowolnej aplikacji w uniwersalny sposób po prostu ustawiamy zmienną LANG w shellu, dla Basha to będzie:
export LANG="pl_PL.UTF-8" # dla języka Polskiego export LANG="en_US.UTF-8" # dla języka Angielskiego (stany zjednoczone) export LANG="da_DK.ISO-8859-1" # dla języka Duńskiego
W /etc/locale.gen możecie znaleźć więcej języków do sprawdzenia.
W ten magiczny sposób DOWOLNA aplikacja uruchomiona w tej samej konsoli po wpisaniu tego polecenia stosuje się do nowych zasad, czyli ustawionego języka, motywu oraz przeróżnych ustawień programów. W Pythonie aby ustawić ustawić zmienną środowiskową należy zaimportować bibliotkę os oraz wykonać:
os.putenv("LANG", "en_US.UTF-8")
A następnie można uruchomić dowolną aplikację poprzez os.system():
os.system("/usr/bin/subget")
Aplikacja będzie się stosować do nowo ustalonych zmiennych środowiskowych i powinna uruchomić się w języku angielskim. Przy pomocy env i grep możemy odnaleźć interesujące nas zmienne.
env|grep GTK GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/webnull/.gtkrc-2.0:/home/webnull/.kde4/share/config/gtkrc-2.0 GTK_RC_FILES=/etc/gtk/gtkrc:/home/webnull/.gtkrc:/home/webnull/.kde4/share/config/gtkrc
Wystarczy właściwie stworzyć własny plik z motywem gtkrc oraz wstawić jego adres do GTK2_RC_FILES a następnie uruchomić aplikację - pozostałe programy będą wyglądać normalnie a nasza aplikacja będzie z całkowicie innym motywem systemu. W katalogu find /usr/share/themes -name '*gtkrc*' znajdziecie więcej motywów do testowania : )
No to nowi programiści Linuksowi, wiecie już jak testować Waszą aplikację w różnych konfiguracjach systemowych, proste, prawda? Systemy Uniksowe to prostota.