środa, 10 listopada 2010

Netbans 7.0 & NetCAT

Nie będzie Nebeans 6.10 - zamiast tego zdecydowano na zmianę numeracji i przyznanie zaszczytnego i szczęśliwego numeru 7.0 dla nowej wersji Netbeans. Zapewne dlatego, że nowe NB ma wspierać JDK7 - w ten sposób numerki się zgadzają ;) Spis nowości dostępny jest pod linkiem http://wiki.netbeans.org/NewAndNoteworthyNB610

Rozpoczął się też nowy program NetCAT dla Netbeans 7.0. Jeżeli ktoś ma chwilę wolnego czasu można się zapisać. Dla tych co nie wiedzą co to NetCAT: http://wiki.netbeans.org/NetCAT

Długo mnie nie było, ale porobiły się duże zmiany w moim życiu osobistym ;) i mam nadzieję pojawiać się teraz częściej.

środa, 15 września 2010

Zaczęły się prace nad nowym Netbeansem 6.10

Rozpoczęto "przymiarki" do wydania nowej wersji Netbeans oznaczonej numerem 6.10. W tej chwili dostępna jest już do ściągnięcia wersja Milstone 1. Nie ma dużych zmian, ale jest kilka ciekawych ułatwień, jak np. odpalenie w JUnit tylko nieudanych testow, wrzucono nowe wersje oprogramowania (JUnit, ant, GlassFish), dodano wsparcie dla WebLogica. Cała lista zmian pod:http://wiki.netbeans.org/NewAndNoteworthyNB610

wtorek, 10 sierpnia 2010

Pisanie testów w groovym i Netbeansie

Netbeans (nawet najnowszy 6.9.1) ma błąd, który "psuje" plik antowy jeżeli chcemy wrzucać klasy Grooviego do testów. Dostajemy na konsoli:

Compiling 1 source file to
/Users/piotrzalewski/NetBeansProjects/JavaApplication5/build/classes
compile:
/Users/piotrzalewski/NetBeansProjects/JavaApplication5/nbproject/build-impl.xml:725:
Unknown attributes [apgeneratedsrcdir, processorpath]
BUILD FAILED (total time: 5 seconds)

Zgłaszałem to jako buga na netbeans.org, został przypisany i trochę zignorowany :(. A szkoda, bo pisanie testów w Groovym jest łatwiejsze i wygodniejsze.

Postanowiłem więc mimo wsystko na tym posiedzieć i poszukać rozwiązania.
Są dwa problemy do rozwiązania:

  • 1. Nieścisłość w plikach anta.
  • 2. Wymuszenie kompilacji plików *.groovy przed testem i ich wykonanie w trakcie testu.

Dla piewszego problemu znalazłem japońskie rozwiązanie pod http://feather.cocolog-nifty.com/weblog/2010/06/netbeans69groov.html. Do pliku groovy-build.xml należy dodać definicje atrybutów:

<attribute default="${javac.processorpath}" name="processorpath"/>
            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
w sekcji makrodefinicji dla "javac".

Drugi problem był łatwiejszy i rozwiązanie w bardziej ludzkim języku: http://charliesquires.wordpress.com/2009/08/30/running-groovy-tests-in-netbeans-6-7-1/ Podany kod należy wkleić między tagi w build.xml:

<target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
        <j2seproject3:junit testincludes="**/*Test.class"/>
    </target>

    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="${javac.classpath}"/>
        <groovy>
            properties."test.includes.class" = properties."test.includes".split("\\.")[0] + ".class"
        </groovy>
        <j2seproject3:junit excludes="" includes="${test.includes.class}"/>
    </target>

    <target name="-init-macrodef-junit">
        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
            <attribute default="${includes}" name="includes"/>
            <attribute default="${excludes}" name="excludes"/>
            <attribute default="**" name="testincludes"/>
            <sequential>
                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true">
                    <batchtest todir="${build.test.results.dir}">
                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                            <filename name="@{testincludes}"/>
                        </fileset>
                    </batchtest>
                    <classpath>
                        <path path="${run.test.classpath}"/>
                    </classpath>
                    <syspropertyset>
                        <propertyref prefix="test-sys-prop."/>
                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
                    </syspropertyset>
                    <formatter type="brief" usefile="false"/>
                    <formatter type="xml"/>
                    <jvmarg line="${run.jvmargs}"/>
                </junit>
            </sequential>
        </macrodef>
    </target>
 
A w samym tagu project dodać:
xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3"

Uff - od razu łatwiej ;)

Kindle - internetowy tablet?

Z dużym zdziwieniem zaobserwowałem wczoraj, że mój Kindle bez problemu może wyświetlać strony www. Do tej pory w wersji International przeglądanie stron www było ograniczone do wikipedi (i to tylko mobilnej angielskiej) i sklepu Amazona. Bez problemu wszedłem na stronę swojego bloga, a także na mobilną (uproszczoną) wersje Gmaila.

