wtorek, 22 sierpnia 2017
LejOS na Lego MIndstorm ev3
piątek, 2 maja 2014
Dodawanie w Ubuntu do menu aplikacji - na przykładzie ScalaIDE
[Desktop Entry] Name=Scala IDE Comment=Scala IDE 3.0 Exec=/home/ms/Programy/scala-ide/eclipse Terminal=false Type=Application Icon=scalaIDE Categories=Programming; MimeType=application/x-java-jnlp-file; NoDisplay=falsePlik umieszczamy w katalogu /usr/share/applications/ Teraz potrzebujemy obrazka, który kopiujemy do katalogu /usr/share/pixmaps/ z nazwą użytą w pliku desktop. Warto przygotować sobie pomniejszony obrazek. Sam przeskalowałem sobie obrazek icon.xpm na 64x64 i zapisałem jako png.
wtorek, 11 marca 2014
Udostępnianie drukarki między komputerami z Ubuntu
czwartek, 6 marca 2014
Programowanie Lego Minestorm NXT z lejOS
Instalacja leJOS
Do tworzenia programów w leJOS potrzebna jest Java 32bit również JDK, może być to openJDK. Należy ją zainstalować w wersji 32-bit nawet na 64-bitowym systemie:sudo apt-get install openjdk-7-jdk:i386
Sprawdzamy wersję jre i ustawiamy na 32-bitową:
sudo update-alternatives --config java
Pobieramy 32-bitowe Eclipse ze strony https://www.eclipse.org/downloads/
Następnie pobieramy biblioteki leJOS wybierając najnowszą wersję i paczkę dla naszego systemu ze strony: http://sourceforge.net/projects/lejos/files/lejos-NXJ/ i rozpakowujemy je do katalogu /opt/leJOS_NXT
Teraz otwieramy Eclipse i w menu help->Eclipse Marketplace wyszukujemy wtyczkę leJOS dla NXT.Instalujemy i restartujemy Eclipse. W opcji tworzenia nowych projektów pojawił się pojekt lejOS NXT oraz nowe menu LeJOS NXJ z wgrywaniem firmware.
Programowanie w Java
Jednym z wzorcowych modeli robotów jakie możemy wykonać dzięki klockom Lego NXT jest shooterbot. Potrafi on strzelać kulkami. Z przodu robota ustawiony jest czujnik ultradźwiękowy pozwalający mierzyć odległość od przeszkód. W napisanym programie testowym robot ma się obracać czekając na „wroga”. Jeżeli ktoś zbliży się do niego na małą odległość (30cm), zatrzymuje się i oddaje strzał. Po strzale dalej obraca się. Schemat algorytmu:Kojo - nauka programowania od dziecka do inżyniera
Program ten jest otwarto-źródłowy na licencji GPLv2 i pracuje na maszynie wirtualnej Javy. Oznacza to, że jest dostępny na każdej popularnej platformie i do tego można go używać bezpłatnie zarówno w szkole jak i w domach. Dzięki temu dzieci mogą ćwiczyć w domu i odrabiać prace domowe jeśli tylko posiadają dostęp do komputera, niezależnie od posiadanego systemu operacyjnego. Program jest w dużym stopniu spolszczony. Poza polskim menu, można używać polskich komend. Wielką zaletą tego programu jest coś czego nie ma żaden inny program tego typu. Otóż w programie tym korzystamy z pełnego języka programowania nazywanego Scalą. Jest to język funkcyjny, kompilowany statycznie, działający na JVM. (Główny język używany przez inżynierów w takich projektach jak Twitter czy Foresquare, umożliwia korzystanie z kodu napisanego w Javie). Uczeń może więc rozpocząć naukę od bardzo prostych poleceń podobnych do tych z innych wersji LOGO, służących do sterowania żółwiem. Jednak z czasem po osiągnięciu większych umiejętności w razie chęci i potrzeby dalszego uczenia się, może zacząć korzystać z coraz bardziej zaawansowanych elementów programowania. Dzięki temu, aby przejść na wyższy etap nauki, nie musi zmieniać środowiska, do którego się przyzwyczaił. Naukę można kontynuować na wyższym etapie kształcenia, a z czasem nawet zmienić IDE i zacząć korzystać z całej gamy narzędzi dostępnych w środowisku Javy. Przykładowy program w Kojo:
czyść()
skoczDo(-360, 100)
tło(niebieski)
ustawWypełnieKolorem(żółty)
kolor(żółty)
ustawKąt(0)
powtarzaj(5) {
naprzód(200)
prawo(144)
}
podnieśPisak()
skoczDo(-350, -50)
kierunek(-350, 0)
opuśćPisak()
rozmiarCzcionki(40)
pisz("Witaj w Kojo")
Wynik działania programu:
Standardowo tak jak w klasycznych IDE po napisaniu kilku liter i wciśnięciu Ctrl+Spacja pojawiają się podpowiedzi do funkcji. W programie jest w opcjach dokumentacja, przykładowy kod i tutorial, ale niestety tylko w języku angielskim.
Składnia podstawowych poleceń w Kojo po polsku: epodrecznik.edu.pl
Pobieranie Kojo:kojo
niedziela, 3 listopada 2013
Webansible - interfejs webowy dla ansible
Wymagania:
- Praca z apt-get: update, upgrade
- Dodawanie i usuwanie źródeł oprogramowania
- Wybór oprogramowania do instalacji i usunięcia z listy oprogramowania
- Możliwość tworzenia grup komputerów i zarządzania nimi osobno
- Edycja i kopiowanie plików konfiguracyjnych na hosty
- Uruchamianie pojedynczego polecenia z konsoli w przeglądarce
- Edycja i uruchamianie playbooków
- Rejestrowanie komputerów o zmiennym IP i dodawanie ich do pliku hosts
- Zapisywanie historii ostatnich operacji
- Małe zużycie zasobów systemowych przez oprogramowanie
Plany realizacji:
Rozwiązania takie jak SpaceWalk czy Rudder są bardzo fajne, jednak jak dla mnie zbyt ciężkie. Jeżeli ten drugi zadowala się 1GB pamięci RAM,to w tym pierwszym potrzeba, aż 2GB. W moim oprogramowaniu powinno wystarczyć 50 - 100MB, a tylko w większych systemach konieczne byłoby więcej. No i z tego powodu używany przeze mnie do tej pory Lift odpada. Co prawda gdzieś na forum David Pollack pisał, o możliwości uruchomienia Lifta na 32-64MB, ale jakoś nie chce mi się w to wierzyć widząc na dotychczasowe moje aplikacje). Przeanalizowałem kilka możliwych rozwiązań. Teoretycznie Scalatra powinna być lżejsza do Lifta. Jednak patrząc nawet po rozmiarze pliku war nie widać wielkiej różnicy i być może byłoby to wydajniejsze rozwiązanie, ale nie sądzę aby była duża różnica. Mógłbym pokusić się o napisanie samodzielnie prostego serwera www w oparciu o HTTPServer. Jednak wymagałoby to pewnie dużo czasu, a i skalowalność byłaby słaba. Zastanawiałem się nad Socko Web Server. Na koniec zdecydowałem się na Spray.io. Socko wydaje się bardzo podobne do Spray jednak ten drugi projekt jest o wiele dojrzalszy, jak również o wiele więcej projektów z niego korzysta. Poznanie Spray może mi się przydać w przyszłości do innych projektów, więc warto chociażby z tego powodu go wybrać. Spray posiada możliwość uruchamiania aplikacji z wbudowanych serwerem (spray-can). Jest bardzo modularny i nie ma dużych wymagań. Po stronie przeglądarki zamierzam użyć Bootstrap Twitter (wygląd strony) oraz frameworka AngularJS. Po stronie serwera za szablony HTML ma odpowiadać Twirl (ponieważ jako jedyny jest dobrze zintegrowany ze Spray).Stan obecny
Aby zapewnić wykrywanie IP hostów napisałem prostą aplikację w języku Vala, która pinguje serwer (z użyciem libsoup). Serwer odbiera pingowanie i uaktualnia adres IP hosta i na żądanie tworzy plik /etc/ansible/hosts. W zasadzie ta funkcjonalność jest już wystarczająca, aby przejść do konsoli i zarządzać komputerami co wykorzystuje już w pracowni.Najbliższe plany
W pierwszej kolejności uruchamianie poleceń ansible bez konieczności przechodzenia do konsoli. Następnie wykonywanie update, upgrade i instalacja pakietu według nazwy oraz dodawanie źródeł oprogramowania.czwartek, 31 października 2013
Ansible - proste i wygodne narzędzie do automatyzacji zarządzania komputerami
Ansible jest dość wyjątkowy jak na narzędzie typu "provisionig" ze względu na to, że nie używa dedykowanego programu klienta i wszystkie operacje wykonywane są na klientach za pomocą połączenia ssh. Wystarczy więc zainstalować na zarządzanych komputerach ssh serwer (na serwerach www zazwyczaj już jest) oraz dodać klucz ssh zarządzającego komputera (w pliku ~/.ssh/authorized_keys) . Na komputerze z którego chcemy prowadzić kontrolę instalujemy Ansible i możemy zacząć pracę (może to być inny serwer lub nasz laptop). Sposób działania Ansible dla jednych będzie wadą, a dla innych zaletą. Wykonując zadania widzimy od razu efekty i wiemy czy zaplanowane działania powiodły się czy też nie. W CFEngine piszemy plik "promises" i przy najbliższym połączeniu klient pobiera go i stara się osiągnąć stan zapisany w pliku. Jeśli chcemy uzyskać informacje czy udało się uzyskać to co chcieliśmy to musimy dopisać kod odpowiedzialny za pobranie raportów. Ansible wydaje się więc wygodniejsze do zarządzania serwerami szczególnie gdy nie jest ich bardzo dużo (chociaż radzi sobie również gdy jest ich sporo). Niestety nie obsługuje na razie komputerów z Windows.
Zarządzanie nie wymaga wiele nauki. Istnieją dwa tryby pracy. Pierwszy to pojedyncze polecenia, przykładowo: ansible all -m ping - pingowanie klientów. Pierwszy parametr all oznacza wybór wszystkich grup hostów zdefiniowanych w pliku /etc/ansible/hosts. Można też osobno odwoływać się do grup lub pojedynczych serwerów (po ip lub domenie).
ansible all -a "jakieś polecenie bash" --user=administrator -K - uruchomienie polecenia powłoki jako użytkownik administrator gdzie parametr K każe uruchomić polecenie za pomocą sudo i zapytać ansible o hasło (raz dla wszystkich hostów - stąd muszą mieć ustawione te same hasło jeśli chcemy załatwić pracę jednym poleceniem).
ansible all -m apt -a "pkg=eclipse state=present" --user=administrator -K - użycie modułu apt do instalacji pakietów na systemach debianowych - instalujemy eclipse.
Drugim sposobem jest wykonywanie wielu działań na raz za pomocą tzw. playbook. Są to pliki w YAML, których składnia jest bardzo prosta:
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
handlers:
- name: restart apache
service: name=httpd state=restarted
Kolejno deklarujemy w nim z jaką grupą hostów pracujemy, dodajemy zmienne, użytkownika na koncie którego będziemy wykonywać polecenia, oraz zadania. Zadanie ma swój opis - komentarz (name) oraz podany moduł (np. yum) i stan. Po kilku minutach nauki składni można zacząć już pracę i tworzyć proste playbooki.
Małym problemem Ansible może być fakt, że w pliku hosts wpisujemy IP (lub domeny) i gdy mamy komputery o zmiennym IP z DHCP to nie możemy tego zrobić. W przypadku niepowodzenia polecenie nie jest automatycznie ponawiane. Samo Ansible bardzo mi się podoba i decydujące tutaj poza faktem lekkości po stronie klienta (serwer ssh) jest fakt, że od razu wiem jaki skutek odniosły moje działania. Jednak dla osób, które chciałyby zarządzać dużą ilością desktopów lepszym rozwiązaniem może okazać się CFEngine. Natomiast dla moich potrzeb Ansible świetnie nada się do systemu zarządzania komputerami, który planuje napisać (o czym wkrótce).
poniedziałek, 28 października 2013
Epoptes - narzędzie do podglądu pracy ucznió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
wtorek, 26 października 2010
Ile kosztuje poprawność w XHTML
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


