Saturday, January 26, 2008

Java - pierwsze spotkanie

PO laboratorium z Obiektowych Języków Programowania postanowiłem bliżej zapoznać się z językiem Java. Pomyślałem, że napiszę kolejnego G-mail notifiera: międzyplatformowego z natywnym interfejsem.

Java chyba nie ma sobie równych jeżeli chodzi o interfejs. Z biblioteką SWT Java staje się chyba bezkonkurencyjna pod tym względem choć już samo Swing pozawala na przenośność :] to SWT dodaje tej przenośności smaczku.

Kolejna rzecz, która cieszy to podstawowe operacje, elementy, klasy z których się korzysta są napisane tak iż korzystanie z nich to czysta przyjemność, szczególnie po moradędze z Visual C++ 2005. Wiele elementów z którymi w Visualu człowiek się męczył tutaj "po prostu działa". Język okazuje się wygodn, a proste programy pisze się błyskawicznie ponieważ można się skupić na pisaniu kodu a nie na szukaniu po sieci "jak to się robi i dlaczego nie działa ?".

IDE dla języka Java ... marzenie. NetBeans po prostu robi za nas wszystko chociaż i na Eclipse nie ma co narzekać - to jak na razie gdyby ktoś mnie zapytał co polecam poleciłbym NetBeans, prawdopodobnie dlatego, że Eclipse za słabo znam.

No dobrze - a teraz jak już tak nachwaliłem ... to teraz trzeba troszkę zganić, żeby było obiektywnie.

Po pierwsze: o ile Java jest super w zastosowaniach podstawowych o tyle przy późniejszych programach (TLS Sockets na przykład) zaczyna być ciężko. Są fora, na których społeczność naprawdę stara się pomóc, ale im temat bardziej specjalistyczny tym trudniej o pomoc, dokumentację, przykłady.

Po drugie: Instalacja bibliotek i używanie w swoich plikach bibliotek cudzych stanowi na początku pewien problem.

Inna sprawa. Ilość klas obecnych w Java może być dla kogoś zaletą (bo w sumie są klasy do wszystkiego), z drugiej strony czasem chciałbyś coś zrobić. Masz stringa, a metoda, którą chcesz użyć przyjmuje InputSource. Zaczyna się kombinowanie, myszkowanie po sieci jak z tego co masz uzyskać to co chce metoda... Ilość możliwości, opcji - wprowadza specyficzny nieład - jest tego po prostu za dużo... i gdy na początku można było się czegoś nauczyć... tutaj zaczynają się schody. Mylą się klasy, ich przeznaczenie i metody konwersji między nimi.

To w sumie tyle. Każdemu programiście polecam po programować troszkę w Java - naprawdę język uczy się na błędach protoplastów i wiele ułatwia. Polecam !

Base64 w Java

Spędziłem sporo czasu szukając biblioteki, która pozwoliłaby mi zakodować String w Base64. Ponieważ potrzebowałem tylko zakodować string idealna okazała się dla mnie biblioteka Igora Zhukovsky http://www.izhuk.com/painter/product/jsp/Base64.java

Thursday, January 24, 2008

Ładne ikonki zakładek pod FireFox

Od jakiegoś już czasu doprowadza mnie do pasji "nieładny" pasek z zakładkami. Napisy zajmują za dużo miejsca więc już dawno je wyrzuciłem. Jednak same ikonki też nie zawsze wszystko mówią. Owszem - jeżeli każda strona ma własny favicon - bomba ! Ale jeżeli strona takowego nie posiada to pozostaje nieładna biała karteczka :/ - pół biedy jedna, ale wiele biały karteczek nie do odróżnienia. Dziś natknąłem się na ciekawy plugin do Firefox, który rozwiązuje ten problem. Favicon Picker 2 bo o nim mowa pozwala wybrać dowolną ikonkę z dysku dla zakładki, którą chcemy obsłużyć. Nie działa niestety w Firefox 3b2 ... a szkoda :) może będzie działało w oryginalnej :]

