10 Kwi

Trochę rozmyślań. Programowanie urządzeń mobilnych. Czy Xamarin to jest to ?

Upłynęło bardzo dużo czasu od ostatniego wpisu na tym blogu. Częściowo z braku pomysłów na kolejne posty, a częściowo z braku czasu.
Ze względu na „branżę”, w której pracuję i dla której tworzę oprogramowanie w zasadzie wszystkie projekty, którymi się zajmuję, to aplikacje które można określić jako desktopowe.
W większości przypadków są to albo aplikacje stricte rejestrująco/wizualizacyjno/sterujące dla różnego rodzaju maszyn i linii produkcyjnych, ale również różnego rodzaju aplikacje „na styku” pomiędzy dużymi systemami ERP i MES związane z przesyłaniem danych i konfiguracją maszyn lub linii. Sporo kodu, który piszę jest więc dużo „bliżej blachy”, niż projekty większości programistów.
Jakiś czas temu usunąłem z goldenline i linkedin informacje o technologiach webowych, o których mam pojęcie. Prawda jest taka (o czym z pewnością wszyscy wiedzą), że w dzisiejszych czasach nie da się już być programistą zupełnie wszechstronnym. Rozwój w poszczególnych technologiach następuje w tak szybkim tempie, że ilość różnych rozwiązań, frameworków itp. jest tak kosmiczna, że mając do dyspozycji 24h dobę (z czego kilka godzin i tak odpada na sen) nie da się za tym nadążyć. Nie mówiąc już o różnych „good development practice”, które są zwykle dla danej technologii charakterystyczne. Kłamstwem było więc wpisywanie w umiejętnościach programowania w PHP i Javascript, skoro nie uskuteczniam już tego od conajmniej kilku lat. Nawet opierając się na jednym rozwiązaniu (w moim przypadku .Net) praktycznie nie ma możliwości ogarnięcia wszystkiego. Szczerze mówiąc o ASP.Net i stricte webowych technologiach .Net mam jedynie blade pojęcie.

Tak naprawdę poza oprogramowaniem dla automatyki (którym się zajmuję) nie bardzo widzę przyszłość przed programowaniem aplikacji desktopowych. No może poza bardzo dedykowanym oprogramowaniem związanym z obróbką dźwięku czy grafiki – ale tutaj też następuje trend przenoszenia wszystkiego w chmurę. Moja biegłość w tworzeniu aplikacji webowych skończyła się tak naprawdę parę lat temu i zatrzymała na etapie PHP i wczesnego AJAX. Jakkolwiek na tamte czasy było to wmiarę dochodowe zajęcia (jak na studenta) to nigdy nie było to coś, co bardzo chciałbym robić a PHP jest tak koszmarnym językiem, że wolałem chyba starego QBasic-a w DOS.
Coraz częściej zastanawiam się nad pewną dyfersyfikacją umiejętności i zainwestowaniem czasu w naukę czegoś, co jest perspektywiczne i być może bardziej skorelowane z tym co potencjalnie w przyszłości będzie bardziej pożądane przez klientów (bo przecież jakby na to nie patrzyć, jako programiści tworzymy produkty które chcemy sprzedać).