Internet za darmo? Tak wygląda - bo za bezprzewodową łączność opartą na 3G nic się nie płaci. Kindle staje się bardzo ciekawym konkurentem dla brania laptopa na wakacje. Wady - przeglądarka Kindle jest bardzo uproszczona, nie wyświetla poprawnie wielu zaawansowanych styli css. Obsługa Javascriptu jakaś jest - ale fabrycznie jest wyłączona. Jednak wystarczające aby sprawdzić pocztę, jakieś informacje na blogach, czy gazetach w sieci.

poniedziałek, 26 lipca 2010

Nowy-stary Kindle

Nowa wersja softu zainstalowała się bezboleśnie. Nawet nie wiem kiedy. Wystarczyło zostawić czytnik z włączonym GSM, gdy spojrzałem po pewnym czasie dumnie wyświetlił mi, że ma wersje 2.5.2 softu.

Krótkie rozeznanie bojem nowych cech:

  • Zoomowanie PDF - można ustawić sobie powiększenie 150%, 200%, 300%, oraz to co bylo do tej pory czyli szerokość strony. Powiększony fragment możemy przesuwać skokowo, lub płynie (z naciśniętym shiftem). Niestety ponieważ nie jest to płynne zoomowanie, nie mogę tylko trochę powiększyć sobie aby zlikwidować marginesy w książce. Tu niestety jest to mało przydatne, gdyż najmniejsze powiększenie 150% powoduje, że czytając linijkę tekstu musimy przesuwać w bok wyświetlany fragment. Natomiast bardzo przydatne jest to w momencie gdy czytamy dwukolumnowe (lub wielokolumnowe) teksty np. gazety (JavaExpress ;) ), możemy spokojnie powiększyć sobie tylko ten fragment z kolumną tekstu, która cała będzie nam się mieściła na szerokość. Dzięki temu spokojnie będziemy czytali duże i wyraźne teksty.
  • Kolekcje - bardzo fajna funkcja która pozwala nam na posegregowanie naszych zbiorów ebooków. Każdy dokument może należeć do wielu kolekcji - więc jest to coś co wreszcie pozwoli mi znajdywać dokumenty szybko i sprawnie. Wystarczy na dokumencie dać strzałkę w prawo, a następnie "Add to Collection". Lub utworzyć kolekcję i wybrać książki które w niej się znajdą. Bardzo ładnie i sensownie zostało to zrobione, bez problemu można dodawać i usuwać.
  • Facebook i Twitter ;) - można się cytatami i komentarzami od razu dzielić z przyjaciółmi. Fajne - w dowolnym prawie miejscu mogę napisać komentarz na Facebooku za darmo ;) Aż, żałuję, że nie jestem fanem Facebooka ;). Sprawdziłem - działa całkiem sprawnie.
Innych rzeczy nie testowałem - czcionki większe są, ale są tak duże, że chyba nie potrzebne (może na DX-ie). Nie jestem w stanie stwierdzić czy czytelność czcionek jest lepsza, być może, lub może to tylko moja wyobraźnia.

sobota, 24 lipca 2010

Nowy soft dla mojego Kindelka

Amazon właśnie powiadomił właścicieli czytników Kindle o nowej wersji oprogramowania.
W nowej wersji mają być dostępne:
  • Kolekcje - możliwość przypisania swoich książek, audiobooków, etc do kolekcji. Jeżeli to jest to o czym myślę to jest to najbardziej wyczekiwana funkcja dla mnie. Do tej pory mimo,że książki można było wrzucać i segregować w różnych podkatalogach to ich listę czytnik wyświetlał zawsze "płasko" (nie hierarchicznie), bez podziałów na podkatalogi. Powodowało to, że miałem 5 stron różnych książek na liście i znalezienie konkretnej gdy nie pamiętałem tytułu było czasochłonne.
  • PDF Pan i Zoom - ooooo! to jest chyba druga opcja której mi brakowało, mam wiele pdf-ów i czytanie ich nie było tak wygodne, bo nie dało się powiększyć czcionki. Mam nadzieję, że teraz będzie lepiej.
  • Password protection - czyli można zażądać hasła przy wybudzaniu czytnika.
  • Dwa nowe duże fonty oraz poprawienie pozostałych aby były bardziej czytelne.
  • Możliwość umieszczania komentarzy na Twiterze i Facebooku - ja tam nie wiem ale boję się już zajrzeć do lodówki bo zobaczę tam znaczek Facebooka :)
  • Popularne cytaty - możliwość zobaczenia co inni zaznaczyli najciekawszego w kupowanych książkach - ciekawe może być przydatne przy ocenie nowych książek.

Włączyłem w swoim Kindle GSM i zobaczymy czy będzie się potrafił sam upgredować - jak narazie mam jeszcze soft 2.3 - oznaczenie nowego to 2.5.

Szczegóły i instrukcja instalacji pod: http://www.amazon.com/gp/help/customer/display.html/ref=pe_81240_16401580_hp_kswup_nav_autowire?nodeId=200324680