Opera -> Firefox

Dziś postanowiłem przesiąść się z Opery 9.50 w bardzo wczesnej wersji, w której często zdarzało mi się iż wpisanie adresu w pasku tytułu oraz wciśnięcie enter nie dawało rezultatu lub wejście na jakąś stronę internetową zamykało mi przeglądarkę, na firefox 3.0b2. Wiem, że jest b3 ale zależało mi na spolszczeniu. Nie wiem dokładnie dlaczego ale z jakiś przyczyn brakuje mi wciąż gestów myszy (których w tej wersji nie mogę jeszcze zainstalować z racji niekompatybilności wtyczki z tak wczesną wersją rozwojową FF 3) jednak pracuje mi się znacznie "wygodniej". Nie wiem na czym ta wygoda dokładnie polega jednak nie da się ukryć, że już choćby sam fakt, że przeglądarka poprostu wszystko obsługuje jest miły :) Podoba mi się to, że informacje pokazują się niewielkim pasku u góry strony oraz fakt iż menu ma natywne ikonki (takie z GTK). Równie sympatycznie wygląda manadżer pobierania z wznawianiem pobierania oraz nie ukrywam, że ikonki zamiast napisów wyglądają w nim znacznie lepiej. To tyle z refleksji :]

Exaile - GTKowy Amarok

Kolega pytał się mnie czy jest jakaś GTKowa nakładka na amaroka... W sumie też stwierdziłem, że coś by się przydało. Tak trafiłem na Exaile. Nie rzuca na kolana tak jak amarok ale odtwarza muzykę, przeczesuje amazon w poszukiwaniu okładek, cieszy widok ładną listą odtwarzania, posiada kolekcje, prawdopodobnie taguje ładnie mp3 (nie mam żadnych na komputerze, żeby sprawdzić) oraz umie na oko łączyć się z last.fm oraz ściągać coś z wikipedii - tak więc :] na moje niewielkie potrzeby ! jest wystarczający :] ... na razie jeszcze sporo w nim grzebię przez co widzę, że program jak się instaluje co sekundę plugin wiesza się :) o tyle jak używa się go do odtwarzania muzyki - działa w porządku :)

Pozdrawiam !

Monday, January 21, 2008

Sieć bezprzewodowa w ubuntu

Wczoraj byłem u koleźanki i musiałem podłączyć się szybciutk do sieci bezprzewodowej u niej w domu :] Udało mi się to dzięki kilku prostym poleceniom:
ifconfig eth1 down # Wyłączam interfejs na czas konfiguracji
iwconfig eth1 essid linksys # Wpisuje nazwe sieci z ktora chce sie laczyc
iwconfig eth1 key BA123RDZO65TAJNE # Podaje indentyfikator WEP 
ifconfig eth1 up # Wlaczam juz skonfigurowany interfejs
dhclient3 eth1 # Pobieram dla niego adres z DHCP

Ubuntu i słuchawki w laptopie Fujitsu-Siemens Amilo Pro V3525

Na podstawie opisu zawartego tutaj (dzięki mich) doszedłem, że aby moje ubuntu zaczęło odtwarzać dźwięk na słuchawkach na końcu pliku /etc/modprobe.d/alsa-base wystarczyło dodać:

options snd-hda-intel model=targa-dig
Po zrestartowaniu dźwięk odtwrzany był tylko na słuchawkach. Minusem jest niemożliwość odtwarzania dźwięku przez wbudowane głośniczki bez wykosowania tej linijki i pononwego restartu komputera.

Saturday, January 19, 2008

Uruchamianie aplikacji SWT pod Windows

Tutaj opis będzie banalnie prosty. Po ściągnięciu: http://archive.eclipse.org/eclipse/downloads/drops/R-3.3-200706251500/swt-3.3-win32-win32-x86.zip i rozpakowaniu przekopiowałem plik swt.jar do:
C:\Program Files\Java\jre1.6.0\lib\ext
C:\Program Files\Java\jre1.6.0_03\lib\ext