Od dłuższego czasu w kręgu moich zainteresować jest programowanie dla urządzeń mobilnych oraz IoT. Przymierzałem się już (bezskutecznie) do różnych technologii, głównie pod kątem Androida.
Android Studio i Java są dla mnie nie do strawienia. Samo środowisko jest koszmarnie „ciężkie” a Gradle, który bez przerwy coś dziwnego robi w tle jest dla mnie nie zrozumiały. Java nigdy nie była moim „language of choice” i szczerze mówiąc po długiej walce z napisaniem pierwszego „pet project” zwyczajnie odpuściłem.
Technologie opierające się na HTML i Javascript a następnie kompilowane do postaci aplikacji mobilnej mnie zdecydowanie nie interesują.
Pewnym objawieniem wydawało się Haxe. Świetny obiektowy, multiplaformowy język, który jednak w przypadku urządzeń mobilnych nadaje się bardziej do pisania gier (co jest świetną zabawą, istnieje wiele doskonałych bibliotek bardzo ułatwiających to zadanie) niż aplikacji, które komunikowały by się np. z innymi urządzeniami za pomocą sieci czy bluetooth.
Bardzo duże nadzieje wiązałem z produktem AnywhereSoftware pod nazwą Basic 4 Android. Świetne IDE, doskonały symulator, bardzo duża prostota kodowania, dodatkowo osobne środowisko z niemal w 100% przenoszalnym kodem dla iOS. Nie mniej jednak to nadal jest konstrukcyjnie i składniowo dialekt VisualBasic z wszystkimi zaletami tego języka dla amatorów i wszystkimi wadami związanymi z brakiem zaawansowanej obiektowości.

Wiadomość ostatniego tygodnia to „uwolnienie” przez Microsoft nabytego niedawno Xamarina. Xamarin podobał mi się bardzo od dawna, ale był zdecydowanie zbyt drogi, żeby kupić sobie prywatną licencję do zabawy. Wersja darmowa zaś była bardzo ograniczona. W tej chwili pełną wersję Xamarin-a można pobrać zupełnie za darmo i doskonale współpracuje ona z Visual Studio Community. Co więcej, w związku z tym, że Xamarin jest w tej chwili open source jest szansa, że ten projekt (pod parasolem Microsoft) będzie się dynamicznie rozwijał.

Od tego momentu, ten blog będę wykorzystywał do dokumentowania mojej nauki tworzenia aplikacji mobilnych z wykorzystaniem Xamarin. Nie zamierzam jednak wrzucać tu postów „jak napisać hello world i odpalić na moim telefonie” ale mam nadzieję rzeczy dużo bardziej ciekawych związanych z explorowaniem tych rozwiązań. Wspomniałem wcześniej nie bez powodu o IoT. Mam pewien pomysł na prościutkie urządzenie (w zasadzie związane z branżą), które chcę zaprojektować na początku na bazie Arduino a współpracujące z aplikacją mobilną. Uczyć się przecież trzeba zawsze w praktyce stawiając sobie możliwie ambitne cele – mając nadzieję, że przyniesie to wymierny skutek.

16 Paź

pgModeler

Postgresql Database Modeler jest bardzo ciekawym, wieloplatformowym (Win, Linux, MacOS)  narzędziem Open Source, na które trafiłem jakiś czas temu. Program jest nadal w wersji rozwojowej i jego autor intensywnie nad nim pracuje, dodając wciąż nowe funkcje.

pgModeler – w dużym skrócie – pozwala na wizualne zaprojektowanie tabel i relacji oraz wyeksportowanie ich do bazy, lub też zaimportowanie całej struktury i relacji z istniejącej bazy i oczywiście ich wizualną reprezentację oraz modyfikacje.

Narzędzie jest niezwykle wygodne i używam go w pracy bardzo często. Poza trybem modelowania mamy również dostępną konsolę SQL – a w ostatniej wersji (czego jeszcze nie testowałem) dodano również możliwość edycji danych w formie tabelowej.

pgModeler ma szanse być zdecydowanie lepszym narzędziem niż pgAdmin, do którego praktycznie jesteśmy ograniczeni wykonując operacje na bazie Postgres. Obecna wersja jest już na tyle dobra i stabilna, że w moim przypadku pgAdmin praktycznie wyszedł z użycia.

Program oparty jest na licencji GNU i można go sobie skompilować ze źródeł (napisany jest za pomocą tandemu Qt + C++)  – lub,  za symboliczną kwotę $6.60, wykupić roczną subskrypcję na wszystkie pojawiające się w tym czasie wersje w formie instalatora na wybraną platformę.

16 Paź

Basic 4 Android

