Programowanie funkcyjne w Javie.

Co nieco o programowaniu funkcyjnym.

Czy możliwe jest całkowite usunięcie ze swojego kodu wyrażeń typu if / else, for, while, do while? Wydaje się to niemożliwe, bo wielu programistów nauczyło się, że podejmowanie decyzji to podstawowy element budowania każdego programu.

Wraz z wydaniem Javy 8 pojawiło się nieco funkcjonalności funkcyjnych i jeśli programujesz w tym języku, zapewne znasz interfejsy z pakietu java.util.function takie jak choćby: Function, Supplier, czy Consumer.

Aby obsłużyć dane opcjonalne, wprowadzono w Javie 8 klasę Optional. Ale jak można byłoby ją zaimplementować lepiej?

Czytaj dalej

Fundamenty języka Java

Niecały miesiąc temu zostałem poproszony przez Strefę Kursów o ocenę ich nowo wydanego materiału dla osób chcących zacząć naukę programowania w Javie: „Fundamenty języka Java„. Przerobiłem go kilka dni temu i dziś zapraszam do przeczytania recenzji.

Spis treści całego kursu jest dostępny tutaj, a trwa on aż ponad 12 godzin.

Czytaj dalej

Bielsko-Biała JUG #4, Jarosław Pałka – JIT me baby one more time.

Wczoraj odbyło się czwarte spotkanie Bielsko-Bialskiej grupy miłośników Javy i programowania (Bielsko-Biała JUG). Tym razem prelekcję przygotował dla nas Jaroslaw Palka – od ponad 15 lat w branży IT, jako administrator baz danych, programista, architekt, manager i „inżynier od spraw katastrof”. Niepokorny wyznawca kościoła JVM, badacz bytecode’u i JIT oraz wszelkiej maści parserów, interpeterów i kompilatorów.
Od czasu do czasu Jarka można wysłuchać na polskich konferencjach. W wolnych chwilach trener w http://symentis.pl i autor bloga nahttp://geekyprimitives.wordpress.com/ oraz samozwańczy dyktator w radach programowych konferencji JDD oraz 4Developers. Obecnie ekspert w Allegro.

jpalka2 Czytaj dalej

Java JNA #2, Total Commander

totalcmdW poprzednim wpisie zrobiłem krótkie wprowadzenie do wykorzystywania biblioteki user32.dll przez Javę do pobierania informacji z innych aplikacji okienkowych. Poniżej rozszerzymy nasze klasy o możliwość pobierania dowolnie zagnieżdżonych komponentów za pomocą funkcji rekurencyjnej przeszukującej całe drzewo elementów. Wszystko na przykładzie Total Commandera.

Czytaj dalej

Java JNA, user32.dll – przechwytujemy aplikacje okienkowe

lib-dll-javaZdarzają się takie sytuacje, że chcielibyśmy naszym programem sterować inną aplikacją okienkową. W tym artykule wprowadzę was w temat pobierania danych z programów windowsowych za pomocą funkcji biblioteki user32.dll wywoływanych z poziomu Javy. W Javie możemy wywoływać natywny kod z bibliotek DLL w dosyć łatwy sposób dzięki JNA – Java Native Access.

Czytaj dalej

Java Spring, recenzja kursu wideo z Videopoint.pl

vsprku_smallKażdy, kto zawodowo programuje w obojętnie jakim języku wie, że bez wsparcia frameworków nasze życie byłoby znacznie trudniejsze. Tak jak Python ma swojego Django, PHP – Symfony, czy Ruby Railsa, tak w Javie bez znajomości Springa ciężko będzie znaleźć komukolwiek zatrudnienie. Praktycznie w każdej ofercie pracy dla osób programujących w Javie, wśród wymagań znajdziemy znajomość frameworka Spring.

Poniżej krótko zrecenzuję kurs wideo „Spring. Kurs video. Poziom pierwszy. Prosty sposób na zaawansowane aplikacje w Javie” dostępny na Videopoint.pl, ale na początek kilka słów o samym Springu.

Czytaj dalej

Java i listing wszystkich plików w katalogu

directoryW ostatnim czasie musiałem przerobić jeden z systemów na wersję wielojęzykową. Chodziło dokładnie o to, aby wszystkie Stringi zostały wywołane przez tzw. wrapper ze wstrzyknięciem pewnego kontekstu (Locale, kategoria grupująca, czy parametry).