i wszystko pięknie działało :)

Dwa słowa o SWT

Co to jest SWT i o co tyle walki ?

Na uczelni uczono nas programować interfejs z użyciem biblioteki swing. Korzystaliśmy z narzędzia jakim jest NetBeans. Projektowanie interfejsu z użyciem swinga generowało okienka, rysowane piksel po pikselu, identycznie w każdy systemie, bez względu na to jak w danym systemie system okienek realnie wyglądał.  Oznacza to mniej więcej tyle, że jeżeli inaczej wyglądają okienka w Windows, inaczej w GTK a jeszcze inaczej w MacOS to z użyciem biblioteki swing okienka w każdym z tych przypadków wyglądałyby identycznie.

Inaczej jest z biblioteką SWT, w które wygląd okienek dopasowuje się do systemu w którym obecnie uruchamiamy aplikację. Ten sam program będzie wyglądał inaczej pod Windows, inaczej pod GTK inaczej pod MACami. Brzmi wspaniale nieprawdaż :) Zawsze lepiej jest mieć aplikację, do której wyglądu użytkownik danego systemu jest przyzwyczajony i która nie straszy swoją innością, choć nie mogę powiedzieć, żeby aplikacje pisane w Swing były nieschludne - poprostu są inne.

SWT w Ubuntu

Ostatnie kilka dni spędziłem na walczeniu z SWT w ubuntu. SWT to technologia dostępna w języku programowania Java pozwalajaca tworzyć interfejsy użytkownika wyglądające jak natywne okienka dostępne w systemie z którego korzystamy.

Na początku wpisałem sobie w synapticu SWT i zainstalowałem co następuje:

libswt3.2-gtk-gcj

libswt3.2-gtk-java

libswt3.2-gtk-jni

Paczka gtk-java zawiera pliki jar, zaś paczka jni pliki so. Później przyszedł czas na eclipse. Wiem, że na dzień dzisiejszy dostępna jest wersja 3.3, ale prawdopodobnie na moim poziomie zaawansowania nie zauważyłbym nawet różnicy w funkcjonalności :] więc zainastalowałem sobie:

eclipse

eclipse-jdt

eclipse-pde

eclipse-platform

eclipse-rcp

eclipse-source

Nie wiem czy to wszystko jest potrzebne, ale :) z tym wszystko działa w porządku. Oczywiście o:
sun-java6-jdk
nie wspomnę. Po zainstalowaniu tych wszystkich paczek mamy dwie opcje. Zrobić dowiązanie symboliczne w katalogu rozszerzeń jre do swt.jar tak, że będzie automatycznie lądowało w projekcie (wyglądał poprostu ładnie), albo dodawać do projektów w których korzystamy SWT za każdym razem zewnętrzne pliki JAR (pojawia się kolejna pozycja w menu). Jeżeli chcemy zrobić dowiązanie to w katalogu:
sudo ln -s /usr/lib/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_3.2.2.v3236.jar /usr/lib/jvm/java-6-sun/jre/lib/ext/swt.jar

Teraz uruchamiamy Eclipse wchodzimy do: Window\Preferences\Java\Installed JREs, zaznaczamy java-6-sun, wybieramy Edit..., Add External JARs..., wyszukujemy dowiązanie symboliczne /usr/lib/jvm/java-6-sun/jre/lib/ext/swt.jar, OK, OK, OK. Teraz pozostaje nam jeszcze ponowne uruchomienie Eclipse. Od tej pory wszystkie projekty jakie będziemy tworzyć będą posiadały możliwość używania SWT. 

Jeżeli chcemy samodzielnie dołączać SWT do projektu podczas tworzenia nowego projektu w widoku Java Settings w zakładce Libraries możemy wybrać Add External JARs i analogicznie do poprzedniego opisu dodać ją samodzielnie. Podaję kod przykładowej aplikacji:

package widok;

import org.eclipse.swt.widgets.*;

public class Okienko {
   public static void main(String [] args) {
     Display display = new Display();
     Shell shell = new Shell(display);
     shell.setText("Hello World !");
     shell.open();
     while (! shell.isDisposed()) {
          if(! display.readAndDispatch())
               display.sleep();
     }
     display.dispose();
   }
}
Podczas uruchamiania z menu Run\Run As musimy wybrać SWT Application.

Aby stworzyć plik jar z menu File wybieramy export Java \ Jar File, zaznaczamy nasz projekt i klikamy kolejno Next aby w widoku JAR Manifest Specification ustawić MainClass na widok.Okienko. Powiedzmy, że zapiszemy plik pod nazwą morficzneOkienko.jar

Ponieważ java nie wie gdzie dokładnie ma szukać sobie informacji o swt dlatego aplikację musimy uruchomić:

java -Djava.library.path=/usr/lib/jni -jar morficzneOkienko.jar

wskazując javie, gdzie znajdują się biblioteki potrzebne do uruchomienia naszego programu.

Aby móc cieszyć się SWT w NetBeans 6 klikamy w prawym panelu "Projects", klikamy prawym przyciskiem myszy na nasz projekt i wybieramy Properties. W części Categories wybieramy Libraries i w zakładce Compile:

/usr/lib/eclipse/plugins
Wybierzmy teraz Run i do pola VM Options wpiszmy:

-Djava.library.path=/usr/lib/jni

i już możemy cieszyć się SWT w NetBeans 6

Friday, January 18, 2008

Dokumentacja w Ubuntu

Dziś chciałem sobie obejrzeć składnię funkcji read() w C. I co ? I kicha... ale się wściekłe. KateOS przyzwyczaiło mnie, że wszystko mam na wyciągnięcie ręki. Wystarczyło zainstalować paczki:

manpages-pl

manpages-pl-dev

manpages-posix

manpages-posix-dev

Być może list jest za długa, ale po uruchomieniu "man 2 read" dostałem to co chciałem :]

Thursday, January 17, 2008

Zbawienie - czyli Java na 3 kółkach

Na trzech kółkach bo dopiero zaczynam. Używaliśmy środowiska NetBeans 5.0. Wiem, że stare - ale tylko takie jest jak na razie na lbaoratorium. Sporo namęczyłem się z serializacją. Wyglądało - jakby działała, ale po odtworzeniu obiektu miała problemy z zapisywaniem wartości do odtworzonego obiektu. Gdy zacząłem zamieniać wszystkie Integer na int gdzie tylko to było możliwe - zaczęło działać.

Programik to prosta gra w kółko i krzyżyk.

Wypociny w Visual C++ 2005

Na laboratoriach dowiedziałem się, że Visual C++ 2005 to od wersji 6 nie poprawione (podstawowe) błędy. Sam przekonałem się, że to także kiepska implementacja (gdzie najrostrze rzeczy robi się tak jakby komputer chciał a nie mógł) i jestem zmuszony do używania narzędzia, które mało tego, że nie działa to jeszcze nigdy nie wiadomo kiedy zapisze mój projekt tak iż przestanie działać (więc najlepiej każdy zapis zapisywać jako nowy projekt). Oto moje wypociny. Może komuś się przydadzą:

Kalkulator biletów SKM

Zabawy z grafiką i odświerzaniem zawartości okna

Mrówka Langtona

Tuesday, January 15, 2008

Ubuntu - działa. Linux na Laptopa

