Dr3dweRkZ

03/05/2010

JavaFX Wish List

Filed under: JavaFX, Programování — admin @ 4:55 pm
  1. In order to make the adoption easier, we need to provide painless way how to turn HTML website into JavaFX one. That means Java / JavaFX need to support at least previous version of current HTML (means forget about Swing HTML 3.2 support). At least HTML parser would be nice if not a full support of HTML in the components.
  2. You usually want to have your content crawled by search engine robot, which is easy in case of traditional HTML website. Therefore we need to find a way how to enable this in our JavaFX RIAs.
  3. With introduction of JavaFX 3D API, we need to provide some kind of 3D model loader or JavaFX plugin to 3D authoring tools (Maya, 3D Studio Max etc.).
  4. Webcam support. JavaFX needs to provide this in order to allow us work with some interesting emerging fields such as Augmented Reality. In short, JavaFX needs to support more multimedia formats / codecs, protocols and streams.
  5. Bluetooth API. Sorely needed if we want enable communication among devices in one network, e.g. at home
  6. There's javafx.runtime package. This is disappointing. It actually goes against the idea of profiles. Why the heck should we care about platform caps? Runtime should do it, not us. We just build our app for different profiles and that's it. Runtime should figure out if the app can take advantage of some cap or feature. This seems to be so obscurant. It's like, yeah folks, Java is still around the corner watching you :)
  7. Database API (JPA). I don't quite understand why it's not there. Like we've got this REST API and all is high-level and then we find ourselves hacking Java into JavaFX in order to access a database.
  8. There should be Connectivity API in JavaFX that would monitor network status and provide you with notifications so you can react properly. It'd improve usability of JavaFX applications a lot.

19/04/2010

JavaFX – Resizable HTML Node Demo

Filed under: JavaFX, Špinavá práce — admin @ 7:46 pm

Na dnešek jsem připravil součást budoucí Dr3dweRkZ 3.0. Jedná se o komponentu která načítá a zobrazuje obsah HTML souboru, přitom se ale dá měnit její velikost a časem přibydou i jiné vlastnosti.

Velikost komponenty lze měnit tažením za pravý dolní roh.

11/04/2010

JavaFX – Streams Demo Code

Filed under: JavaFX, Programování, Špinavá práce — admin @ 6:45 pm

Díky aktivitě ve vláknu Share With Your Fellow Geeks About Your Current JavaFX Activities jsem byl požádán o zveřejněni kódu k demu Streams. Kód který vidíte níže je bez jakýchkoliv úprav, tedy "as is" a je volně k dispozici čili "free to use".

Soubor Streams.fx

package streams;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.scene.paint.Color;
import javafx.scene.Node;
import javafx.util.Sequences;

/**
 * @author jiri
 */

var w = Wire {
    sy: 264, ey: 264
    ex: 512
};

var w1 = Wire {
    sy: 248, ey: 248
    color: Color.RED
};
var w2 = Wire {
    sy: 240, ey: 240
    color: Color.GREEN
};
var w3 = Wire {
    sy: 272, ey: 272
    color: Color.YELLOW
};

var w4 = Wire {
    sy: 256, ey: 256
    color: Color.WHITE
}

var wires: Node[] = [];

var master: Timeline = Timeline {
    keyFrames: [
        KeyFrame {
            time: 0s
            action: function(): Void {
                if (-1 == Sequences.indexByIdentity(wires, w4))
                    insert w4 into wires;
                w4.t.play();
            }

        }
        KeyFrame {
            time: 2s
            action: function(): Void {
                if (-1 == Sequences.indexByIdentity(wires, w3))
                    insert w3 into wires;
                w3.t.play();
            }
        }
        KeyFrame {
            time: 4s
            action: function(): Void {
                if (-1 == Sequences.indexByIdentity(wires, w2))
                    insert w2 into wires;
                w2.t.play();
            }
        }
        KeyFrame {
            time: 6s
            action: function(): Void {
                if (-1 == Sequences.indexByIdentity(wires, w1))
                    insert w1 into wires;
                w1.t.play();
            }
        }
        KeyFrame {
            time: 8s
            action: function(): Void {
                if (-1 == Sequences.indexByIdentity(wires, w))
                    insert w into wires;
                w.t.play();
            }
        }]
    repeatCount: Timeline.INDEFINITE
}
master.play();
//w.t.play();

Stage {
    title: "Streams"
    scene: Scene {
        width: 512
        height: 512
        fill: Color.BLACK
        content: bind wires
    }
}

Třída Wire.fx

package streams;