Np. jeśli w kodzie był fragment:

to został przerobiony na coś takiego:

lub coś takiego:

Typowy przykład Buildera z przeciążoną metodą toString() wykonującą translację. Taki wrapper wykonuje wyszukanie tekstu już zapisanego w systemie (czy to w bazie, czy w plikach), a jeśli nie istnieje – dopisuje go. W ten sposób zostają zdefiniowane szablony tekstów w ustalonym źródłowym języku i w celu dodania nowej wersji językowej, należy przypisać do każdego z nich odpowiednie tłumaczenie. System zaś z kontekstu użytkownika wybierze odpowiednie Locale i przypisze odpowiednią wersję.

Ale w zasadzie nie kwestię samych tłumaczeń chciałem tu poruszyć, a to co wymagało żmudnej pracy po finalnej refaktoryzacji kodu. Należało wyszukać wszystkie szablony i zapisać je. Problem w tym, że zmodyfikowanych plików źródłowych .java było mnóstwo, w różnych podkatalogach. Ze względu na to, że konieczne było wyciąganie dodatkowych zmiennych javy w źródłach (patrz zmienna category), postanowiłem zrobić proste narzędzie napisane również w javie wyszukujące wszystkie pliki z rozszerzeniem .java, a z nich wszystkie wywołania metody I18n.begin.

Czytaj dalej

10-letni chłopak zdobył 100% na egzaminie OCPJP z Javy!

ronil-shah-java-exam

W zeszłym roku Ronil Shah zaskoczył prawie wszystkich zdobywając sto procent punktów w egzaminie z Javy OCPJP. Jednak to nie wszystko. Najciekawsze jest to, że egzamin ten przewidziany jest na ponad dwie godziny, podczas gdy on zakończył go już po 18 minutach! Mało kto z doświadczonych, pracujących wiele lat w zawodzie programistów może pochwalić się takim wynikiem, już nie wspominając o tak szybkim poradzeniem sobie z dość podchwytliwymi pytaniami.

Dodam, że na zdanie egzaminu OCPJP (dawniej SCJP) w celu otrzymania certyfikatu, decydują się przeważnie doświadczeni programiści.

Czytaj dalej

Koniec z appletami Javy

java-logoPod koniec zeszłego roku wielu producentów przeglądarek usunęło lub zaplanowało usunięcie wsparcia dla wtyczek NPAPI. NPAPI to API do tworzenia wtyczek w przeglądarkach internetowych, które wykorzystywane było w Mozilla Application Suite, Mozilla Firefox, Google Chrome, Safari, Opera, Konqueror i niektórych wersjach Internet Explorer. Dzięki NPAPI mogliśmy uruchamiać na naszych stronach applety Javy czy np. wyświetlać multimedialne treści przez MS Silverlight (jeśli dobrze pamiętam wykorzystywane chyba np. w tvn playerze).

Pod koniec zeszłego roku przeglądarki Chrome, Opera i MS Edge zablokowały możliwość uruchamiania appletów Javy za pomocą pluginu NPAPI. Firefox zrobi to samo pod koniec tego roku. W związku z tym Oracle nie miało wyjścia – tydzień temu ogłosili, że od wersji JDK 9 wtyczka dla Javy przestanie być rozwijana, a w późniejszych wydaniach zostanie całkowicie usunięta z JDK i JRE.

Czytaj dalej

Termotransferowa drukarka etykiet Zebra P4T

zebraW ostatnim czasie pracowałem nad systemem dla dużej amerykańskiej firmy, który miał usprawnić zarządzanie zleceniami dla operatorów wózków widłowych w magazynie.
Importujemy dane pochodzące z zewnętrznego systemu ERP, pracownik korzystający ze stanowiska komputerowego na hali magazynowej rozdysponowuje poszczególne zadania, a operatorzy wózków na bieżąco mają podgląd aktualnych kursów do wykonania na przenośnym mini komputerze / czytniku kodów kreskowych Intermec. Po zakończeniu całego procesu dla jednego zlecenia osoba je kompletująca drukuje etykietę za pomocą drukarki Zebra P4T. Główna część systemu po stronie serwera została napisana w Javie i uruchomiona na Tomcacie. Panel dla operatora na magazynie korzysta z AngularaJS i komunikuje się z serwerem za pomocą socket.io, zresztą podobnie jak panele na urządzenia mobilne Intermec.

Czytaj dalej