Ostatnio instalowałem sporo Linuxów. Akcja była przeprowadzana na moim nowym laptopie. KateOS sprawdzał się, ale jego mankamentem jest niestety mała ilość dostępnych programów w repo. Mankamentu tego nie posiadał Debian, który nie pamiętam już dlaczego mi się nie spodobał. Potem było SUSE, które poprostu nie przypadło mi do gustu. Były jakieś niesnaski z aktualizacjami, które cały czas wyrzucały te same pakiety do zaktualizowania. Po zainstalowaniu compiza Xy zaczęły się systematycznie zawieszać. Kubuntu zachowywał się podobnie pod różnymi względami (stwierdzam więc, że to chyba pewne mankamenty samego KDE), działając poprostu niestabilnie i wykrzaczając się w różnych miejscach. Fedorze zaś nie udało się nawet uruchomić instalatora. W moim przypadku idealnym systemem okazało się ubuntu. Dlaczego ? Bo działa. Na dzieńdobry już przy włączeniu instalatora (Live CD) raczyło mnie ślicznymi compizowymi efektami, który jeszcze ani razu mi się nie wykrzaczył ! Ba więcej - posiada sporo naprawdę dobrze działających narzędzi w trybie graficznym. Choć nie są mi one potrzebne (lubię klimaty konfigurowania plików slack/kateos), to mówię o nich ponieważ ubuntu jest na tyle działającą i łatwą w obsłudze dystrybucją, że używa jej nawet mój kolega, który do Linuksa był nastawiony sceptycznie i miał wobec niego sporo wymagań. Próbował on kolejno kilku dystrybucji i kiedy po zainstalowaniu próbował coś zrobić, to zawsze pojawiał się jakiś błąd, albo coś nie działało (takie miał pecha). Czasami nawet sam instalator nie chciał się spisywać.

Ubuntu posiada sporo paczek, właściwie niewiele rzeczy muszę doinstalowywać ręcznie. Jako programistę wkurza mnie tylko dzielenie paczki na te z plikami nagłówkowymi i binarkami... W KateOS było o tyle dobrze, że "odrazu wszystko działało". System był wyposażony w niesamowicie dużą ilość bibliotek - więc kompilacje programów w znacznej części kończyły się powodzeniem. Tutaj nawet najbardziej podstawowe elementy trzeba dosinatlowywać z repo - jeszcze się do tego nie przyzwyczaiłem.

Ogólnie - system poprostu działa i jest fajnie. Wywala mi się tylko co jakiś czas beta Opery, ale to w końcu beta więc na co narzekać. To tyle - polecam tą dystrybucję każdemu kto chciałby spróbować swojej przygody z Linuksem. Ma naprawdę kapitalną dokumentację, aktywną społeczność, jest o niem mnóstwo informacji w sieci, sympatyczny podręcznik - i poprostu działa. Może i na Twoim sprzęcie okaże się tym "działającym" linuksem !

Merb - pierwsze spotkanie

Ostatnio wspierając się poradami z blog.zabiello.com postanąwiłem ruszyć Merba. Pierwsze zaskoczenie to to, że kiedy nie mogłem dać sobie z czymś rady (na przykład jak dostać się do danych wysłanych POST w kontrolerze) - to analogia do railsów była niesamowita. To fajnie - bo okazuje się, że podręczniki do rails jednak się przydają.

Druga sprawa to współpraca z NetBeans 6.0.

1) Tworzymy pusty projekt merb w konsoli wpisując:

merb nazwa_aplikacji

2) W NetBeans Tworzymy projekt Rails z istniejącymi źródłami i wskazujemy nasze pliki stworzone przez merb.

3) NetBeans łyka naszą strukturę katalogów jako rails. Teraz aby móc odpalić serwer, czy debugować należy jeszcze zastosować się do wskazówek zawartych http://blog.zabiello.com/articles/2007/12/20/nb6-debug-merb.

Dzięki temu mamy naprawdę fajne narzędzie do merb-a. Taki pobierzny przegląd podstawowych zagdnień  związanych z tworzeniem aplikacji w Merb znajdziemy:

http://blog.zabiello.com/articles/2007/12/16/howto-rails-merb-pylons

http://merb.rubyforge.org/files/README.html

Jak wspomniałem - również książki do Rails mogą okazać się pomocne.