czwartek, 17 czerwca 2010

Netbeans 6.9 wydany

Po długich testach (od lutego) dostaliśmy nową wersję Netbeans o numerku 6.9.
Zmiany opisywałem przy okazji wydania pierwszej wersji (6.9M1).
W skrócie:
- netbeans będzie się uruchamiał już tylko dla Javy 6
- wsparcie dla OSGI - jak na razie dla mnie czarna magia ;)
- drobne poprawki dla PHP
- drobne poprawki edytora Javy
- drobne poprawki debugera Javy (np. możliwość grupowania breakpointów w grupy)
- dodano biblioteki dla Springa 3.0


Dodatkowo ulepszono edycje klas CSS - co może mi się bardzo przydać.


Pełna lista zmian:

http://wiki.netbeans.org/NewAndNoteWorthy#New_And_Noteworthy_in_NetBeans_6.9.

czwartek, 6 maja 2010

Groovy, Griffon i wybór IDE

Mam nowy nieduży projekt aplikacji standalone, postawiłem więc zapoznać się przy okazji z Griffonem. Griffon (http://griffon.codehaus.org/) jest frameworkiem (1) do pisania w Groovym aplikacji w Swingu. Ma ogromne wsparcie do pisania w sposób zgodny z MVC (wzorzec projektowy Model-View-Controler) - prawie się nie da zepsuć tego wzorca korzystając z Griffona :)

Zacząłem od wyboru IDE dla Groovego i na tym trochę utknąłem. Google zwraca sporo wyników, ale większość jest dość starych - a w technologi mocno rozwijającej się wszystko się zmienia z miesiąca na miesiąc. Ludzie byli dość zgodni, że jednym z najlepszych jest na pewno IntelliJ IDEA, ale niestety jest płatne. Zostałem z Eclipsem vs. Netbeans. Z tych dwóch Netbeans jest mi bardziej znane i chyba będzie łatwiejsze w użyciu - wsparcie dla groovego jest standardowo dostępne od wersji 6.7, a właśnie niedawno pokazała się wersja 6.9Beta. Jakby dla zupełnego przekonania mnie o tym pokazała się nowa wtyczka specjalnie dla Griffona (http://blogs.sun.com/geertjan/entry/griffon_and_netbeans_ide_61) - o ile mi wiadomo Eclipse nie dorobił się jeszcze wtyczki ułatwiającej prace z Griffonem.

Instalacja wtyczki jest prosta:

- pobrałem plik zip

- rozpakowałem

- w Netbeans wybrałem Tools->Plugins, zakładka Downloaded, przycisk Add Plugins i wskazałem oba pliki *.nbm.

- klik na Install i pierwszy problem - moja wersja 6.9Beta (na MacOSX) ma wbudowane pluginy do groovego z dnia 2010-04-20, a wtyczka do griffona wymaga ich z dnia 2010-04-21 - dziwna sprawa.

- spróbuję więc z Netbeans w wersji "night build" - w końcu w tej chwili do codziennych buildów trafiają chyba tylko poprawki do wersji Beta, więc nie powinno być.

- i niestety dostaję ten sam błąd - wygląda, że w pluginie jest wpisane na stałe jaką dokładnie wersje powinien mieć Groovy Support, nowsza też odpada - dla MacOs jest to niestety nie trafione. Wpisałem komentarz na strone autora - zobaczymy jutro.

I tak skończyła się na razie "łatwa instalacja" ;)

Sprawdziłem w domu na windowsie niestety także jest to wersja inna niż wymagana przez ten plugin. Wygląda na to, że na razie tylko na Linuxie działa ;) Dopisałem o windowsie i poczekam na reakcje autora.

(1) framework - zbiór blibliotek? ktoś proponował tłumaczenie "szkielet" które chyba jest najlepsze

środa, 14 kwietnia 2010

JDK 7 - nowości podsumowanie

Po ponad dwóch tygodniach i 4 postach zapoznawania się z JDK 7, mogę się wreszcie pokusić o podsumowanie. Nowe JDK nie wprowadza rewolucji, nie wrzuca dużo nowości, jednak będzie miało wiele fajnych cech które naprawdę się przydadzą. Pisząc ostatnio trochę kodu łapałem się na tym, że w danym momencie przydałaby się mi jedna czy druga funkcjonalność z JDK7. Warto chyba było się z tym zapoznać i warto czekać i śledzić rozwój JDK7. Kilka najważniejszych według mnie zmian:

  • Wygląda, że duży nacisk położono na systemy wielowątkowe
  • zarówno nowy garbage collector (G1), jak i kompresja 64bitowych wskaźników powinny przyśpieszyć wykonywanie programów w środowiskach 64bitowych i wielowątkowych.
  • Obiecująco wygląda obietnica wprowadzenia takich zmian do VM aby przyśpieszyć wykonywanie języków dynamicznych i skryptowych.
  • Modułowość
  • czyli superpackage, bardzo przydatna funkcja zwłaszcza z wykorzystaniem Project Jigsaw - dodaje sporo możliwości dla pisania bibliotek.
  • Małe zmiany w języku Java
  • - zwłaszcza uproszczona notacja dla kolekcji, oraz "automatyczne" zamykanie przez ASR - to są rzeczy które dla mnie bardzo uproszczą pisanie i "oczyszczą" kod.
  • Annotacje dla typów
  • - bardzo duże możliwości wykorzystania zwłaszcza przy sprawdzaniu jakiś warunków (validacji).
  • Domknięcia
  • - niesamowita możliwość i dobrze aby była w Javie, jednak nie wiadomo jeszcze czy wejdzie do JDK7.
  • Sporo poprawek dla rzeczy wprowadzonych na szybko dla JDK6u10
  • - dzięki temu dowiedziałem się, że JDK6u10 wprowadził sporo nowości które już teraz możemy używać.