import javafx.scene.CustomNode;
import javafx.scene.Node;
import javafx.scene.Group;
import javafx.scene.shape.Path;
import javafx.scene.shape.MoveTo;
import javafx.scene.effect.MotionBlur;
import javafx.scene.effect.Reflection;
import javafx.scene.paint.Color;
import javafx.scene.shape.CubicCurveTo;
import javafx.animation.Timeline;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;

/**
 * @author jiri
 */

public class Wire extends CustomNode {
    public var sy = 256;
    public var ey = 256;
    var fromY = sy - 64;
    var toY = sy + 64;
    var sx = 0;
    var cx1 = sy - 128;
    var cy1 = sy - 128;
    var cx2 = sy + 128;
    var cy2 = sy + 128;
    public var ex = 512;
    var seq = [fromY, toY, sy, ey, cy1, cy2, ex];
    public var color = Color.BLUE;
    public var time = 0s;
    public var thickness = 3;
    public var smooth = true;
    public override var opacity = .5;
    public override var effect = Reflection {input: MotionBlur {}};
    public var t: Timeline = Timeline {}  

    override protected function create () : Node {
        t = Timeline {
            keyFrames: [
                KeyFrame {
                    time: time
                    values: [
                        sy => seq[0] tween Interpolator.LINEAR,
                        cy1 => seq[2] tween Interpolator.LINEAR,
                        cy2 => seq[2] tween Interpolator.LINEAR,
                        ey => seq[1] tween Interpolator.LINEAR,
                        /*ex => 0 tween Interpolator.LINEAR*/]
                }
                KeyFrame {
                    time: time + 2s
                    values: [
                        fromY => seq[2] tween Interpolator.LINEAR,
                        cy1 => seq[5] tween Interpolator.LINEAR,
                        cy2 => seq[4] tween Interpolator.LINEAR,
                        toY => seq[3] tween Interpolator.LINEAR,
                        /*ex => 128 tween Interpolator.LINEAR*/]
                }
                KeyFrame {
                    time: time + 4s
                    values: [
                        sy => seq[1] tween Interpolator.LINEAR,
                        cy1 => seq[2] tween Interpolator.LINEAR,
                        cy2 => seq[2] tween Interpolator.LINEAR,
                        ey => seq[0] tween Interpolator.LINEAR,
                        /*ex => 256 tween Interpolator.LINEAR*/]
                }
                KeyFrame {
                    time: time + 6s
                    values: [
                        toY => seq[2] tween Interpolator.LINEAR,
                        cy1 => seq[4] tween Interpolator.LINEAR,
                        cy2 => seq[5] tween Interpolator.LINEAR,
                        fromY => seq[3] tween Interpolator.LINEAR,
                        /*ex => 384 tween Interpolator.LINEAR*/]
                }
                KeyFrame {
                    time: time + 8s
                    values: [
                        sy => seq[0] tween Interpolator.LINEAR,
                        cy1 => seq[3] tween Interpolator.LINEAR,
                        cy2 => seq[3] tween Interpolator.LINEAR,
                        ey => seq[1] tween Interpolator.LINEAR,
                        /*ex => 512 tween Interpolator.LINEAR*/]
                }]
            repeatCount: Timeline.INDEFINITE
        }
        //t.play();

        return Group {
            content: [
                Path {
                elements: [
                    MoveTo {
                        x: 0, y: bind sy
                    }
                    CubicCurveTo {
                        controlX1: bind cx1, controlY1: bind cy1
                        controlX2: bind cx2, controlY2: bind cy2
                        x: bind ex, y: bind ey
                    }]
                strokeWidth: bind thickness
                stroke: color
                smooth: smooth
                opacity: bind opacity
                effect: effect
            }]
        }
    }
}

07/04/2010

JavaFX – Animated Border Demo

Filed under: JavaFX, Programování — admin @ 4:12 pm

Zjistil jsem, že v JavaFX je trošku problém kloudně animovat něco podél okraje nějakého tvaru. K tomu aby to šlo je zapotřebí převést daný okraj na cestu a podél ní už lze leccos animovat. JavaFX ale neumožňuje získat instanci okraje a převést ho na cestu. Celý okraj musíte vytvořit znovu. To je přesně to, co jsem musel udělat aby vzniklo dnešní demo.

17/03/2010

Otevřený SW, uzavřený SW a certifikace

Filed under: Špinavá práce — admin @ 5:23 pm

Při sledování videa s Alanem Kayem mě napadlo, jaká je vlastně spojitost - vztah mezi otevřeným software, uzavřeným software a certifikacemi. Nebudu zdržovat dlouho.

