2

Choinka FX

Posted by wiktor on Dec 22, 2007 in javafx

Za moją namową Radek Holewa wczoraj wykonał choinkę w JavaFX :) . Nie można powiedzieć o niej, że powala na kolana (sorry Radek ;) ), więc obiecałem, że zrobię lepszą. Chociaż ciut lepszą. Oto wynik paru zmian w choince Radka:

Choinka w JavaFX


Poniżej znajduje się kod powyższej choinki. Możesz go szybko odpalić w JavaFX Pad. Odpal JavaFX Pad, wklej poniższy kod i choinka gotowa :) .

Java Web Start - JavaFX Pad



UWAGA! Jeśli najedziesz kursorem na napis “Wesołych Świąt” to choinka się obróci ;) .

package choinka;

import javafx.ui.*;
import javafx.ui.canvas.*;
import javafx.ui.filter.*;
import java.awt.Dimension;

class ChoinkaFX extends CompositeNode {
    attribute rotationValue: Number;
}

attribute ChoinkaFX.rotationValue = 0;

function ChoinkaFX.composeNode() =
Group {
    content: [Group {
        transform: bind [translate(20, 10), rotate(rotationValue, 150, 70)]
        filter: [ShapeBurst { factor: 4 }, LightFilter { diffuseColor: green }, GaussianBlur]
        content:[
        Rect {
            x: 60
            y: 240
            height: 40
            width: 40
            fill: green
            stroke: lightgreen
            strokeWidth: 5
        },
        Polygon {
            points: [10, 240, 150, 240, 80, 150]
            fill: green
            stroke: lightgreen
            strokeWidth: 5
        },
        Polygon {
            points: [10, 160, 150, 160, 80, 70]
            fill: green
            stroke: lightgreen
            strokeWidth: 5
        },
        Polygon {
            points: [10, 80, 150, 80, 80, 2]
            fill: green
            stroke: lightgreen
            strokeWidth: 5
        }]
    },
    Text {
        x: 170, y: 120
        content: "Wesołych Świąt"
        fill: maroon
        font: Font { face: VERDANA, size: 40 }
        filter: [ShadowFilter]
        onMouseEntered: operation(event) {
            rotationValue = [0..360] dur 1000;
        }
    }
    ]
};

Canvas {
    content: ChoinkaFX
    background: lightblue
    preferredSize: Dimension { width: 500, height: 300 }
}


Wesołych Świąt!

 
21

AKTUALIZACJA: Pięciosłówek wygrał konkurs na najlepszą aplikacją dla Grono

Posted by wiktor on Dec 16, 2007 in Różne, ciekawostki

piecioslowek - logo


W piątek na stronach technicznego blogu grono.net opublikowano wyniki konkursu na najlepszy widget dla grona. Praca mojego autorstwa – Pięciosłówek – zdobyła pierwsze miejsce! :)

Co to jest Pięciosłówek? Prosta aplikacja, dzięki której możesz opisać swoich znajomych (z grona) w dokładnie pięciu słowach. Pyszna zabawa :) . Pięciosłówek działa jako zwykła aplikacja internetowa, a także jako gadżet dla iGoogle, jako sideBar dla Firefoxa oraz jako widget dla Netvibes.

Teraz trochę techno-informacji. Aplikacja została napisana w oparciu o Ruby on Rails. Przy okazji napisałem bibliotekę RGrono, która rozmawia z API gronowym (tylko w tym zakresie, który potrzebowałem). Jak będę miał trochę czasu wolnego (tiaaa….) to dopiszę brakującą funkcjonalność i upublicznię RGrono.

AKTUALIZACJA (11-02-2008)

W zawiązku z pomówieniami dotyczącymi mojego projektu Pięciosłówek postanowiłem zamieścić krótkie oświadczenie.

Przyznaję, że kolorystyka oraz jedna grafika były wzorowane na serwisie Pownce. Jednocześnie pragną przypomnieć, że w kontekście całej aplikacji rzeczy te nie miały większego znaczenia. Podkreślam także, że Pięciosłówek nie ma nic wspólnego z pomysłami serwisu Pownce.