Programowanie urządzeń mobilnych interesuje mnie już od dość dawna. W obecnej sytuacji na rynku, o czym chyba każdy doskonale wie, dominują iOS i Android – z czego właśnie ten drugi interesuje mnie zdecydowanie bardziej.
Niestety, z Javą nie lubimy się zbytnio i poza krótkim epizodem na studiach nigdy nie używałem specjalnie tego języka. Przygodę z programowaniem na Androida zacząłem jednak właśnie od Javy i … szybko porzuciłem. I nie chodzi tu o samą składnię i strukturę języka tylko o model programowania proponowany przez Google. Sporo się trzeba nawalczyć, żeby napisać nawet najprostszy program (nie mając wcześniej
doświadczenia w tym temacie) a przyciężkie Eclipse, jeszcze gorszy Android Studio i koszmarnie działający emulator wcale w tym nie pomagają.
Spędziłem trochę czasu wykonując research i przyglądając się rozwiązaniom takim jak Xamarin, Qt dla Androida itp. (aplikacje Javascript + Html5 odrzuciłem w zasadzie od razu, gdyż projekty które chciałbym realizować nie mają w założeniu opierać się jedynie na ładnym GUI i interakcją z usługami webowymi) i tak przypadkiem trafiłem na produktAnywhere Software pod nazwą Basic 4 Android.

Basic 4 Android (b4a) jest swego rodzaju dialektem visual basica, ale nie tego którego znamy obecnie z produktów Microsoft (.Net) ale raczej VB6. Kod napisany w b4a jest następnie konwertowany do Javy i kompilowany. Takie rozwiązanie powoduje, że na urządzeniu docelowym nie potrzebujemy żadnych dodatkowych maszyn wirtualnych czy sporych rozmiarów bibliotek runtime – otrzymujemy rozwiązanie w zasadzie natywne. Dla przykładu – prosta aplikacja w stylu hello world przygotowana za pomocą Xamarina w postaci apk to ok 0,9Mb natomiast identyczna przygotowana za pomocą b4a to niecałe 0,2Mb. O różnicy w wydajności trudno mi się na tę chwilę wypowiedzieć, nie napisałem jeszcze żadnego złożonego softu drenującego zasoby urządzenia.

B4a w wersji testowej możemy pobrać za darmo ze strony Anywhere Software tutaj. W wersji testowej nie mamy możliwości dołączania żadnych dodatkowych bibliotek, w związku z tym poza jakimś bardziej złożonym kalkulatorem i prostą zabawą z GUI nie będziemy w stanie stworzyć niczego ciekawego, można natomiast zaznajomić się z funkcjonalnością IDE, doskonałego Debuggera i filozofią tego softu. Wersja pełna (mówię tu o wersji Enterprise) to na chwilę obecną 119$. W cenę wchodzi soft, dostęp do forum i bibliotek oraz dwuletni support (a więc także download wszystkich nowych wersji, które się przez ten czas pojawią). Bardzo często zdarzają się też różnego rodzaju promocje – mnie udało się kupić pełną wersję za 50% ceny. Kwota jest wręcz śmieszna biorąc pod uwagę cenę innych, mniej lub bardziej podobnych rozwiązań.

Jeżeli czyta to teraz ktoś, kto pisze androidowy soft w javie stuka się pewnie w głowę – po co płacić za coś, co można mieć za darmo ? Postaram się w skrócie opowiedzieć dlaczego uważam, że warto kupić ten soft i wydać na niego (co prawda nie duże, ale zawsze) pieniądze.

1. IDE – jest bardzo proste i lekkie. Daleko mu do ogromnej ilości opcji znanej z Eclipse czy Visual Studio. Dzięki temu działa szybko i wydajnie a czas potrzebny na jego opanowanie jest bardzo krótki. Jest też całkiem fajnie działający odpowiednik IntelliSense.