I tyle na krótko. Po szczegóły odsyłam do poprzednich moich postów gdzie starałem się opisać szczegółowiej zmiany:

piątek, 9 kwietnia 2010

JDK 7 - nowości 4

Po przerwie świątecznej, wracamy do zapoznawania się z planowanymi nowościami w JDK7.
Dziś czas na zmiany w kliencie.

Klient

  • XRender pipeline for Java 2D
  • Dzięki temu Java2D będzie mogła lepiej wykorzystywać wsparcie z nowych kart graficznych. Wydaje mi się, że dotyczy to bardziej linuksa (i innych systemów gdzie wyświetlanie grafiki oparte jest na systemie X11). Podobne rozszerzenie dla Windows (korzystające z Microsoft Direct3D 9 API) jest już włączone w JDK 6u10.
  • Forward-port 6u10 deployment features
  • Powyższa rzecz unowocześnia (nowy sposób downloadu chyba) rozszerzenie które było zaimplementowane w jdk 6u10 - nie ma potrzeby przy uruchamianiu apletu/aplikacji WebStart na maszynie bez jdk ściągania całego JDK (15MB), ściągany jest na początku tylko "kernel" (2.5MB), następnie dociągane są te biblioteki które są potrzebne do uruchomienia tego programu, biblioteki są nieduże mają po około 1MB. Gdy wymagania programu są spełnione, jest on uruchamiany, a pozostałe biblioteki są dociągane w tle przez specjalny downloader.
  • Create new platform APIs for 6u10 graphics features
  • Chcesz mieć półprzezroczyste elementy lub okienka w Javie? Teraz jest to możliwe, co prawda wymaga pogrzebania w AWT, ale możesz nadawać dowolny stopień przezroczystości, możesz tworzyć okrągłe okienka, lub zaokrąglać krawędzie. Jest to już możliwe w JDK6u10, ale w JDK7 ma się pojawić nowe API (pewnie bardziej wygodne) do tego.Krótkie wprowadzenie do tego co już jest zaimplementowane w JDK6u10
  • Nimbus look-and-feel for Swing
  • Kolejna nowość, która tak naprawdę została już zaimplementowana w JDK6u10. Nimbus to całkiem przyjemny, całkowicie wektorowy look&feel. Bardzo się według mnie nie różni od wyglądu Metal, ale jest trochę ładnych zaokrągleń, ładniejsze zakładki i paski przewijania. Dzięki wektorowości ma się bez problemów skalować (co dla mnie może być chyba jego największą zaletą ;) ).
  • Swing JLayer component
  • Włączenie do standardowego JDK biblioteki JXLayer. Nowy komponent dekorator który umożliwia trochę więcej zabawy i graficznych ciekawostek. Polecam zobaczyć przykłady na stronie JXLayer.

Web
  • Update the XML stack
  • Upgrade JAXP, JAXB i JAX-WS APIs do najnowszych stabilnych wersji.

I to by było na tyle z nowości JDK7. Jak widać trochę tego jest, choć zmiany opisane dziś to przeważnie unowocześnienie nowych możliwości z JDK6u10. W następnym tygodniu spróbuję podsumować całość.

środa, 31 marca 2010

JDK 7 - nowości 3

I wracam po dwóch dniach choroby do zapoznawania się z nowościami w JDK7. Dzisiaj czas na podstawowe zmiany, czyli:

Core

  • Project Jigsaw - Modularyzacja
  • Projekty w Javie stają się coraz większe, samo JDK staje się ogromne. Stąd potrzeba modularyzacji. Podstawą do wdrożenia modułów w JDK ma być projekt Jigsaw. Korzysta on z wcześniej omawianego przez mnie JSR294 - czyli zmian w języku Java udostępniających modularyzacje (JDK 7 nowości 2). W proponowanym rozwiązaniu ma się pojawić plik opisujący metadane modułu. Plik ten (nazwany module-info.java i umieszczony w podstawowym katalogu modułu) opisywałby zależności między tym modułem a innymi modułami. Mógłby mieć np. następującą składnie:
    module M1@1.0 provides M2@2.0, M3@3.0 {
      requires M4@4.0, M5@5.0;
      permits  M6;
    } 
    
    Nasz moduł M1 w wersji 1.0 dostarcza funkcjonalność modułu M2 (w wersji 2.0) i M3 (w wersji 3.0), do działania wymaga M4 (w wersji 4.0) i M5 (w wersji 5.0). Pozwala z siebie korzystać modułowi M6. Krótkie przeczytanie tego uzmysławia jaką fajną zabawkę dostaną wszyscy programiści - dzięki zdefiniowaniu konkretnych wymagań (w konkretnych wersjach), dzięki definiowaniu, że moduł dostarcza konkretnych funkcjonalności (w konkretnych wersjach) wszystkie biblioteki będą mogły łatwiej ze sobą współpracować. Będzie można łatwo zastosować "zamienniki" - implementacje innych autorów. Projekt Jigsaw nie będzie jednak wchodził do Oficjalnej Java SE 7 Platform Specification i może nie być wspierany przez inne (niż Sunowskie OpenJDK) JDK.
  • Poprawienie architektury class-loadera
  • takie poprawienie ClassLoader API aby uniknąć deadlocków, nie zmieniając istniejącego kodu korzystającego z ClassLoadera.
  • Metoda close w URLClassLoader
  • Dodanie metody close() w klasie URLClassLoader. Dzięki temu łatwo będzie można skorzystać z Automatic Resource Management (JDK 7 nowości 2).
  • Unicode 5.1
  • JSR166y
  • Nowa biblioteka/framework wspierający i ułatwiający korzystanie z współbieżności w Javie z ParallelArrays.
  • JSR 203: Nowe I/O APIs dla Javy (NIO.2)
  • Jest to rozszerzenie istniejących już rozwiązań. Umożliwia np.
    • łatwe kopiowanie:
    • import java.nio.file.*; 
      Path home = Path.get("/home/gus"); 
      Path profile = home.resolve(".bash_profile"); 
      // Backup existing file 
      profile.copyTo(home.resolve(".bash_profile.backup")); 
      
    • Obsługę atrybutów pliku, obsługę symbolicznych linków:
    • Path file = Path.get("/usr/spool"); 
      // read file attributes of the link 
      BasicFileAttributes attrs = Attributes 
          .readBasicFileAttributes(file, false); 
      if (attrs.isSymbolicLink()) { 
          // read target of link 
          Path target = file.readSymbolicLink(); 
          // check /usr/spool == /usr/spool/../var/spool 
          assert file.isSameFile(file.resolve(target)); 
      }
      
    • Obsługę katalogów jako strumieni:
    • Path dir = Path.get("mydir"); 
      DirectoryStream stream = dir.newDirectoryStream("*.java"); 
      try { 
          for (DirectoryEntry entry: stream) {         
              System.out.println(entry.getName()); 
          } 
      } finally { 
          stream.close(); 
      }
      
    • Dodatkowe rzeczy w Socket Channel API
    • Asynchroniczne API w dostępie do plików jaki i socketów
    • SCTP i SDP dla Solarisa
    • I trochę innych jeszcze nowości
  • Elliptic-curve cryptography (ECC)
  • Implementacja ECC którą będzie częścią standardową JDK 7.

Uff. Trochę tego jest ale nie są to (poza projektem Jigsaw) tak bardzo interesujące rzeczy.
c.d.n.

niedziela, 28 marca 2010

JDK 7 - nowości 2

Ciągniemy dalej nasze zapoznawanie się z JDK7. W dzisiejszym odcinku to co wszystkich dotyczy i interesuje chyba najbardziej, czyli zmiany w języku Java.