Ponadto pragnę poinformować, że rozmawiałem z Pownce. Poniżej przedstawiam odpowiedź:

Hi Wiktor. Thanks for contacting us about this issue. If possible, please change the graphics that are taken directly from Pownce’s interface. Otherwise, if you’d just send us something really cool from Poland, we’ll consider the whole matter closed. Cool?

Pownce Inc.
1459 18th Street, Suite 142
San Francisco, CA 94107
USA

Daniel Burka
Interface Designer, Pownce

Chciałbym również podkreślić, że o całej zaistniałej sytuacji dowiedziałem się przypadkowo, gdyż inicjator pomówienia nie był stanie zawiadomić mnie o swoich podejrzeniach osobiście. Warto tu również zauważyć, że wszelkie insynuacje wychodzą od osoby całkowicie anonimowej. Nie miałem żadnych możliwości kontaktu z nią, rozmowy.

Jeżeli wystąpią jakiekolwiek inne wątpliwości dotyczące mojej pracy, proszę o bezpośredni kontakt ze mną.

 
27

Poznajemy nowe języki: Scala, czyli jak wypisać elementy z listy

Posted by wiktor on Dec 12, 2007 in java, scala

Scala. Co to za język?

  • Scala została sklasyfikowana jako język funkcyjny, obiektowy, wielo-paradygmatyczny (mam nadzieję, że dobrze tłumaczę),
  • statycznie i silnie typowany,
  • obecna implementacja bazuje na JVM, niedługo można się spodziwać implementacji na .NET,
  • tak!, Scala działa na platformie Java, więc ma dostęp do całego ekosystemu bibliotek Javy,
  • nietuzinkową postacią jest sam twórca języka Martin Odersky, który jest współautorem obecnego kompilatora Javy oraz jest współprojektantem obecnych typów generycznych w Javie,
  • jest to młody język programowania i posiada wiele ciekawych własności, o których to będę pisał w kolejnych postach,
  • więcej: Scala na Wikipedii, strona domowa Scali, wywiad z twórcą języka.

OK, wezmę na warsztat prostą czynność: wypisanie elementów z listy.
Kod w Javie byłby następujący:

[Java]
List lista = new ArrayList() {{
add(1); add(2); add(3); add(4);
}};

for (Integer x : lista)
System.out.println(x);

// Można też tak, ale raczej nie bym nie polegał na metodzie toString()
System.out.println(lista.toString());

// lub po prostu:
System.out.println(lista);
[/Java]

Dla odmiany w Ruby’im zrobilibyśmy to tak:

[Ruby]
# tutaj akurat mamy tablicę
lista = %w(1, 2, 3, 4)

# żeby ładnie było to definiujmy println
println = lambda { |x| puts x }

lista.each &println
[/Ruby]

Zobaczmy teraz, jak zrobilibyśmy to w Scali.

[Scala]
val lista = List(1, 2, 3, 4)

lista.foreach((x: Int) => println(x))
[/Scala]

Brzydko… idziemy dalej. Scala jest językiem funkcyjnym, który ma mechanizm currying. Opuśćmy deklarację typu i nawiasy.

[Scala]
lista.foreach(x => println(x))
[/Scala]

Nadal brzydko… idziemy dalej. Co jest argumentem metody foreach? Sygnatura metody jest następująca:

[Scala]
def foreach(f: A => Unit): Unit
[/Scala]

Na potrzebę chwili traktujmy Unit tak samo jak void. Zatem argumentem foreach jest funkcja, która przyjmuje argument A (jakiś nieustalony typ, patrz: currying) i zwraca Unit. Natomiast println jest zdefiniowany tak:

[Scala]
def println(x: Any) = Console.println(x)
[/Scala]

czyli bierze jakiś argument (nadal patrz: currying, funkcje wyższego rzędu) i zwraca Unit. Zatem typy się zgadzają. Zapiszmy to krócej:

[Scala]
lista.foreach(println)
[/Scala]