Otevřený software má tu výhodu, že je veřejně k dispozici zdrojový kód, každý ho může upravovat, většinou se na vývoji podílí víc lidí, dělají to dobrovolně a větsinou zadarmo.

Uzavřený software je software jehož zdrojový kód není veřejně přístupný, tudíž ho nemůže upravovat každý, stejně jako u otevřeného software se na jeho vývoji obvykle podílí víc lidí, dělají to v nejlepším případě proto že je to baví, ale spíš pro peníze.

Certifikace je pak formálním uznáním toho, že člověk s něčím umí zacházet, pracovat. Na co vlastně potřebuji mít certifikaci pro otevřený software? Výrobci je jedno jestli s jeho software umím pracovat. Otevřený software používám protože potřebuji nějakou funkcionalitu s tím, že pokud ji nemá, mám možnost si ji dopsat sám. Obvykle certifikace na otevřený software není dostupná, protože výrobce nemá zájem na software a certifikacích vydělávat, čili zabývat se tím jak ověřit kdo s ním umí zacházet.

U uzavřeného software je situace jiná. Nejen že výrobce vydělává na samotném software, ale většinou vydělává i na certifikacích a autorizovaných partnerech, kteří za další poplatky mohou tyto certifikace také udílet atd. Prostě kolotoč pěněz. Není na nich nic špatného, ale opravdu za ně v tomto případě dostáváte požadovanou hodnotu? Protože jde o peníze, můžete si takovou certifikaci pravděpodobně koupit, což se vám ale při pohovoru u potenciálního zaměstnavatele může vymstít. Takže, proč vlastně to všechno?

Alan Kay přišel s tím, že uživatelské rozhraní software by mělo být co nejvíce uživatelsky přívětivé, intuitivní. Člověk by měl být schopný s daným software pracovat do dvaceti minut - provádět běžné úlohy. Pokud vyjdeme z tohoto předpokladu, proč tedy potřebujeme mít certifikaci na nějaký software, protože není uživatelsky přívětivý? Zřejmě ano. Proč tedy za něj musíme platit když je tak těžké se s ním naučit pracovat? Neomezuje uživatelské rozhraní takového software přístup k jeho funkcionalitě? (pokud ji vůbec obsahuje). Navíc se mi zdá, že se v poslední době zaměňuje znalost nějakého oboru za znalost software který se v daném oboru může používat. Nechápu proč by například sekretářka měla mít certifikaci na MS Office. Taky nemám certifikaci na kladivo.

Teď někoho může napadnout otázka, jak vlastně tvůrce svobodného software vydělá peníze. Podle mého se dobrý software prodává téměř sám. Nevidím důvod, proč bych za něco co se mi líbí nezaplatil - platím za freeware hry které se mi líbí, za hudbu nezávislých umělců která se mi líbí, operační systém který se mi líbí atd. Možná někdo namítne že mu uzavřený software vyhovuje. Proti tomu samozřejmě nic nemám, ale přece jenom u otevřeného software mám možnost věci rychleji ovlivnit a zkoumat. To je někdy k nezaplacení.

27/01/2010

JavaFX – Streams Demo

Filed under: JavaFX, Programování — admin @ 9:41 pm

Vím ze jsem se dopustil web designerského hříchu, ale alespoň můžu zveřejňovat JavaFX applety přímo ve WordPressu.

19/01/2010

JavaFX Dema

Filed under: JavaFX — admin @ 5:04 pm

Vytvořil jsem nějaké dema v JavaFX, ale protože WordPress neumožňuje vkládat applety, musel jsem je umístit na starou verzi Dr3dweRkZ. Pokud se chcete podívat na něco málo z toho co se dá v JavaFX napsat, pak navštivte http://dredwerkz.ic.cz/javafx. Demo spustíte kliknutím na .html soubor v adresáři.

Podrobněji se budu psaní v JavaFX věnovat později kdy i vysvětlím co daný kód dělá.

30/11/2009

Dr3dweRkZ 2.0

Filed under: Nezařazeno — admin @ 1:30 pm

Projekt Dr3dweRkZ 2.0 je pokračováním původního projektu Dr3dweRkZ s cílem vytvořit komunitu kolem témat která se na Dr3dweRkZ 2.0 budou objevovat (programování, design, administrace, hudba, grafika, vlastní tvorba...).

Vzhled těchto stránek se bude zpočátku ještě měnit a rovněž se bude migrovat obsah z původního projektu. Podílení na tvorbě obsahu vítáme.

Powered by WordPress