Zmiany w języku Java

  • JSR 294: Wsparcie w języku i JVM dla programowania modułowego
  • Moduły (czyli "superpackage" jak były nazywane na początku) zwiększają możliwości kontroli dostępu dla obiektów. Do tej pory jeżeli budowaliśmy jakieś biblioteki które składały się z wielu pakietów deklaracja dostępu "package" ograniczała nas tylko do pakietu i jego podpakietów. A jeżeli chciało się sięgnąć między dwoma równoległymi "podpakietami" trzeba było deklarować to jako "public" czyli udostępnić też na zewnątrz biblioteki. Moduły pomogą to rozwiązać przez nowe słowo kluczowe "module", które będzie występowało w pliku przed definicją "package". Do tego będzie można zastosować nowy modyfikator dostępu "module". Będzie to ciekawe wsparcie dla systemów modułowych jak OSGI czy Jigsaw. Więcej można poczytać tu: http://blogs.sun.com/abuckley/resource/JSR294AndModuleSystems.pdf.
  • JSR308 - rozszerzenie annotacji
  • Od JDK7 annotacje zyskają dodatkowy wymiar, będzie je można używać w wielu nowych miejscach. Popatrzmy na możliwości np:
    @NonNull String  //zadeklarowanie zmiennej ktora nie moze byc nullem
    List<@NotNull String> //Listy nie przyjmujacej null
    List<@Longer(max=6) String> //Listy przyjmujacej stringi dluzsze niz
    String @NonEmpty [] //Nie pustej tablicy
    
      @Readonly Document [][] docs1 = new @Readonly Document [2][12]; // tablica tablic zawierajacych dokumenty tylko do odczytu
      Document @Readonly [][] docs2 = new Document @Readonly [2][12]; // tylko do odczytu tablica tablic z dokumentami
      Document[] @Readonly [] docs3 = new Document[2] @Readonly [12]; // tablica zlozona z tablic tylko do odczytu z dokumentami
    boolean isNonNull = myString instanceof @NonNull String; //test czy nie null
    
  • Project Coin - czyli małe zmiany w języku Java ułatwiające prace
  • Tak jak w wcześniejszym poście pisałem są to małe zmiany w języku Java zaproponowane przez programistów.
    • Używanie String w instrukcji switch
    • String klucz="kluczyk";
      switch(klucz){
        case "":
          System.out.println("Pusty");
          break;
        case "kluczyk":
          System.out.println("Znalazlem kluczyk");
          break;
        default: break;
      }
      
    • Automatic Resource Management
    • To już ciekawostka - automatyzacja zamykania strumieni (lub innych zasobów z metodą close). Do tej pory przy zasobach należało pilnować zamknięcia w finally. np:
      static String readFirstLineFromFile(String path) throws IOException {
              BufferedReader br = new BufferedReader(new FileReader(path));
              try {
                  return br.readLine();
              } finally {
                  br.close();
              }
          }
      
      W propozycji rozszerzamy instrukcje try przez umożliwienie jej przyjęcia zmiennych lokalnych z interfejsem Disposable, który deklaruje metodę close(). Ta metoda będzie automatycznie wywołana przy wychodzeniu z try.
      static String readFirstLineFromFile2(String path) throws IOException {
              try (BufferedReader br = new BufferedReader(new FileReader(path)) {
                 return br.readLine();
              }
          }
      
    • Notacja diament ("diamond")
    • Uproszczenie składni:
      Map<String, List<String>> anagrams = new HashMap<String, List<String>>(); //standardowa notacja
      Map<String, List<String>> anagrams = new HashMap<>(); //notacja diament
      
    • Małe zmiany w składni stałych numerycznych: podkreślnik i zapis binarny
    • int a=20_000_000_000; //przykład czytelnego zapisu.
      int b=1_2*10 // da nam 120 bo 12*10=120
      byte b1= (byte) 0b001;
      short s2=(short) 0b0101;
      
    • Uproszczenie składni Map i List
    • Propozycja przewiduje uproszczenie składni dla Map i List przez dodanie możliwości odnoszenia się do nich jak do tablic za pomocą nawiasów kwadratowych.
      final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9]; //tworzenie Listy jak tablicy
      final Map<Integer, String> platonicSolids = { 4 : "tetrahedron", 6 : "cube", 8 : "octahedron", 12 : "dodecahedron", 20 : "icosahedron" }; //uproszczone tworzenie mapy
      //uproszczony dostep
      if(piDigits[3]==1){}
      if(platonicSolids[6].compareTo("cube")){}
      
    • Dynamiczna Java, wsparcie dla JSR292
    • Wsparcie w Javie dla dynamicznych typów przez specjalny interfejs java.dyn.Dynamic. Umożliwi łatwiejszą integracje z językami dynamicznymi.
  • Project Lambda - czyli domknięcia ("closures")
  • Tak, tak, tak ;) Więcej o tym: http://blogs.sun.com/mr/entry/closures i http://blogs.sun.com/mr/entry/closures_qa

Uff.. trochę tego jest - a dopiero zbliżam się do połowy zmian w JDK7.
Nie wszystkie te zmiany na pewno wejdą do JDK7, część (dwa ostanie punkty Project Coin i Project Lambda) jeszcze nawet nie są przypisane do odpowiednich Milstonów (choć część rzeczy z Project Coin jest już zaimplementowana, nie wiem jak z domknięciami). Część rzeczy nawet jeżeli już zaimplementowana i wdrożona może jeszcze w czasie testów wylecieć...

sobota, 27 marca 2010

JDK 7 - nowości 1

Pisałem ostatnio, że jestem rozczarowany zmianami w najnowszym JDK które będzie wydane. Chyba nie zgłębiłem dostatecznie tematu. Zaprezentowane przez mnie nowości okazały się tylko fragmentem całości, a dokładnie jednym z projektów zaczętych przez Sun-a pod nazwą "Project Coin". W ramach tego projektu każdy programista mógł wysłać formularz z drobnymi zmianami jakie są potrzebne w języku Java. Zaprezentowane w poprzednim poście zmiany są właśnie wybranymi zmianami które będą wprowadzone.