Już lepiej, ale można jeszcze lepiej :) . Scala ma bardzo fajną własność, którą nigdzie wcześniej nie spotkałem. Mianowicie w Scali technicznie nie ma operatorów. Wyrażenie 1 + 2 jest tożsame z wywołaniem metody 1.+(2). Jeśli metoda przyjmuję tylko jeden parametr to można pominąć nawiasy oraz kropkę. Zatem:

[Scala]
lista foreach println
[/Scala]

Piękny zapis, nieprawdaż? :) A czy twój ulubiony język zrobi to lepiej?

 
6

Netbeans 6 już jest

Posted by wiktor on Dec 7, 2007 in java

Netbeans - świeżutki i cieplutki


Już można pobrać ze strony netbeans.org najnowszą wersję Netbeans. Tym razem w wersji 6. Jest to krok milowy dla rozwoju Netbeans, dlatego że wreszcie staje się on konkurencyjny dla Eclipse i IntelliJ IDEA. Wcześniej nie dało się go w ogóle używać. Edytor dla Javy, czyli najważniejszy jego element, był po prostu niemiłosiernie wolny. Sun słusznie postanowił wpompować w niego dużo pieniędzy i widać tego efekty.

Wybrane najważniejsze rzeczy w Netbeans 6:

  • Nowy, szybszy, bardziej inteligenty edytor dla Javy – wreszcie! Netbeansa wcześniej po prostu się nie dało używać do kodowania w Javie. Był wolny, wolny i jeszcze raz wolny. Obecna szybkość dorównuje Eclipse’owi i IntelliJ. W sumie nie powinniśmy się tym ekscytować, bo w innych środowiskach zintegrowanych była to norma.
  • Wsparcie dla trybu pełnoekranowego (Alt-Shift-Enter lub Command-Shift-Enter na Maku). Mała rzecz a cieszy.
  • Ulepszony diff – czyli kolejne wreszcie! Netbeans małymi kroczkami dogania konkurencję.
    Netbeans diff screenshot
  • Kopiowanie z IntelliJ IDEA, wystarczy zobaczyć poniższe zrzuty ekranu:
    netbeans-generate.png intellij-idea-generate.png
    Netbeans 6 IntelliJ IDEA 7

    Tak, tak… w Netbeans znajdziemy więcej takich rodzynków. To w IntelliJ IDEA znajdziemy innowacyjne pomysły i to ona jest najbardziej zaawansowanym środowiskiem zintegrowanym. Dlatego też uważam, że zapożyczanie pomysłów w Netbeans (można na to patrzeć jako kopiowanie) jest w porządku, bo napędza rynek środowisk zintegrowanych.

  • Ulepszony edytor dla Swinga i Swing Application Framework – Matisse (edytor GUI) od samego początku nie miał sobie równych. Netbeans jest obecnie najlepszym narzędziem dla programistów Swinga. Dlatego cieszy fakt, że jest on nadal udoskonalany. Dodatkowo wsparcie dla Swing Application Framework (zapewnia infrastrukturę dla małych aplikacji Swingowych) i Beans Binding (najogólniej: zapewnia synchronizację pomiędzy właściwościami obiektów) wskazuje, że Sun’owi naprawdę zależy na pobudzeniu Javy dla zastosowań klienckich/desktopowych.
    Netbeans GUI builder
  • …ale nadal trzeba mieć osobno zainstalowane Subversion i wskazać ścieżkę do niego, żeby z niego korzystać. Nie rozumiem, czemu to jest takie trudne, żeby svn był wbudowany w Netbeans. Przecież w innych IDE jest to od dłuższego czasu standardem.
  • Ostatnie i najważniejsze wg mnie. Rewelacyjny edytor dla Ruby’iego i Ruby on Rails. Najważniejsze jego własności to proste refaktoryzacje, naprawdę dobre uzupełnianie kodu, debugger, szablony kodów (ang. Live Code Templates) i podpowiedzi. Warto go wypróbować.
    netbeans ruby, ruby on rails

PS. Brawo dla Jacka Laskowskiego, który jest najaktywniejszym członkiem grupy NetBeans IDE 6.0 Community Acceptance Testing program (NetCAT).

Related Posts with Thumbnails

Copyright © 2012 Mocna Kawa All rights reserved. Theme by Laptop Geek.