balor@chrome.pl

Haxe - quick start na Linuxie

25 lutego 2010, 23:08:16

Po dłuższej przerwie spowodowanej zaliczeniami, sesją itp. (każdy dobrze wie wtf.) postanowiłem odkurzyć nieco swojego zaniedbanego bloga. Stąd, obiecany kiedyś przeze mnie, poradnik pokazujący w jaki sposób zacząć swoją przygodę z haXe w środowisku jakim jest Linux. A więc zaczynamy...

Ściągamy paczkę z plikiem instalacyjnym haXe z oficjalnej strony, rozpakowujemy go i uruchamiamy z uprawnieniami roota:

% mkdir haxe_inst
% cd haxe_inst
% wget http://haxe.org/file/hxinst-linux.tgz
% tar -zxvf hxinst-linux.tgz
% sudo ./hxinst-linux


Po pomyślnie zakończonej instalacji powinniśmy zobaczyć poniższy napis:

Installation Completed

Świetnie, zainstalowaliśmy haXe! Jeśli chcemy możemy już usunąć plik instalatora, pobraną paczkę i pliki ściągnięte przez instalatora.
Kolejnym krokiem będzie stworzenie swojego pierwszego projektu. Zacznijmy od stworzenia dla niego folderu, w którym stworzymy 2 pliki, tj. Hello.hx i compile.hxml:

% mkdir ~/hello
% cd ~/hello
% touch Hello.hx
% touch compile.hxml


Teraz szybkie wyjaśnienie. Plik Hello.hx będzie zawierał kod naszej aplikacji w Haxe. Natomiast plik compile.hxml zawiera parametry kompilacji naszego programu.
Zacznijmy tworzyć! Otwórzmy swoim ulubionym edytorem plik Hello.hx i przepiszmy (niekoniecznie z komentarzami) poniższy kod:

class Hello // Deklaracja klasy Hello (Nazwa klasy taka sama jak pliku)
{
    // Deklaracja metody statycznej main()
    // Metoda ta jest wywoływana przy rozpoczęciu działania programu
    static function main()
    {
        // Tworzymy obiekt pola tekstowego we flashu
        // Zauwazmy zgodnosc z api Flasha
        var wesolePole = new flash.text.TextField();
        wesolePole.text = "Witaj Świecie!";
        wesolePole.textColor = 0xDC470D;
        // Dodanie naszego pola tekstowego do sceny
        flash.Lib.current.addChild(wesolePole);
    }
}

Jak widzimy, kod haXe jest bardzo podobny do ActionScripta3. Oczywiście różnice istnieją, jako że haXe jest językiem na trochę wyższym poziomie. Również programujący w Javie powinni bardzo szybko się z nim oswoić. Jak już zaznaczyłem w kodzie, biblioteki Flasha w haXe są przeniesione z stuprocentową zgodnością z oryginalnym API Flasha.
Kolejną rzeczą, jaką musimy się zająć, jest plik compile.hxml. Wpiszmy do niego poniższy kod:

-main Hello
-swf-version 9
-swf-header 400:200:30
-swf hello.swf

Jak łatwo się domyśleć, pierwsza linijka wskazuje na moduł poddany kompilacji, czyli plik Hello.hx. Następne 3 linijki opisują kolejno: wersję Flash Playera, dla której będzie kompilowany plik swf (w naszym przypadku FlashPlayer9), parametry aplikacji Flasha (u nas to rozmiar 400px na 200px i 30 kl./sek.). Na końcu znajduje się nazwa pliku docelowego, do którego zostanie umieszczony wygenerowany Flash-owy bytecode dla FlashPlayera.

Jesteśmy gotowi do kompilacji! Wpisujemy w konsoli:

% haxe compile.hxml

Jeżeli nie zobaczyliśmy żadnego komunikatu świadczącego o błędzie w kodzie, to kompilacja zakończyła się sukcesem. W folderze zawierającym naszą pierwszą aplikację powinien pojawić się nowy plik o nazwie hello.swf. Otwieramy go przeglądarką bądź samym Flash Playerem i podziwiamy nasze dzieło:

HaxeHelloWorld

To by było na tyle. Jak widać stworzenie czegoś w haXe jest bardzo proste i zachęcające do eksperymentowania. Polecam otworzyć sobie oficjalną dokumentację Flasha i pobawić się z naszą pierwszą aplikacją - bądźcie kreatywni! :)

W kolejnych wpisach postaram się szerzej opisać cechy języka haXe oraz naskrobać coś o kompilacji do PHP. Powyższy poradnik został napisany z myślą o kompletnie nie znających haXe. Komentarze w stylu "tutorial napisany jak dla debili" proszę zachować dla siebie.

haXe - naprawdę taki nieprzydatny?

30 września 2009, 18:26:25

Ponieważ w komentarzach do poprzedniego wpisu oraz w rozmowach prywatnych ludzie krytykowali haXe jako "język bez sensu", postanowiłem naskrobać kolejny wpis o haXe, który w sumie powinien powstać już dawno temu.

Według mnie, większość ludzi sceptycznie podchodzi do tego języka, za sprawą pierwszego wrażenia w stylu "haXe, czyli pisz w jednym języku, tłumacz to na wiele - to nie może być dobre". Prawda, we wprowadzeniu do języka na oficjalnej stronie faktycznie to co użytkownik widzi, to informacja o możliwości deploymentu kodu na wiele różnych platform, a pod spodem ich lista. Zgadzam się że transkrypcja kodu z jednego języka do innego np. do PHP czy JavaScript mija się z celem. Dlaczego więc uważam ten język za przydatny? Ano dlatego, że jego użyteczność tkwi w kompilacji do dwóch maszyn wirtualnych - Flash Player i Neko VM. Kiedy mówię 'kompilacji', nie mówię 'transkrypcji' jak to ma się w przypadku haXe -> PHP czy haXe -> JS, tylko prawdziwej kompilacji do bytecodu, rewelacyjnym OCaml-owym kompilatorem.