Oprócz tych zmian szykuje się trochę innych. Najlepsze informacje można znaleźć na stronie http://openjdk.java.net/projects/jdk7/features/, a pewne kalendarium na podstawie którego można przewidywać kiedy pojawi się finalna wersja jest dostępne pod http://openjdk.java.net/projects/jdk7/milestones/.

Ponieważ temat jest dość ciekawy postaram się zerknąć i zapoznać z zmianami jakie szykuje nam JDK7. W końcu trzeba być gotowym na zmiany :)

Zmiany w VM

  • Kompresja 64bitowych wskaźników
  • Coraz większe programy w Javie wymagają coraz więcej pamięci. Dla przyśpieszenia wersji 64bitowych wymyślono kompresję wskaźników 64bitowych do 32bitowych. Powinno to przyśpieszyć jave na 64bitach.
  • Garbage First (G1)
  • Nowy garbage collector. W tym momencie w jdk używany jest gc o nazwie CMS, dość sprytnie dzielący obiekty w javie na takie które będą długo w pamięci i takie które są tylko krótkoterminowe. Niestety wymaga on częstych "stop-the-world", czyli przerw w pracy aplikacji... Nowy gc o nazwie "Garbage First" (G1) ma zminimalizować fragmenty "stop-the-world" czyli nasze aplikacje będą chodziły bardziej płynnie.
  • Zmiany w JVM ułatwiające/przyśpieszające działanie języków innych niż Java
  • Chodzi o wprowadzenie pewnych zmian w maszynie wirtualnej (JVM), które ułatwiłyby działanie języków dynamicznych i skryptowch. JVM była projektowana dla Javy, więc w wielu miejscach kompilatory języków dynamicznych muszą stosować czasochłonne obejścia. Rozszerzenie JVM o kilka nowych możliwości mogłoby mocno przyśpieszyć inne języki korzystające z JVM. Brzmi bardzo zachęcająco zwłaszcza, że zaczynam się uczyć Grooviego ;) Ale chyba nie będziemy z tego mogli korzystać od razu, gdyż wymagana jest zmiana w JDK, upowszechnienie się nowego JDK, a następnie zmiany w kompilatorach tych języków. Choć patrząc na tempo rozwoju języków skryptowych, można mieć nadzieję, że nie będzie trzeba czekać aż tak długo.

Ciąg dalszy w następnym poście - mam nadzieję, że jutro znajdę czas :)

środa, 24 marca 2010

Integracja dWorld z Bloggerem

Dzięki Grzegorzowi Dudzie zostałem dodany do jednego z najciekawszych w Polsce serwisów o Javie w Polsce - dWorld.pl . Od tego momentu moje posty mają się automatycznie pojawiać na dWorld w zakładce Blogosfera. Dzięki Grzegorz!

Marek Podsiadły przygotował specjalny widget do umieszczenia na blogu, aby bezpośrednio z bloga dało się głosować na dany artykuł. Wystarczy umieścić:
<script type="text/javascript" src="http://www.dworld.pl/js/bs_widget.js"> </script>
Kod ten powoduje umieszczenie małej ramki "iframe" z źródłem do serwisu dworld (w parametrach przekazując adres bieżącej strony).

Moje pierwsze podejście aby zrobić to za pomocą Edycji Html-a szablonu, było mało udane, po umieszczenie powyższego kodu Blogger wywoływał gdzieś swoje akcje javascript w których podmieniał dworldowe iframe na swoje z polem do dodawania komentarza.

Następnie zastosowałem się do wskazówki Marka i w układzie strony dołożyłem nowy Widget, typu "Html", jako treść wpisałem powyższy kod html i .. działa :) Prawie idealnie ... bardzo dobrze działa jak jest wyświetlany jeden artykuł.
Na stronie głównej też ten widget jest wyświetlany, ale nie dotyczy on żadnego artykułu. W dodatku mimo że w dokumentacji Marek napisał, że jeżeli urla który jest przekazywany jako parametr nie będzie w bazie artykułów (czyli np. będzie to strona główna) to wyświetlany będzie widget bez możliwości głosowania, aby nie wprowadzać chaosu. U mnie na stronie głównej widget niestety ma +/-.

Na moim blogu artykuły nie są długie (choć może kiedyś się rozpiszę ;) ), więc chciałbym umożliwić głosowanie już na stronie głównej. Taki widget powinien być wyświetlany pod każdym postem. Wróciłem do zabawy z Edycją Html szablonu.
Po włączeniu "Rozszerz szablony" znalazłem dobre miejsce na umieszczenie widgeta.
<div class='post-header'>
    <div class='post-header-line-1'/>
</div>

<div class='post-body entry-content'>
      <data:post.body/>
      <div style='clear: both;'/> <!-- clear for photos floats -->
</div>
Powyższy kod odpowiada za wyświetlenie artykułu, mogę umieścić widgeta za nim.

