poniedziałek, 28 października 2013

Epoptes - narzędzie do podglądu pracy uczniów

W pracowniach informatycznych przydatnym narzędziem może okazać się oprogramowanie pozwalające wyświetlać pulpit uczniów. Na Linuksie możemy użyć iTalk, albo Epoptes. Ten drugi jest nieco lepiej prowadzony przez deweloperów (z Grecji). Działa dość stabilnie i jest ciągle rozwijany. Ma też spore możliwości. Możemy przesłać uczniowi swój ekran (dzięki czemu nie potrzebujemy rzutnika), podglądać ekran ucznia lub przejąć nad nim kontrolę. Możemy wyłączać, wylogowywać, blokować i odblokowywać ekran, restartować i włączać komputery zdalnie (to ostatnie tylko gdy mamy ustawione Wake On Lan). Mamy też możliwość uruchamiania programów jako aktualny użytkownik, przesyłania komunikatów oraz logowania się na zdalną konsolę (za pomocą socat). Na Ubuntu instalacja sprowadza się do kilku kroków:
  • Na komputerze nauczyciela instalujemy: sudo apt-get install epoptes
  • Na komputerach uczniów: apt-get install epoptes-client
  • Na komputerze nauczyciela dodaj nazwę swojego użytkownika do grupy epoptes gpasswd -a username epoptes Umożliwia to prawo do otwierania programu epoptes. Musisz się wylogować i ponownie zalogować, aby uzyskać dostęp
  • Na swoim routerze ustaw stałe IP dla komputera nauczycielskiego
  • Na komputerach klientów w pliku /etc/hosts dodaj linię opisującą ip komputera nauczycielskiego: NAZWAHOSTA ADRES_IP (np.: Serwer 10.0.0.2)
  • Na komputerze klientów w pliku: /etc/default/epoptes-client dodać lub odkomentować linę SERVER=NAZWAHOSTA_KOMPUTERA_NAUCZYCIELA
  • Na komputerach klientów wywołaj polecenie pobierające certyfikat ssl z serwera: sudo epoptes-client -c
Uff.. :) i już można cieszyć się działającym programem, Jeżeli używasz Edubuntu odinstaluj z komputera nauczyciela epoptes-client, a z komputerów uczniów epoptes bo nie będziesz mógł widzieć komputerów z niezalogowanymi użytkownikami.

wtorek, 26 października 2010

Ile kosztuje poprawność w XHTML

Pisząc aplikację Lifcie ze względu na małą popularność tego frameworka trzeba czasem sporo googlowania aby znaleźć potrzebne informacje.
Chcąc zapisywać HTML w bazie, trzeba go potem wyświetlić w Lifcie. Kod przechowywany w bazie odczytuje jako String, który należy umieścić w XML. Prostym rozwiązaniem jest obiekt Unparsed. Jednak wycięcie części kodu do skrótu wymaga już zamiany na XML. HTML tworzony przez edytor Xinha (znalezienie edytora zgodnego z XHTML nie jest proste) może zawierać znaki specjalne jak   co powoduje błędy parsowania i rzuca wyjątkiem. Na szczęście David Pollack lubi dzielić się wiedzą z innymi ;). Robi się prostym kodem:
PCDataXmlParser("<div>" + str + "</div>").openOr(Text(str))
Całe szczęście, że powoli odchodzi się od XHTML. Chociaż rozumiem argumenty, że kod XHTML jest lepszy od HTML to jednak jest to kosztowne jeśli chodzi o czas potrzebny na pisanie aplikacji. Ciągle jeszcze brakuje Scali i Liftowi dobrej dokumentacji.
PS. W przypadku kodu HTML5 jQuery wstawiając elementy z pojedynczym tagiem takim jak br czy img nie dodają na końcu zamykającego slasha przez co dokument nie jest poprawnym XML i próba parsowania go w Scali kończy się wyjątkiem. Dlatego trzeba przed parsowaniem uzupełnić brakujące slashe. Nie rozumiem co takiego przeszkadzało deweloperom jQuery, że nie mogli dać poprawnego XML. Sam standard HTML5 mógłby wymagać tych slashy byłoby całkiem miło ;)

niedziela, 1 sierpnia 2010

Biblioteka Wt C++ web toolkit

Niedawno natrafiłem na biblotekę Wt. Umożliwia ona tworzenie stron internetowych dynamicznych bez znajomości JavaScript bezpośrednio w C++. Sama biblioteka jest wzorowana na Qt, a podobieństwo polega na użyciu sygnałów i slotów oraz podobieństwem nazw (WString, WTable etc.) :)