2. Designer – jest również bardzo prosty. Nie znajdziemy tu renderowanej grafiki a jedynie figury geometryczne reprezentujące komponenty, które możemy rozmieścić na formie i poustawiać im różne parametry. Prawdziwa moc designera objawia się, gdy połączymy się z urządzeniem (za pomocą b4a_bridge – do pobrania z google play) za pomocą bluetooth lub WiFi (tak tak, podłączanie urządzenia kabelkiem USB do kompa jest zbędne zarówno w procesie projektowania jak i debugowania i testowania programu na urządzeniu) – kontrolki na wybranej formie, wyświetlane już natywnie, możemy na urządzeniu dowolnie przesuwać, zmieniać rozmiar itp. Możemy również edytować figurki na ekranie kompa a efekt edycji obserwować na urządzeniu. Nie ma również konieczności przygotowywania ekranów w różnych rozdzielczościach (co jest plagą w świecie Android-a) – uporządkowanie i rozmiary elementów w zależności od rozdzielczości można opisać za pomocą bardzo prostych skryptów definiowanych w designerze.

3. Debugger – jest doskonale rozwiązany. Szczególnie fajna jest opcja rapid debugging. Oczywiście istnieje możliwość podglądania stanu zmiennych, ustawiania breakpointów itp. jednak rapid debugging idzie o krok dalej – możemy zmieniać kod aplikacji „w locie” i obserwować efekty bez konieczności ponownego ładowania całości aplikacji do urządzenia.

4. Biblioteki – są biblioteki praktycznie do każdego z aspektów programowania mobilnego. W większości są to wrappery bibliotek Java ale jest też sporo napisanych już w samym b4a. Ciągle powstaje też coś nowego. Istnieje oczywiście możliwość przygotowania własnej biblioteki czy to napisanej w b4a czy też przygotowania wrappera biblioteki java (temat szeroko dyskutowany i opisywany na forum)

5. Community – bardzo liczne i bardzo aktywne. Ogromna ilość ludzi aktywnie uczestniczy w projekcie przygotowując nowe biblioteki czy chociażby zgłaszając uwagi. Forum jest bardzo żywe i nie ma problemu z uzyskaniem pomocy. W więszkości przypadków prosty search tematów na forum pozwala znaleźć odpowiedź na nurtujące pytanie. Bardzo aktywnie w życiu forum uczestniczy również sam autor projektu i szef Anywhere Software – Erel Uziel

Czy widzę jakieś wady ? Owszem widzę, o nich też napiszę. Projekt jednak cały czas aktywnie się rozwija i być może to o czym napiszę szybko się zdezaktualizuje.

1. Język – VB6 nie jest językiem z którym miałem dużo do czynienia. Na codzień korzystam głównie z C# i czasami VB.Net i niestety ten język różni się od nich. Przede wszystkim brakuje mi zaawansowanej obiektowości. Co prawda mamy klasy, obiekty, mechanizm dziedziczenia itp. ale należy zapomnieć o dobrodziejstwach .Net takich jak chociażby interfejsy i klasy abstrakcyjne (tzn. jest to do obejścia stosując sam zaimplementowany polimorfizm – ale mimo wszystko). Brakuje też np. możliwości prostego utworzenia zdarzeń. Pewnie znalazło by się jeszcze dużo takich braków – ale być może założenie jest takie, że przede wszystkim ma być prosto – a zaawansowany programista jakoś sobie poradzi wymyślając różnego rodzaju workarounds.

2. Testy jednostkowe – po prostu nie istnieją. Nie ma żadnego frameworka ani runnera. Możliwość przygotowania takowych też jest ograniczona, gdyż kod nie jest uruchamiany na komputerze a tzw. wstępna kompilacja to jedynie jakiś tam prosty parser, którego rolą jest sprawdzić składnię i wychwycić najprostsze błędy. Pewną nadzieję budzi mechanizm rapid debugger, gdyż jak mi się wydaje uruchamia on równolegle kod na komputerze i urządzeniu – nie mniej jednak, wydaje się że przygotowanie mechanizmu do przeprowadzania testów jednostkowych nie jest w tej chwili priorytetem autora.