Trochę musiałem pokombinować jak połączyć iframe, jscript z tagami bloggera. Kilka różnych koncepcji padło, jako nie dające się zrealizować.
W końcu po przyjrzeniu się gotowemu szablonowi udało mi się wymyślić coś takiego:
<div class='dworld' id='dworld'>
<iframe expr:src='&quot;http://www.dworld.pl/blogEntry/widget?url=&quot; + data:post.url' frameborder='0' height='90' scrolling='no' width='70'/>
</div>

Po kilku tekstach, wygląda że działa, więc może komuś to się jeszcze przyda :)
Swoją drogą system templetów Bloggera jest naprawdę ciekawy i umożliwia sporo.

poniedziałek, 22 marca 2010

JDK 7 - nowości

W tym roku zostanie (prawdopodobnie) wydane nowe JDK o numerze 7. Z znalezionych przez mnie notatek wynika, że nie szykują się duże zmiany. Oczywiście ma być szybsze ;)
Kilka zmian w kolejności ważności/użyteczności według mnie:
  1. Możliwość używania Stringów w instrukcjach "switch"


  2. Możliwość używania podkreślenia w wartościach typu integer. Umożliwia to czytelniejsze zapisywanie długich liczb. Znak "_" jest "nie brany pod uwagę/usuwany".



  3. Łatwy zapis liczb w postaci dwójkowej, z konwersją do typów integer (byte, short).

  4. Notacja "diament" w deklaracjach kolekcji.




Jak widać te zmiany są raczej powierzchowne, trochę upraszczają notację. Wydaje mi się, że dużych zmian w JDK7 nie ma co oczekiwać. Dopiero w JDK8 które będzie bardziej Oraclowe będzie bardziej ciekawe.

środa, 17 marca 2010

Uruchomienie SyntaxHighlighter na Bloggerze

Po ostatnim poście o nowościach w JDK7 stwierdziłem, że konieczne jest dodanie jakiegokolwiek formatowania dla wklejanego kodu. Najbardziej popularnym rozwiązaniem chyba w tej chwili jest SyntaxHighlighterhttp://alexgorbatchev.com/wiki/SyntaxHighlighter. Rozwiązanie całkowicie oparte na JavaScripcie i css.
Jak go jednak uruchomić na platformie Blogger?
Tutaj znalazłem rozwiązanie: http://blog.cartercole.com/2009/10/awesome-syntax-highlighting-made-easy.html

1. W Ustawieniach wybierz Edytuj kod HTML
2. W okienku z kodem zjedź na dół i przed sekcją zamykającą </body> dodaj:
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'></script> 
<script language='javascript'> 
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>

3. Podjedź na górę i przed zamknięciem </head> dodaj css:
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> 
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> 

I gotowe ;)
Teraz aby tego używać przy edycji postów należy wejść w "Edytuj kod HTML" i tam otoczyć swój kod znacznikami pre.
<pre class="brush:html">
To jest jakis kod html z tagami skonwertowanymi 
</pre>
UWAGA: Kod musi być zeskejpowany (jakiś polski odpowiednik?) czyli wszystkie znaki np ">" zamienione na & gt; Jedno z narzędzi do tego dostępnych online to np:
http://accessify.com/tools-and-wizards/developer-tools/quick-escape/default.php

Klasa css oznacza nam w jaki sposób biblioteka będzie kolorowała składnię. Dostępne są składnie dla większości języków programowania (java, jscript, ruby, groovy, c, c#, delphi, etc.) jak i innych przydatnych formatów (xml, sql, etc.).

Jeżeli chcemy pominąć konieczność konwertowania znaków specjalnych to możemy zamiast tagu pre użyć tagu script:
<script type="syntaxhighlighter" class="brush: java"><![CDATA[
//java kod nie skonwertowany
]]></script>

Można trochę przyśpieszyć ładowanie całej strony kasując nie potrzebne skrypty do języków których nie zamierzamy używać. Jeżeli dysponujemy też w miarę szybkim serwerem www warto pliki biblioteki zgrać na swój serwer i podmienić w kodzie templatki.

czwartek, 18 lutego 2010

Jednak Netbeans 6.9 ?

Z pewną nieśmiałością zaznaczam, że pokazała się nowa wersja "testowa" Netbeansa. Nosi ona oznaczenie 6.9M1 -> czyli na razie nie będzie wersji 7.0 i dużych zmian się nie ma co spodziewać.
http://wiki.netbeans.org/NewAndNoteworthy69m1 
Powyżej link gdzie można przeczytać wszystko co się zmieniło.
W skrócie:
- netbeans będzie się uruchamiał już tylko dla Javy 6
- wsparcie dla OSGI - jak na razie dla mnie czarna magia ;)
- drobne poprawki dla PHP
- drobne poprawki edytora Javy
- drobne poprawki debugera Javy (np. możliwość grupowania breakpointów w grupy)
- dodano biblioteki dla Springa 3.0
Jako ciekawostkę można zanotować, że zaczęto pracować nad wsparciem dla JDK 7 - jak narazie tylko drobiazgi http://wiki.netbeans.org/Java_EditorJDK7.