Nie korzysta jednak bezpośrednio z QT, a szkoda bo miłoby było używać znanych i dobrze napisanych klas z QtCore. Oczywiście nic nie stoi na przeszkodzie aby to robić, z tym, że trzeba je konwertować na obiekty Wt. Framework Wt można uznać za wykorzystujący wzorzec MCV, jednak pisanie w nim różni się zdecydowanie od innych frameworków z jakimi miałem do czynienia (DJango, Lift). Tworzenie aplikacji internetowej wygląda w nim tak jakbyśmy kostruowali typowy program GUI w C++, style można dołączać tak jak w Qt lub w dodatkowym pliku CSS. Ma to swoje zalety i wady. Zaletą na pewno jest możliwość tworzenia zaawansowanych aplikacji wykorzystujących AJAX bez jego znajomości. Stworzona aplikacja potrafi wykrywać rodzaj przeglądarki i fakt czy używa ona JavaScript. W sytuacji gdy nie ma JavaScriptu wszystkie funkcje realizowane są w czystym HTML (co wymaga częstych połączeń z serwerem). Drugą z zalet jest mała zasobożerność i duża szybkość działania. Program możemy skompilować jako plik fast CGI i uruchamiać na Apachu (lub innych obsługujących FCGI), albo wkompilować lekki serwer HTTP w program. W tym drugim przypadku prosty program zajmuje jakieś 7MB RAM, podczas gdy np jetty w trybie debug z liftem pożera jakieś 80MB (Kubuntu 10.04).

Minusem jest brak kontroli nad kodem HTML i konieczność przekompilowywania zmian co nieco utrudnia dopracowywanie wyglądu. (ciężko wykorzystać gotowy szablon). Jednak w wsytuacji gdy wygląd nie ma pierwszorzędnego znaczenia lub większa ilość pracy włożonej w jego "dopieszczenie" jest uzasadniona koniecznością większej wydajności warto zastanowić się nad tym rozwiązaniem. Faktem jest, że główne zastosowaniem są najczęściej systemy typu "embeded". Można taką stronę postawić na prostym termianalu. Konieczność kompilacji nie wydaje mi się jakimś specjalnym utrudniem (szczególnie że w Javie, Scali i .NET też trzeba kompilować). Przy kompilacji korzysta się standardowo z cmake (i make w linux). Biblioteka zawiera szereg interesujących Widgetów np. Charts, które w szybki sposób pozwalają rysować wykresy, które użytkownik może bezpośrednio modyfikować.

Inne projekty frameworków w C++ są w fazie rozwojowej i nie specjalnie nadają się do wykorzystywania. Chociaż w dwóch jakie znalazłem podejcie jest inne niż Wt i używają one systemów szablonów HTML. Natomiast sam Wt pozwala pisać ciekawe aplikacje działające po stronie klienta bez znajomości zaawansowanych technologii webowych i wystarczy tylko praktycznie znajomość C++ (i zapoznanie z biblioteką Wt). Zatem programiści C++ do dzieła :).

Zastanawiam się nad napisaniem dziennika internetowego za pomocą Wt, nie byłoby to tak trudne, bo nie musiałbym kobinować z AJAXem i można by taki program postawić na prostym serwerze czy w szkole czy też na zewnątrz.

Strona domowa projektu http://webtoolkit.eu

poniedziałek, 19 lipca 2010

Czy można uprościć pisanie w C++?

Zastanawiam się czy nie warto byłoby spróbować napisać jakiś skrypt lub mini program, który ułatwiałby pisanie programów w C++. Miałby działać w taki sposób, że pisanie klasy wyglądałoby jak w Scali. Czyli konstruktor jako ciało klasy, a metody znajdowałyby się wewnątrz klasy. Po napisaniu takiego pliku skrypt generowałby prawidłowe pliki h i cpp. W większości pisanych przez siebie programów nie byłoby to chyba zbyt skomplikowane, choć nie dałby się tego wykorzystać w każdym pliku źródłowym. Dawno już ktoś powinien coś takiego napisać, bo naprawdę wkurzające jest to przepisywanie wszystkich nazw metod w plikach. Zmieniam nazwy w pliku cpp, a zapominam je nanieść do h. A gdzie pisać komentarze? Najczęściej kopiuje całość z pliku h i przerabiam, ale jak odpisuje nowe metody to zaczyna się bałagan :)

poniedziałek, 19 października 2009

Zaczynam blogowanie...

No to od dzisiaj będę pisał tutaj zamiast rozwijać swoją stronę na freehost.