Przykładem mogącym potwierdzić przydatność tego rozwiązania mogą być strony firmy Motion-Twin, gdzie całe projekty stron, flash + neko, są zapisane jako jeden projekt, co dodaje pracy teamowej dodatkowej skalowalności. Kolejna ważną zaletą jest to, że kompilator haxe->flash jest, według autora, wykonany lepiej niż oryginalny kompilator Adobe, za sprawą optymalizacji poszczególnych funkcji, dzięki czemu wynikowe aplikacje flashowe są w jakimś stopniu szybsze. A jeśli ktoś twierdzi, że koszt przejścia na haXe jest zbyt duży w stosunku do zysku, pragnę poinformować, że API flasha <9 i flasha >=9 jest idealnie przeniesione i znając już AS2/AS3 jesteśmy w stanie bardzo szybko zacząć wykonywać dowolne, nawet skomplikowane aplikacje. Wszystko przygotowane do developmentu na Windowsie, Linuxie i MacOSX-ie.

Myślę że powyższy wpis choć w pewnym stopniu przekonuje sceptyków o przydatności tego całkiem ciekawego i według mnie użytecznego języka.

Linux i HAXE - jaki edytor?

18 sierpnia 2009, 19:28:11

Oryginalna data utworzenia postu: 24 czerwca 2009 (re-postowany z poprzedniego blogu)

Jako że niedawno zacząłem eksperymentować z dość nieznanym jeszcze językiem HAXE (http://haxe.org), automatycznie pojawił się u mnie temat, w czym pisać kod pod Linusem?

Na systemie Windows wybór jest prosty - FlashDevelop, dobrze działające a przy okazji lekkie narzędzie napisane na platformę .NET z natywnym wsparciem dla HAXE, które polubiłem od pierwszego dnia użytkowania. Niestety problem pojawia się przy wyborze edytora HAXE przechodząc na system Linux.

Na oficjalnej stronie HAXE istnieje spory spis aplikacji i pluginów do edycji plików z rozszerzeniem .hx. Patrząc na niego, wydaje się, że mamy całą paletę wyborów naszego środowiska do pisania w tym języku, jednak jest to złudne przeświadczenie - wiele z odnośników prowadzi do nieistniejących stron bądź do stron zamkniętych już projektów.

Do wyboru tak naprawdę mamy: Vim, Editra, Eclipse, Emacs oraz GEdit.

Vim - Dla wielu programistów prawdopodobnie będzie to naturalny wybór, do dyspozycji mamy 2 pliki umożliwiające rozpoznawanie składni HAXE dostępne tu i tu.

Editra - Wieloplatformowe IDE z wsparciem dla HAXE, jeszcze dość wczesna wersja, na razie jedyne co potrafi w związku z HAXE to rozpoznawać składnie plików w formacie hx.

Eclipse - Tego IDE raczej nie trzeba przedstawiać. Kiedy po raz pierwszy widziałem spis programów, od razu postanowiłem, że jeśli uda mi się zmusić Eclipsa do pracy z HAXE, to właśnie on będzie moim wybrańcem. Jednak jakże się rozczarowałem, odkrywając, że z dwóch dedykowanych pluginów, pierwszy, EHX, jest już zamknięty i praktycznie niedostępny, a drugi, eclihx, na dzień dzisiejszy jest tylko bazą do powstania przydatnego pluginu dla Eclipsa i nie wnosi on praktycznie żadnych udogodnień. Miejmy nadzieję że autorzy eclihx'a szybko rozwiną kod swojego pluginu i udostępnią zaawansowane możliwości Eclipsa programistom HAXE.

Emacs - Równie popularny edytor pod Pingwinkiem co Vim, posiada swój plik dający mu możliwość rozpoznawania składni plików hx i integrujący go z kompilatorem HAXE. Plik ten znajduje się tu.

GEdit - Domyślny edytor tekstu dla Gnome desktop, w porównaniu do wyżej wymienionych edytorów/IDE jest dość skromnym programikiem. Jednak co mnie zaskoczyło, jest dość dobrym edytorem dla HAXE! :D A to za sprawą pluginu dostępnego tu, dającego funkcję rozpoznawania składni plików hx oraz autocompleting zgodny z najnowszym API HAXE. Razem z paroma innymi uniwersalnymi pluginami można zmienić GEdita w bardzo wygodne środowisko do pisania programów w HAXE.

Podsumowując, według mnie, GEdit jest na dzień dzisiejszy najlepszym wyborem dla chcących wygodnie programować w HAXE pod Linuksem. Nie zniechęcam jednak do innych rozwiązań, oczywistym jest, że ludzie przyzwyczajeni do obsługi Vima czy Emacsa, będą raczej i powinni używać tych programów.

Na koniec, dodam, że pomimo tych wszystkich rozwiązań, prawda jednak jest dość bolesna. Na dzień dzisiejszy, na Linuksa niestety nie ma godnego zamiennika dla świetnego Windowsowego FlashDevelopa, który niestety, pomimo moich wysiłków, nie zachciał się uruchomić na Wine w stopniu umożliwiającym jego użytkowanie. Pewnie niedługo, kiedy (o ile w ogóle) HAXE stanie się bardziej znaczącym językiem, Linux dostanie lepsze narzędzia. Również twórcy FlashDevelopa powoli pracują nad wersją dla mono, dzięki której będzie on działał pod systemem spod znaku pingwinka. Nic tylko czekać! :D