Poza b4a, zupełnie za darmo, możemy ściągnąć sobie inny projekt Anywhere Software, który nazywa się b4j (basic for java) i jak sama nazwa wskazuje – generuje nam aplikację Java na podstawie kodu napisanego w basicu. Możemy również tutaj stworzyć sobie jakieś tam GUI dla swojej aplikacji wykorzystując designer JavaFX.

Nowością ostatniego miesiąca jest także b4i dla iOS, który nie jest jeszcze dostępny w jakiejkolwiek wersji testowej, ale jest rozwijany czego dowodem jest ten film.

Podsumowując. Polecam spróbować. Nawet jeżeli nie jesteś zainteresowany programowaniem mobilnym, nawet jeżeli nie lubisz basic-a. Przygotowanie prostej aplikacji i odpalenie jej na swoim urządzeniu to naprawdę moment i wtedy może (tak jak u mnie) zapali się żarówka – jak duże możliwości ma ten soft i jak stosunkowo (przynajmniej tak mi się na chwilę obecną wydaje) niewielka learn curve jest potrzebna, żeby realizować swoje projekty.

Swoje postępy w nauce b4a (o ile czas na to pozwoli) będę dokumentował w postaci projektów na GitHub. Wszystkich zainteresowanych zapraszam do pobierania i wymiany zdań.

16 Paź

The Art of Unit Testing & TDD Master Class in .NET – moje wrażenia

Zgodnie z zapowiedzią z ostatniego postu podzielę się wrażeniami z kursu.

Na chwilę obecną promocja się skończyła i w/w kurs zamiast wcześniejszych 25$ kosztuje 129$ (sic!).

Kurs składa się ze zbioru nagranych szkoleń prowadzonych przez Roy’a dla jednej z firm oraz z kilku filmów będących nagraniami bez „publiczności”. Tematycznie i chronologicznie kurs pokrywa się z materiałem z rewelacyjnej książki Roy’a „The art of unit testing” – wszystko co zobaczymy na nagraniach to właśnie nieco okrojony materiał z książki uzupełniony o interakcję ze słuchaczami (zadającymi często całkiem ciekawe pytania) i kodzenie „na żywo”.

Kurs jest fajnym suplementem do książki (jeżeli się ją posiada) i całkiem nieźle sprawdzi się jako „utrwalacz” wiedzy – chociaż nie pisząc samemu testów i nie próbując metodyk i rozwiązań zaproponowanych przez Roy’a trudno powiedzieć, że się tą wiedzę przyswoiło. Nie wyobrażam sobie natomiast, aby sam kurs potraktować jako jedyne źródło wiedzy na temat testów i TDD w .Net.

Podsumowując. Czy warto skorzystać z tego kursu ? IMO przy jego obecnej cenie zdecydowanie lepiej kupić książkę Roy’a (kupując wersję papierową, dostajemy również od wydawnictwa Manning wersję elektroniczną). Natomiast jeżeli książkę już się posiada – to przy kolejnej promocji kurs zdecydowanie polecam jako suplement – przy obecnej cenie jest zdecydowanie zbyt drogi w stosunku do wartości, którą ze sobą niesie.

16 Paź

Promocja u Roy’a Osherove

Wczoraj na Twitterze Roy ogłosił promocję na kursy online, które oferuje na swojej stronie. Promocja jest dość konkretna – większość kursów kosztujących wcześniej 99$ obecnie kosztuje 25$. Jakiś czas temu kupiłem książkę Roy’a „The art of unit testing”, którą uważam za doskonały podręcznik do nauki tworzenia i stosowania testów jednostkowych.

Ja skusiłem się na kursy „Unit Testing and TDD” oraz „Legacy Code Hero” – jak skończę oglądać, podzielę się wrażeniami.

Link do strony z kursami: http://courses.osherove.com/