<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-28959237</id><updated>2020-02-28T19:18:41.171-03:00</updated><category term="java"/><category term="tech"/><category term="development"/><category term="JavaFX"/><category term="netbeans"/><category term="certification"/><category term="linux"/><category term="RIA"/><category term="google"/><category term="microsoft"/><category term="SOA"/><category term="development computer_languages"/><category term="ide"/><category term="itv"/><category term="sharing ideas"/><category term="web2.0"/><category term="WebServices"/><category term="conference"/><category term="fun"/><category term="opensource"/><category term="powerlogic"/><category term="yahoo"/><category term="ArtificialIntelligence"/><category term="JXTA"/><category term="JavaEE"/><category term="Maven"/><category term="REST"/><category term="VirtualLife"/><category term="agile"/><category term="database"/><category term="datamining"/><category term="dell"/><category term="eclipse"/><category term="finance"/><category term="google tech web2.0"/><category term="greentech"/><category term="homeoffice"/><category term="knol"/><category term="media"/><category term="presentation"/><category term="python"/><category term="semanticweb"/><category term="site sharing"/><category term="software"/><category term="storage"/><category term="sun"/><category term="ubuntu"/><category term="web3.0"/><category term="wikipedia"/><category term="work"/><title type='text'>e-Grossi TechBlog</title><subtitle type='html'>Bruno Grossi&#39;s blog about technology.&#xa;&lt;br&gt;&#xa;Java, Internet, Free Software, etc.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>81</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-28959237.post-4153212528976621738</id><published>2009-11-09T09:58:00.003-02:00</published><updated>2009-11-09T11:14:35.799-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="certification"/><category scheme="http://www.blogger.com/atom/ns#" term="conference"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="presentation"/><title type='text'>Palestra: Tornando-se um Programador Java Sênior</title><content type='html'>Na sexta passada dei uma palestra no &lt;a href=&quot;http://www.muz.ifsuldeminas.edu.br/&quot;&gt;IFET Sul de Minas - Campus Muzambinho&lt;/a&gt; sobre Carreira Java na &lt;a href=&quot;http://www.muz.ifsuldeminas.edu.br/modules.php?name=noticias&amp;&amp;file=noticias27&quot;&gt;4&lt;sup&gt;a&lt;/sup&gt; Semana da Informática&lt;/a&gt;. A apresentação foi muito boa, e consegui deixar o pessoal atento até o fim. Espero que os alunos tenham ficado realmente animados à estudar essa tecnologia.&lt;br /&gt;Aliás, aproveitei pra testar a ferramenta &lt;a href=&quot;http://prezi.com&quot;&gt;Prezi.com&lt;/a&gt; para criar uma apresentação diferente do tradicional Slide, o que ajudou muito a surpreender os espectadores. Recomendo fortemente essa ferramenta.&lt;br /&gt;A apresentação está abaixo ou no link &lt;a href=&quot;http://prezi.com/6aktm7nsn1fy/&quot;&gt;http://prezi.com/6aktm7nsn1fy/&lt;/a&gt; pra quem quiser ver:&lt;br /&gt;&lt;br /&gt;&lt;object id=&quot;prezi_6aktm7nsn1fy&quot; name=&quot;prezi_6aktm7nsn1fy&quot; classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; width=&quot;550&quot; height=&quot;400&quot;&gt; &lt;param name=&quot;movie&quot; value=&quot;http://prezi.com/bin/preziloader.swf&quot;/&gt;  &lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot;/&gt;  &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;/&gt;  &lt;param name=&quot;bgcolor&quot; value=&quot;#ffffff&quot;/&gt;  &lt;param name=&quot;flashvars&quot; value=&quot;prezi_id=6aktm7nsn1fy&amp;amp;lock_to_path=1&amp;amp;color=ffffff&amp;amp;autoplay=no&quot;/&gt;  &lt;embed id=&quot;preziEmbed_6aktm7nsn1fy&quot; name=&quot;preziEmbed_6aktm7nsn1fy&quot; src=&quot;http://prezi.com/bin/preziloader.swf&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;550&quot; height=&quot;400&quot; bgcolor=&quot;#ffffff&quot; flashvars=&quot;prezi_id=6aktm7nsn1fy&amp;amp;lock_to_path=1&amp;amp;color=ffffff&amp;amp;autoplay=no&quot;&gt; &lt;/embed&gt; &lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/4153212528976621738/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=4153212528976621738&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/4153212528976621738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/4153212528976621738'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2009/11/palestra-tornando-se-um-programador.html' title='Palestra: Tornando-se um Programador Java Sênior'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-3691447578988400141</id><published>2009-02-10T17:03:00.000-02:00</published><updated>2009-02-10T17:03:49.305-02:00</updated><title type='text'>Enterprise Java Community: Java EE 6 Overview</title><content type='html'>&lt;a href=&quot;http://www.theserverside.com/tt/articles/article.tss?l=JavaEE6Overview&quot;&gt;Enterprise Java Community: Java EE 6 Overview&lt;/a&gt;</content><link rel="related" href="http://www.theserverside.com/tt/articles/article.tss?l=JavaEE6Overview" title="Enterprise Java Community: Java EE 6 Overview"/><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/3691447578988400141/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=3691447578988400141&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/3691447578988400141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/3691447578988400141'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2009/02/enterprise-java-community-java-ee-6.html' title='Enterprise Java Community: Java EE 6 Overview'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-7639002789522131912</id><published>2008-11-28T23:13:00.008-02:00</published><updated>2008-11-28T23:53:17.273-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaFX"/><category scheme="http://www.blogger.com/atom/ns#" term="RIA"/><title type='text'>Playing with layout: a custom JavaFX layout manager</title><content type='html'>Hi!&lt;br /&gt;&lt;br /&gt;Did you looked at &lt;span style=&quot;font-family:courier new;&quot;&gt;javafx.scene.Group&lt;/span&gt; class? In a first look, &lt;span style=&quot;font-family:courier new;&quot;&gt;Group&lt;/span&gt; is only a simple collection of nodes. But, looking it more detailed, you will see that it has an important feature: a method to create layout managers! And JavaFX has two built in layouts: &lt;span style=&quot;font-family:courier new;&quot;&gt;javafx.scene.layout.HBox&lt;/span&gt; and &lt;span style=&quot;font-family:courier new;&quot;&gt;javafx.scene.layout.VBox&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The first one is a simple layout manager that puts all node in an horizontal line, one after other. And the second do the same, but in a vertical line. Try to use then, as you use Group.&lt;br /&gt;&lt;br /&gt;But I need, for my application, a different layout manager: I need to put  a collection of objects inside a box. This box has a limited size, and this object need to be arranged according to box size. So, I need an automatic grid layout, that defines the numbers of columns according to objects widths.&lt;br /&gt;&lt;br /&gt;Some day ago, I&#39;ve created this layout manager object, and only now it works fine. It works in horizontal or vertical orientation, and determines the number of columns/lines by objects sizes. I called it as AutoGridLayout, and it&#39;s code was here:&lt;br /&gt;&lt;pre class=&quot;codebox javafx&quot;&gt;&lt;br /&gt;/*&lt;br /&gt; * AutoGridLayout.fx&lt;br /&gt; *&lt;br /&gt; * Created on 12/11/2008, 17:26:00&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;package brunogrossi.javafx.components;&lt;br /&gt;import javafx.scene.*;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author Bruno Grossi&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;public class Alignment {&lt;br /&gt;    private attribute name: String;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Represents the central position.&lt;br /&gt;     */&lt;br /&gt;    public static attribute CENTER = Alignment { name: &quot;CENTER&quot; }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Represents the begin position: LEFT when horizontal, TOP when vertical&lt;br /&gt;     */&lt;br /&gt;    public static attribute BEGIN = Alignment { name: &quot;BEGIN&quot; }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Represents the end position: RIGTH when horizontal, BOTTOM when vertical&lt;br /&gt;     */&lt;br /&gt;    public static attribute END = Alignment { name: &quot;END&quot; }&lt;br /&gt;&lt;br /&gt;    public function toString(): String { name }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class AutoGridLayout extends Group {&lt;br /&gt;    /**The max width or height of this layout component*/&lt;br /&gt;    public attribute maxSize:Number on replace {&lt;br /&gt;        impl_requestLayout();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**Indicates if it&#39;s horizontal(true) or vertical(false) layout*/&lt;br /&gt;    public attribute horizontal:Boolean=true on replace {&lt;br /&gt;        impl_requestLayout();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**The spacing between elements*/&lt;br /&gt;    public attribute spacing:Number on replace {&lt;br /&gt;        impl_requestLayout();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**The spacing between elements*/&lt;br /&gt;    public attribute alignment:Alignment=Alignment.CENTER on replace {&lt;br /&gt;        impl_requestLayout();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    init {&lt;br /&gt;        impl_layout = doLayout;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function doLayout(g:Group):Void {&lt;br /&gt;        if (sizeof this.content&gt;0 and this.maxSize&gt;0) {&lt;br /&gt;            var largerSize:Number = 0.0;&lt;br /&gt;&lt;br /&gt;            var size:Number;&lt;br /&gt;            for (node in this.content) {&lt;br /&gt;                if (node.visible) {&lt;br /&gt;                    size = if (horizontal) node.getBoundsWidth() else node.getBoundsHeight();&lt;br /&gt;                    if (size &gt; largerSize)&lt;br /&gt;                        largerSize = size;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            var numberOfElements:Integer = &lt;br /&gt;                     java.lang.Math.floor(this.maxSize / largerSize) as Integer;&lt;br /&gt;            size = this.maxSize / numberOfElements;&lt;br /&gt;            var maxOtherSize:Number=0.0;&lt;br /&gt;&lt;br /&gt;            var x:Number = 0;&lt;br /&gt;            var y:Number = 0;&lt;br /&gt;&lt;br /&gt;            for (node in this.content) {&lt;br /&gt;                if (node.visible) {&lt;br /&gt;                    node.impl_layoutX = if (horizontal)&lt;br /&gt;                                          calcPosition(x, size, node.getBoundsWidth())&lt;br /&gt;                                        else x;&lt;br /&gt;                    node.impl_layoutY = if (not horizontal)&lt;br /&gt;                                          calcPosition(y, size, node.getBoundsHeight())&lt;br /&gt;                                        else y;&lt;br /&gt;&lt;br /&gt;                    if (indexof node mod numberOfElements == numberOfElements-1) {&lt;br /&gt;                        if (horizontal) {&lt;br /&gt;                            x=0;&lt;br /&gt;                            y+=maxOtherSize+spacing;&lt;br /&gt;                            maxOtherSize=0;&lt;br /&gt;                        } else {&lt;br /&gt;                            y=0;&lt;br /&gt;                            x+=maxOtherSize+spacing;&lt;br /&gt;                            maxOtherSize=0;&lt;br /&gt;                        }&lt;br /&gt;                    } else {&lt;br /&gt;                        var otherSize;&lt;br /&gt;                        if (horizontal) {&lt;br /&gt;                            x += size + spacing;&lt;br /&gt;                            otherSize = node.getBoundsHeight();&lt;br /&gt;                        } else {//Vertical&lt;br /&gt;                            otherSize = node.getBoundsWidth();&lt;br /&gt;                            y += size + spacing;&lt;br /&gt;                        }&lt;br /&gt;                        if (otherSize&gt;maxOtherSize)&lt;br /&gt;                            maxOtherSize = otherSize;&lt;br /&gt;                    }&lt;br /&gt;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private function calcPosition(pos:Number, size:Number, nodeSize:Number):Number {&lt;br /&gt;        if (this.alignment==Alignment.CENTER) {&lt;br /&gt;            var _center = pos + (size/2);&lt;br /&gt;            _center - (nodeSize/2);&lt;br /&gt;        } else if (this.alignment==Alignment.END) {&lt;br /&gt;            var _end = pos + size;&lt;br /&gt;            _end - nodeSize;&lt;br /&gt;        } else {//BEGIN is default option&lt;br /&gt;            pos;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is a demonstration code that uses the AutoGridLayout. You can test it with box of randon size or with same size, only changing &quot;randomSize&quot; value...&lt;pre class=&quot;codebox javafx&quot;&gt;&lt;br /&gt;//Demo&lt;br /&gt;function randSize():Number {&lt;br /&gt;    java.lang.Math.random()*50+50;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;var f:javafx.application.Frame = javafx.application.Frame {&lt;br /&gt;    var randomSize = true;&lt;br /&gt;    var colors = [Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW, Color.BLACK]&lt;br /&gt;    visible:true&lt;br /&gt;    width:1000&lt;br /&gt;    height:1000&lt;br /&gt;    stage: javafx.application.Stage {&lt;br /&gt;        content: AutoGridLayout {&lt;br /&gt;                maxSize: 1000&lt;br /&gt;                horizontal:true&lt;br /&gt;                alignment: Alignment.CENTER&lt;br /&gt;                content: &lt;br /&gt;                    for(i in [0..70])&lt;br /&gt;                          javafx.scene.geometry.Rectangle{&lt;br /&gt;                                width:if (randomSize) randSize() else 100&lt;br /&gt;                                height:if (randomSize) randSize() else 100&lt;br /&gt;                                fill:colors[i mod sizeof colors]&lt;br /&gt;                          }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is an image of the demo, using random size boxes, in horizontal orientation. Notes that each line begins behind the other and each column has same size.&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_K_0BloenxHk/STCf_8idCzI/AAAAAAAAATQ/tpXH7BWppRk/s1600-h/autogridlayoutdemo.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 200px;&quot; src=&quot;http://3.bp.blogspot.com/_K_0BloenxHk/STCf_8idCzI/AAAAAAAAATQ/tpXH7BWppRk/s200/autogridlayoutdemo.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5273891084582062898&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/7639002789522131912/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=7639002789522131912&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/7639002789522131912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/7639002789522131912'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/11/playing-with-layout-custom-javafx.html' title='Playing with layout: a custom JavaFX layout manager'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_K_0BloenxHk/STCf_8idCzI/AAAAAAAAATQ/tpXH7BWppRk/s72-c/autogridlayoutdemo.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-7485134641358904461</id><published>2008-11-14T14:59:00.010-02:00</published><updated>2008-11-14T17:09:21.487-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaFX"/><title type='text'>Java/JavaFX integration: Implementing a Java Interface on JavaFX and Multiple Inheritance</title><content type='html'>One of most curious things of JavaFX is the possibility of multiple inheritance, a feature not present on it&#39;s &quot;parent language&quot; Java (&lt;a href=&quot;http://en.wikipedia.org/wiki/Multiple_inheritance&quot;&gt;take&lt;/a&gt; a &lt;a href=&quot;http://www.javaworld.com/javaqa/2002-07/02-qa-0719-multinheritance.html&quot;&gt;look&lt;/a&gt; &lt;a href=&quot;http://pclc.pace.edu/%7Ebergin/patterns/multipleinheritance.html&quot;&gt;here&lt;/a&gt;). When the Java was created, the designers decided that multiple inheritance was a confusing and not optimized thing. So, to avoid future problems, they created &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;Interfaces&lt;/span&gt;, an virtual collection of method signatures that must be implemented by an concrete class, but there&#39;re no self implementation.&lt;br /&gt;&lt;br /&gt;Resuming, an Interface can &lt;span style=&quot;font-weight: bold;&quot;&gt;extends&lt;/span&gt; various other Interfaces, and a Class can &lt;span style=&quot;font-weight: bold;&quot;&gt;implement&lt;/span&gt; various Interfaces, but it can extend only one other class. When a Class implements an Interface, we say that it implements those methods specified on that Interface.&lt;br /&gt;&lt;br /&gt;Back to JavaFX: JavaFX hasn&#39;t Interfaces, and permits multiple inheritance of classes. This is a valid code:&lt;br /&gt;&lt;pre class=&quot;codebox javafx&quot;&gt;public class ClassA extends ClassB, ClassC {&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;And that classes can be JavaFX classes or Java classes..&lt;br /&gt;&lt;br /&gt;But, if JavaFX doesn&#39;t have Interface, how can we implement a Java interface? It&#39;s simple: JavaFX consider Java interfaces as abstract classes with abstract methods. So, it&#39;s possible to do things like this:&lt;br /&gt;&lt;pre class=&quot;codebox javafx&quot;&gt;public class MyJavaFXClass extends java.io.Serializable, java.io.InputStream, java.io.StringWriter {&lt;br /&gt;...&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Serializable&lt;/span&gt; and &lt;span style=&quot;font-style: italic;&quot;&gt;InputStream&lt;/span&gt; are java interfaces, and &lt;span style=&quot;font-style: italic;&quot;&gt;StringWriter&lt;/span&gt; is a concrete class.&lt;br /&gt;&lt;br /&gt;It works very well, but there are some things that we need to note: some of Java features was not implemented in JavaFX yet, like &lt;a href=&quot;http://www.developer.com/java/other/article.php/3323661&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;varargs&lt;/span&gt;&lt;/a&gt;, &lt;span style=&quot;font-style: italic;&quot;&gt;enum&lt;/span&gt;s and generics. Lets look each one:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Generics&lt;/span&gt;:  is not a problem to inheritance. You can simple ignore then when implement a method. Java don&#39;t distinguishes between Collection&lt;string&gt; and Collection in a method signature.&lt;/string&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Enum&lt;/span&gt;: can be used on method signatures, but it&#39;s manipulated as a common object. You can&#39;t access enum values direct, like MyEnum.VALUE1. But you can use myEnumValue.name() method to compare string name of the values. Or you can user MyEnum.values() static method to get all values declared there.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Primitive types&lt;/span&gt;: It isn&#39;t a problem. JavaFX doesn&#39;t have primitive types, but if you have a method that receive a primitive type, you can use the relative object. Look for correspondences &lt;a href=&quot;http://javafx.com/releases/preview1/docs/reference/types.html#datatype&quot;&gt;here&lt;/a&gt;.&lt;span style=&quot;display: block;&quot; id=&quot;formatbar_Buttons&quot;&gt;&lt;span class=&quot;on down&quot; style=&quot;display: block;&quot; id=&quot;formatbar_CreateLink&quot; title=&quot;Link&quot; onmouseover=&quot;ButtonHoverOn(this);&quot; onmouseout=&quot;ButtonHoverOff(this);&quot; onmouseup=&quot;&quot; onmousedown=&quot;CheckFormatting(event);FormatbarButton(&#39;richeditorframe&#39;, this, 8);ButtonMouseDown(this);&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;VarArgs&lt;/span&gt;: it&#39;s the more problematic feature to JavaFX. You can&#39;t implement an interface on a concreate class that has methods with varargs! VarArgs aren&#39;t arrays! And there are no other form to substitute then. So, to resolve this problem, you can implement an abstract Java class that implements that methods and delegate then to other method, implemented by your JavaFX class. It&#39;s your unique solution now. But I think that VarArgs will be implemented in a near future in JavaFX, because it exists in a current-build&#39;s reflection class &lt;a href=&quot;http://openjfx.java.sun.com/current-build/doc/api/javafx.reflect/javafx.reflect.FXFunctionType.html&quot;&gt;javafx.reflect.FXFunctionType&lt;/a&gt; (on 11/14/2008).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Arrays&lt;/span&gt; attribute: this is a very important problem. If I have a Java interface/class with an method that receipt an array of elements, I can&#39;t override that. Example:&lt;/li&gt;&lt;/ul&gt;Java interface:&lt;br /&gt;&lt;pre class=&quot;codebox java&quot;&gt;public interface TesteI1 {&lt;br /&gt;  &lt;br /&gt;   public void method1(String[] values);&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;JavaFX class:&lt;br /&gt;&lt;pre class=&quot;codebox javafx&quot;&gt;public class TesteF1 extends TesteI1 {&lt;br /&gt;   public function method1(values: String[]):Void {&lt;br /&gt;      &lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;This is a wrong code. Why? Because &lt;code&gt;String[]&lt;/code&gt; in JavaFX isn&#39;t an array, but is a &lt;span style=&quot;font-weight: bold;&quot;&gt;Sequence&lt;/span&gt;! To show this, use this code:&lt;br /&gt;&lt;pre class=&quot;codebox javafx&quot;&gt;var f = [&quot;String1&quot;, &quot;String2&quot;];&lt;br /&gt;java.lang.System.out.println(&quot;f: {f.getClass()}&quot;);&lt;/pre&gt;&lt;br /&gt;This will show you that f is a &lt;code&gt;com.sun.javafx.runtime.sequence.ArraySequence&lt;/code&gt;. You can send it as a parameter to a method that receives an array, like &lt;code&gt;java.util.Arrays.asList(f)&lt;/code&gt;, but it isn&#39;t an array! I think that it&#39;s will be corrected in the future.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/7485134641358904461/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=7485134641358904461&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/7485134641358904461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/7485134641358904461'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/11/javajavafx-integration-implementing.html' title='Java/JavaFX integration: Implementing a Java Interface on JavaFX and Multiple Inheritance'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-3716815387754732890</id><published>2008-11-12T17:17:00.003-02:00</published><updated>2008-11-12T17:22:37.096-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaFX"/><title type='text'>Creating a Scroller Panel in JavaFX</title><content type='html'>Today I&#39;ve created an Scroller Panel in JavaFX. It was a good challenge.&lt;br /&gt;&lt;br /&gt;Here is the code:&lt;br /&gt;&lt;pre style=&quot;color: darkgrey;&quot;&gt;package brunogrossi.javafx.components;&lt;br /&gt;&lt;br /&gt;import javafx.scene.*;&lt;br /&gt;import javafx.scene.image.*;&lt;br /&gt;import javafx.scene.geometry.*;&lt;br /&gt;import javafx.scene.paint.*;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @author Bruno Grossi&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;private class Scroll extends CustomNode {&lt;br /&gt;public attribute width:Integer;&lt;br /&gt;public attribute height:Integer;&lt;br /&gt;public attribute bodyHeight: Number;&lt;br /&gt;&lt;br /&gt;private attribute position:Number;&lt;br /&gt;private attribute barSizeMin:Number=30;&lt;br /&gt;private attribute barSize:Number = 20;//bind if (height/(bodyHeight-height)&lt;barsizemin) barsizemin=&quot;&quot; else=&quot;&quot; private=&quot;&quot; attribute=&quot;&quot; number=&quot;bind&quot; height=&quot;&quot; barsize=&quot;&quot; public=&quot;&quot; function=&quot;&quot; if=&quot;&quot; value=&quot;&quot;&gt;&lt; position=&quot;0&quot;&gt; maxPosition)&lt;br /&gt;  this.position=maxPosition&lt;br /&gt;  else&lt;br /&gt;  this.position=value;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;postinit {&lt;br /&gt;  this.onMousePressed = function(e:javafx.input.MouseEvent):Void {&lt;br /&gt;      setPosition(e.getY() - (barSize / 2))&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  this.onMouseDragged = function(e:javafx.input.MouseEvent):Void {&lt;br /&gt;      setPosition(e.getY() - (barSize / 2))&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  this.onMouseWheelMoved = function(e:javafx.input.MouseEvent):Void {&lt;br /&gt;      setPosition(this.position + e.getWheelRotation())&lt;br /&gt;  };&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected function create():Node {&lt;br /&gt;  Group{&lt;br /&gt;      content: [&lt;br /&gt;          Rectangle {&lt;br /&gt;              width: bind width&lt;br /&gt;              height: bind height&lt;br /&gt;              fill: Color.WHITE&lt;br /&gt;              stroke: Color.WHITE&lt;br /&gt;          },&lt;br /&gt;          Line {&lt;br /&gt;              startX: bind width / 2&lt;br /&gt;              startY: bind 0&lt;br /&gt;              endX: bind width / 2&lt;br /&gt;              startY: bind height&lt;br /&gt;              stroke: Color.BLACK&lt;br /&gt;              strokeWidth: 1&lt;br /&gt;              effect: javafx.scene.effect.Shadow{radius:3}&lt;br /&gt;          },&lt;br /&gt;          Rectangle {&lt;br /&gt;              y: bind position&lt;br /&gt;              width: bind width&lt;br /&gt;              height: bind barSize&lt;br /&gt;              stroke: Color.BLACK&lt;br /&gt;              fill: Color.WHITESMOKE&lt;br /&gt;              arcWidth:10&lt;br /&gt;              arcHeight:20&lt;br /&gt;              smooth: true&lt;br /&gt;              effect: javafx.scene.effect.Lighting {&lt;br /&gt;                  light: javafx.scene.effect.light.DistantLight{&lt;br /&gt;                      azimuth: 60&lt;br /&gt;                      elevation: 60&lt;br /&gt;                  }&lt;br /&gt;              }&lt;br /&gt;          }&lt;br /&gt;      ]&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class ScrollPanel extends CustomNode {&lt;br /&gt;public attribute x:Integer;&lt;br /&gt;public attribute y:Integer;&lt;br /&gt;public attribute width:Integer;&lt;br /&gt;public attribute height:Integer;&lt;br /&gt;&lt;br /&gt;public attribute body: Node;&lt;br /&gt;public attribute showScroll: Boolean = true;&lt;br /&gt;&lt;br /&gt;private /*read-only*/ attribute scrollWidth = 15;&lt;br /&gt;private /*read-only*/ attribute scroll:Scroll = Scroll{&lt;br /&gt;  translateX: bind width - scrollWidth - 1&lt;br /&gt;  width: scrollWidth&lt;br /&gt;  height: bind height&lt;br /&gt;  bodyHeight: bind body.getBoundsHeight()&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;postinit{&lt;br /&gt;  var onMouseWheelMovedOld = this.onMouseWheelMoved;&lt;br /&gt;  this.onMouseWheelMoved = function(e:javafx.input.MouseEvent):Void {&lt;br /&gt;      scroll.onMouseWheelMoved(e);&lt;br /&gt;      if (onMouseWheelMovedOld!=null)&lt;br /&gt;          onMouseWheelMovedOld(e);&lt;br /&gt;  };&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected function create():Node {&lt;br /&gt;  Group {&lt;br /&gt;      translateX: bind x&lt;br /&gt;      translateY: bind y&lt;br /&gt;      clip: Rectangle{width: bind width height: bind height}&lt;br /&gt;      content: [&lt;br /&gt;          Group{&lt;br /&gt;              clip: Rectangle{width: bind this.getInternalBoundsWidth() height: bind height}&lt;br /&gt;              content: Group{&lt;br /&gt;                  content: body&lt;br /&gt;                  translateY: bind -( scroll.position * (body.getBoundsHeight()  -  scroll.height)) / scroll.maxPosition&lt;br /&gt;              }&lt;br /&gt;          },&lt;br /&gt;          if (showScroll) scroll else null,&lt;br /&gt;      ]&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function getInternalBoundsWidth(): Number {&lt;br /&gt;  if(showScroll) width - scrollWidth - 1 else width;&lt;br /&gt;}&lt;br /&gt;public function getInternalBoundsHeight(): Number {&lt;br /&gt;  height&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*This is for test */&lt;br /&gt;var s = ScrollPanel {&lt;br /&gt;width:100&lt;br /&gt;height: 200&lt;br /&gt;var colors = [Color.RED, Color.BLUE, Color.DARKGOLDENROD, Color.ALICEBLUE, Color.ANTIQUEWHITE, Color.AQUA, Color.AQUAMARINE, Color.AZURE, Color.BEIGE, Color.BISQUE, Color.CHOCOLATE]&lt;br /&gt;body: Group{&lt;br /&gt;  content:&lt;br /&gt;  for(i in [0..30]) {[Rectangle{y: i * 10 width:99 height:10 fill:colors[&lt;br /&gt;              i mod sizeof colors]  stroke:Color.BLACK},&lt;br /&gt;  javafx.scene.text.Text{y:i * 10 content:&quot;{i}&quot;}]&lt;br /&gt;      }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;javafx.application.Frame {&lt;br /&gt;visible: true&lt;br /&gt;stage: javafx.application.Stage{&lt;br /&gt;  content: s&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/barsizemin)&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/3716815387754732890/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=3716815387754732890&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/3716815387754732890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/3716815387754732890'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/11/creating-scroller-panel-in-javafx.html' title='Creating a Scroller Panel in JavaFX'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-8399480545645295584</id><published>2008-10-29T14:48:00.003-02:00</published><updated>2008-10-29T15:03:16.907-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="Maven"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><title type='text'>Good surprise migrating from Eclipse to Netbeans 6.1</title><content type='html'>Now that we decided to use JavaFX to our new Interface, I will need to use Netbeans. There aren&#39;t a functional plugin to Eclipse.&lt;br /&gt;&lt;br /&gt;We have more than 20 projects that are Eclipse projects builded with &lt;a href=&quot;http://maven.apache.org/&quot;&gt;Maven2&lt;/a&gt; (so, Maven projects). Eclipse don&#39;t manages Maven Projects, but eclipse projects can be adapted to Maven projects. Maven is executed as a &quot;External Tool&quot;. &lt;br /&gt;&lt;br /&gt;Actually, this projects are organized in 2 root projects that are composed by Modules. On Eclipse, I need to open each one as a eclipse project.&lt;br /&gt;&lt;br /&gt;Now, I installed Maven2 plugin to Netbeans and checked out the projects from Subversion repository (see this to help with &lt;a href=&quot;http://wiki.netbeans.org/FaqSubversionSSH&quot;&gt;Subversion + SSH&lt;/a&gt;). And for my surprise, Netbeans recognized the two projects as Netbeans/Maven projects automatically, show me all modules and I could open each module as a new Project. When I configure my Maven2 repository, all compiled OK. It&#39;s simple!</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/8399480545645295584/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=8399480545645295584&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8399480545645295584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8399480545645295584'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/10/good-surprise-migrating-from-eclipse-to.html' title='Good surprise migrating from Eclipse to Netbeans 6.1'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-2016572057562502117</id><published>2008-10-28T10:16:00.011-02:00</published><updated>2008-10-29T14:39:12.326-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaFX"/><category scheme="http://www.blogger.com/atom/ns#" term="RIA"/><title type='text'>First JavaFX experiment</title><content type='html'>I constructed my first JavaFX example to became to answer some of my questions posted &lt;a href=&quot;http://techblog.brunogrossi.com.br/2008/10/back-to-javafx.html&quot;&gt;here&lt;/a&gt; and to &quot;feel&quot; this script language. I will explain it above:&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; align=&quot;right&quot;&gt;&lt;pre style=&quot;color: grey;&quot;&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt;87&lt;br /&gt;88&lt;br /&gt;89&lt;br /&gt;90&lt;br /&gt;91&lt;br /&gt;92&lt;br /&gt;93&lt;br /&gt;94&lt;br /&gt;95&lt;br /&gt;96&lt;br /&gt;97&lt;br /&gt;98&lt;br /&gt;99&lt;br /&gt;100&lt;br /&gt;101&lt;br /&gt;102&lt;br /&gt;103&lt;br /&gt;104&lt;br /&gt;105&lt;br /&gt;106&lt;br /&gt;107&lt;br /&gt;108&lt;br /&gt;109&lt;br /&gt;110&lt;br /&gt;111&lt;br /&gt;112&lt;br /&gt;113&lt;br /&gt;114&lt;br /&gt;115&lt;br /&gt;116&lt;br /&gt;117&lt;br /&gt;118&lt;br /&gt;119&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;120&lt;br /&gt;121&lt;br /&gt;122&lt;br /&gt;123&lt;br /&gt;124&lt;br /&gt;125&lt;br /&gt;126&lt;br /&gt;127&lt;br /&gt;128&lt;br /&gt;129&lt;br /&gt;130&lt;br /&gt;131&lt;br /&gt;132&lt;br /&gt;133&lt;br /&gt;134&lt;br /&gt;135&lt;br /&gt;136&lt;br /&gt;137&lt;br /&gt;138&lt;br /&gt;139&lt;br /&gt;140&lt;br /&gt;141&lt;br /&gt;142&lt;br /&gt;143&lt;br /&gt;144&lt;br /&gt;145&lt;br /&gt;146&lt;br /&gt;147&lt;br /&gt;148&lt;br /&gt;149&lt;br /&gt;150&lt;br /&gt;151&lt;br /&gt;152&lt;br /&gt;153&lt;br /&gt;154&lt;br /&gt;155&lt;br /&gt;156&lt;br /&gt;157&lt;br /&gt;158&lt;br /&gt;159&lt;br /&gt;160&lt;br /&gt;161&lt;br /&gt;162&lt;br /&gt;163&lt;br /&gt;164&lt;br /&gt;165&lt;br /&gt;166&lt;br /&gt;167&lt;br /&gt;168&lt;br /&gt;169&lt;br /&gt;170&lt;br /&gt;171&lt;br /&gt;172&lt;br /&gt;173&lt;br /&gt;174&lt;br /&gt;175&lt;br /&gt;176&lt;br /&gt;177&lt;br /&gt;178&lt;/pre&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot;&gt;&lt;pre&gt;package brunogrossi.javafx;&lt;br /&gt;&lt;br /&gt;import javafx.application.*;&lt;br /&gt;import javafx.input.*;&lt;br /&gt;import javafx.scene.*;&lt;br /&gt;import javafx.scene.paint.*;&lt;br /&gt;import javafx.scene.geometry.*;&lt;br /&gt;import javafx.scene.text.*;&lt;br /&gt;import javafx.scene.effect.*;&lt;br /&gt;import javafx.scene.effect.light.*;&lt;br /&gt;import javafx.ext.swing.*;&lt;br /&gt;import javafx.animation.*;&lt;br /&gt;&lt;br /&gt;var slider = Slider{minimum: 0 maximum: 360 value: 20};&lt;br /&gt;var canvas:Node = ComponentView{component:Canvas {&lt;br /&gt;content: Group {&lt;br /&gt;content: [&lt;br /&gt;ComponentView {&lt;br /&gt;component: slider&lt;br /&gt;translateX: 10&lt;br /&gt;translateY: 70&lt;br /&gt;},&lt;br /&gt;Rectangle {&lt;br /&gt;x: 10   y: 10&lt;br /&gt;width: 200   height: 50&lt;br /&gt;arcWidth: 15   arcHeight: 15&lt;br /&gt;fill: Color.LIGHTGRAY&lt;br /&gt;},&lt;br /&gt;Text {&lt;br /&gt;x: 110   y: 40&lt;br /&gt;content: &quot;JavaFX&quot;&lt;br /&gt;font: Font {&lt;br /&gt;name: &quot;Serif&quot;&lt;br /&gt;size: 20&lt;br /&gt;style: FontStyle.BOLD&lt;br /&gt;}&lt;br /&gt;fill: Color.YELLOW&lt;br /&gt;horizontalAlignment: HorizontalAlignment.CENTER&lt;br /&gt;effect: DropShadow {&lt;br /&gt;offsetX: 2   offsetY: -2   radius: 6&lt;br /&gt;color: Color.BLACK&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;]&lt;br /&gt;effect: Lighting {&lt;br /&gt;light: DistantLight {&lt;br /&gt;azimuth: bind slider.value&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}};&lt;br /&gt;&lt;br /&gt;public class TitleBar extends CustomNode {&lt;br /&gt;&lt;br /&gt;private attribute frame: Frame;&lt;br /&gt;private attribute width: Number = 10;&lt;br /&gt;private attribute dragStartPoint: java.awt.geom.Point2D;&lt;br /&gt;attribute bgcolor: Color = Color.BLUE;&lt;br /&gt;attribute fgcolor: Color = Color.WHITE;&lt;br /&gt;&lt;br /&gt;private attribute iRotate = 0;&lt;br /&gt;private attribute iRotating = false;&lt;br /&gt;&lt;br /&gt;public function create():Node {&lt;br /&gt; this.onMousePressed = function(e:MouseEvent):Void {&lt;br /&gt; this.dragStartPoint = e.getLocalXY();&lt;br /&gt;}&lt;br /&gt;this.onMouseReleased = function(e:MouseEvent):Void {&lt;br /&gt; this.dragStartPoint = null;&lt;br /&gt;}&lt;br /&gt;this.onMouseDragged = function(e:MouseEvent):Void {&lt;br /&gt; this.frame.x = (e.getScreenX() - this.dragStartPoint.getX() as Integer);&lt;br /&gt; this.frame.y = (e.getScreenY() - this.dragStartPoint.getY() as Integer);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return Group {&lt;br /&gt;content: [&lt;br /&gt; Rectangle{&lt;br /&gt;  x: 0&lt;br /&gt;  y: 0&lt;br /&gt;    width: bind width&lt;br /&gt;    height: bind frame.height&lt;br /&gt;&lt;br /&gt;    fill: LinearGradient {&lt;br /&gt;          startX: 0.0&lt;br /&gt;          startY: 0.0&lt;br /&gt;          endX: 0.0&lt;br /&gt;          endY: 1.0&lt;br /&gt;          proportional: true&lt;br /&gt;          stops: [&lt;br /&gt;             Stop { offset: 0.0 color: Color.WHITE },&lt;br /&gt;             Stop { offset: 1.0 color: bind bgcolor }&lt;br /&gt;          ]&lt;br /&gt;    }&lt;br /&gt; },&lt;br /&gt;&lt;br /&gt; javafx.scene.geometry.Polygon {&lt;br /&gt;      var t = Timeline {&lt;br /&gt;            autoReverse: false&lt;br /&gt;&lt;br /&gt;            keyFrames: [KeyFrame{time  : 0s&lt;br /&gt;                         values: iRotate =&gt; 0.0},&lt;br /&gt;&lt;br /&gt;                KeyFrame{time  : 2s&lt;br /&gt;                     values: iRotate =&gt; 180.0 tween Interpolator.LINEAR&lt;br /&gt;                     action: function() {this.iRotating = false}&lt;br /&gt;                 }&lt;br /&gt;            ]//keyFrames&lt;br /&gt;      }//Timeline;&lt;br /&gt;      transform: javafx.scene.transform.Rotate{&lt;br /&gt;            angle: bind iRotate&lt;br /&gt;            x: 2+(width-2-2)/2&lt;br /&gt;            y: 2+(width-2-2)/2&lt;br /&gt;      };&lt;br /&gt;      stroke: Color.BLACK&lt;br /&gt;      fill: Color.BLANCHEDALMOND&lt;br /&gt;      points: [&lt;br /&gt;          2, 2,&lt;br /&gt;          2, width-2,&lt;br /&gt;          width-2, width-2,&lt;br /&gt;          width-2, 2,&lt;br /&gt;          2, width-2,&lt;br /&gt;          2, 2,&lt;br /&gt;          width-2, width-2,&lt;br /&gt;          width-2, 2&lt;br /&gt;      ]&lt;br /&gt;      onMouseClicked: function(e: MouseEvent):Void {&lt;br /&gt;        //Interessant point to be analized: how to call function on variables.&lt;br /&gt;        if (frame.closeAction!=null)&lt;br /&gt;            frame.closeAction();&lt;br /&gt;      }&lt;br /&gt;      onMouseEntered: function(e: MouseEvent):Void {&lt;br /&gt;        if (not this.iRotating) {&lt;br /&gt;            this.iRotating = true;&lt;br /&gt;            t.start();&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt; },&lt;br /&gt; Text {&lt;br /&gt;      content: bind frame.title&lt;br /&gt;      fill: bind fgcolor&lt;br /&gt;&lt;br /&gt;      textOrigin: TextOrigin.BASELINE&lt;br /&gt;      rotate: -90&lt;br /&gt;      x: 0&lt;br /&gt;      y: 0&lt;br /&gt;      translateX: bind width&lt;br /&gt;      translateY: bind frame.height&lt;br /&gt; }&lt;br /&gt;]&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class MyFrame extends Frame {&lt;br /&gt;&lt;br /&gt;postinit {&lt;br /&gt; insert TitleBar{&lt;br /&gt;   frame: this&lt;br /&gt;   bgcolor:Color.BLACK&lt;br /&gt; } before this.stage.content[0];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function createWindow(): java.awt.Window {&lt;br /&gt; //this is a trick, because Frame don&#39;t has a undecorated attribute.&lt;br /&gt; var f: java.awt.Window = super.createWindow();&lt;br /&gt; (f as javax.swing.JFrame).setUndecorated(true);&lt;br /&gt; return f;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var f:Frame = MyFrame {&lt;br /&gt; title: &quot;Example&quot;&lt;br /&gt; width: 228&lt;br /&gt; height: 140&lt;br /&gt; opacity: 0.5&lt;br /&gt; closeAction: function() {&lt;br /&gt;   java.lang.System.exit(1);&lt;br /&gt; }&lt;br /&gt; stage: Stage {&lt;br /&gt;   content: [canvas]&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;f.visible=true;&lt;/pre&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;My goal with this test was to create a custom &lt;span style=&quot;font-style: italic;&quot;&gt;title bar&lt;/span&gt; to my Frame. And a lateral (rotated) title bar! So, the &lt;span style=&quot;font-weight: bold;&quot;&gt;slider&lt;/span&gt; and &lt;span style=&quot;font-weight: bold;&quot;&gt;canvas&lt;/span&gt; variables are part of the body of my frame, and was adapted from &lt;a href=&quot;http://java.sun.com/javafx/reference/creating_guis/&quot;&gt;this tutorial&lt;/a&gt;, and are doesn&#39;t explained here. The &lt;span style=&quot;font-style: italic;&quot;&gt;content&lt;/span&gt; of MyFrame must be anything...&lt;br /&gt;&lt;br /&gt;First, I created a &lt;span style=&quot;font-style: italic;&quot;&gt;CustomNode&lt;/span&gt; called &lt;span style=&quot;font-weight: bold;&quot;&gt;TitleBar&lt;/span&gt; (lines 54-144). The &lt;span style=&quot;font-family:courier new;&quot;&gt;javafx.scene.CustomNode&lt;/span&gt; defines a Node that can be customized, only defining the &lt;span style=&quot;font-family:courier new;&quot;&gt;create():Node&lt;/span&gt; function.&lt;br /&gt;&lt;br /&gt;This &lt;span style=&quot;font-weight: bold;&quot;&gt;TitleBar&lt;/span&gt; class has an attribute &lt;span style=&quot;font-style: italic;&quot;&gt;frame&lt;/span&gt;, that will be the frame that this component will control. The TitleBar will be associated with the frame on &lt;span style=&quot;font-weight: bold;&quot;&gt;MyFrame&lt;/span&gt;&#39;s &lt;span style=&quot;font-family:courier new;&quot;&gt;postinit&lt;/span&gt; instruction (lines 146-153). The magic is to insert a new &lt;span style=&quot;font-family:courier new;&quot;&gt;TitleBar&lt;/span&gt; object as a first element on this frame&#39;s &lt;span style=&quot;font-family:courier new;&quot;&gt;Stage&lt;/span&gt; content. Here, we define the frame as this frame, and the background&#39;s color. Only this..&lt;br /&gt;&lt;br /&gt;In &lt;span style=&quot;font-family:courier new;&quot;&gt;MyFrame&lt;/span&gt;&#39;s definition there is other function defined: &lt;span style=&quot;font-family:courier new;&quot;&gt;createWindow()&lt;/span&gt;. I just defined it to set the window as a Undecorated window. This is a trick. As I report on &lt;a href=&quot;http://forums.sun.com/thread.jspa?threadID=5342495&quot;&gt;JavaFX forum&lt;/a&gt;, the old javafx.ui.frame has an attribute to define it as a undecorated frame, but the new &lt;span style=&quot;font-family:courier new;&quot;&gt;javafx.application.Frame&lt;/span&gt; and &lt;span style=&quot;font-family:courier new;&quot;&gt;javafx.ext.swing.SwingFrame&lt;/span&gt; hasn&#39;t. That&#39;s how I do to turn the frame undecorated.&lt;br /&gt;&lt;br /&gt;The &lt;span style=&quot;font-weight: bold;&quot;&gt;TitleBar&lt;/span&gt; class has a reference to the Frame that it will command and an &lt;span style=&quot;font-family:courier new;&quot;&gt;MouseListener&lt;/span&gt; that change frame&#39;s position based on Drag events. The &lt;span style=&quot;font-family:courier new;&quot;&gt;Text&lt;/span&gt; value binds to Frame&#39;s title and close button&#39;s event simply calls the Frame&#39;s &lt;span style=&quot;font-family:courier new;&quot;&gt;closeAction()&lt;/span&gt; function. So, we don&#39;t need to configure the title bar, because it uses &quot;frame&#39;s configurations&quot;.&lt;br /&gt;&lt;br /&gt;By the away, in the close button, I created an effect to test simple animation. When the cursor is over square, it will rotate. For my surprise, the construction that I used on previews version, &lt;span style=&quot;font-family:courier new;&quot;&gt;var i=[0..360] dur 1000&lt;/span&gt; don&#39;t work now. I need to use a &lt;span style=&quot;font-family:courier new;&quot;&gt;javafx.animation.Timeline&lt;/span&gt; (lines 99-110). &lt;span style=&quot;font-family:courier new;&quot;&gt;Timeline&lt;/span&gt; is a good class, but for simple animations, the other construction is better and simple... Is there another construction like that?&lt;br /&gt;&lt;br /&gt;That&#39;s the window:&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_K_0BloenxHk/SQiQzXtyOzI/AAAAAAAAASo/Zmxwluiltxg/s1600-h/JavaFX_example.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 228px; height: 140px;&quot; src=&quot;http://2.bp.blogspot.com/_K_0BloenxHk/SQiQzXtyOzI/AAAAAAAAASo/Zmxwluiltxg/s320/JavaFX_example.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5262615376796203826&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/2016572057562502117/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=2016572057562502117&amp;isPopup=true' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/2016572057562502117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/2016572057562502117'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/10/first-javafx-experiment.html' title='First JavaFX experiment'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_K_0BloenxHk/SQiQzXtyOzI/AAAAAAAAASo/Zmxwluiltxg/s72-c/JavaFX_example.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-6403744082501807766</id><published>2008-10-20T17:16:00.005-02:00</published><updated>2008-10-20T17:42:32.075-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaFX"/><category scheme="http://www.blogger.com/atom/ns#" term="RIA"/><title type='text'>Installing JavaFX - part 2</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_K_0BloenxHk/SPzaTTgnd3I/AAAAAAAAASU/5X9JDQtU23Q/s1600-h/JFXPallet.png&quot;&gt;&lt;img style=&quot;margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;&quot; src=&quot;http://3.bp.blogspot.com/_K_0BloenxHk/SPzaTTgnd3I/AAAAAAAAASU/5X9JDQtU23Q/s320/JFXPallet.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5259318490051344242&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;I can&#39;t install JavaFX kit in NB6.5... It says that a org.netbeans.modules.javawebstart was need.&lt;br /&gt;&lt;br /&gt;I but I installed it in NB6.1 and it worked fine. A first surprise was the new Palette with some components and other JavaFX&#39;s artifacts that helps newbies like me. I will now work in implementing some examples, learn with &lt;a href=&quot;http://www.javapassion.com/javafx/&quot;&gt;Jim Weaver and Sang Shin&#39;s &quot;Free&quot; JavaFX Programming (with Passion!) Online Course&lt;/a&gt;, and try to implement my own solutions using JavaFX.&lt;br /&gt;&lt;br /&gt;And my first HelloWorld application created only with Dragging and Dropping was:&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_K_0BloenxHk/SPzej-y5QYI/AAAAAAAAASc/0LdZ_gSOHfs/s1600-h/telaJavaFX1.png&quot;&gt;&lt;img style=&quot;margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;&quot; src=&quot;http://3.bp.blogspot.com/_K_0BloenxHk/SPzej-y5QYI/AAAAAAAAASc/0LdZ_gSOHfs/s320/telaJavaFX1.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5259323174595150210&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;Frame {&lt;br /&gt;   title: &quot;MyApplication&quot;&lt;br /&gt;   width: 200&lt;br /&gt;   height: 200&lt;br /&gt;   opacity: 100&lt;br /&gt;   closeAction: function() {&lt;br /&gt;       java.lang.System.exit( 0 );&lt;br /&gt;   }&lt;br /&gt;   visible: true&lt;br /&gt;&lt;br /&gt;   stage: Stage {&lt;br /&gt;       content: [Circle {&lt;br /&gt;               centerX: 100, centerY: 100&lt;br /&gt;               radius: 40&lt;br /&gt;               fill: Color.BLUE&lt;br /&gt;           },&lt;br /&gt;           Polygon {&lt;br /&gt;               points : [ 0,0, 100,0, 100,100 ]&lt;br /&gt;               fill: Color.YELLOW&lt;br /&gt;           },&lt;br /&gt;           Text {&lt;br /&gt;               font: Font {&lt;br /&gt;                   size: 24&lt;br /&gt;                   style: FontStyle.PLAIN&lt;br /&gt;               }&lt;br /&gt;               x: 10, y: 30&lt;br /&gt;               content: &quot;HelloWorld&quot;&lt;br /&gt;               rotate: 10&lt;br /&gt;           }]&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(Anyone have an solution to coloring Java and JavaFX here on Blogger?)</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/6403744082501807766/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=6403744082501807766&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/6403744082501807766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/6403744082501807766'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/10/installing-javafx-part-2.html' title='Installing JavaFX - part 2'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_K_0BloenxHk/SPzaTTgnd3I/AAAAAAAAASU/5X9JDQtU23Q/s72-c/JFXPallet.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-693713904657186052</id><published>2008-10-20T14:34:00.006-02:00</published><updated>2008-10-20T14:52:54.852-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaFX"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><title type='text'>Installing JavaFX</title><content type='html'>Since I started again to learn JavaFX, I&#39;ve decided to reinstall Netbeans and JavaFX plugin, to have the &quot;state-of-the-art&quot; in my computer. (Do you known that there are no good, neither bad, options to develop JavaFX in Eclipse?).&lt;br /&gt;&lt;br /&gt;I install the new JDK 1.6.0_10 that I said in my &lt;a href=&quot;http://techblog.brunogrossi.com.br/2008/10/back-to-javafx.html&quot;&gt;last post&lt;/a&gt;, and, for my surprise, the &quot;&lt;a href=&quot;http://javafx.netbeans.org/&quot;&gt;New! JavaFX Preview SDK&lt;/a&gt;&quot; hasn&#39;t an download version to Linux. But it&#39;s ok.. I&#39;m patient.&lt;br /&gt;&lt;br /&gt;Now, I downloaded &lt;a href=&quot;http://www.netbeans.org/community/releases/65/index.html&quot;&gt;Netbeans 6.5 beta&lt;/a&gt;, JavaSE version, and the lastests &lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;a href=&quot;http://deadlock.netbeans.org/hudson/job/JavaFX_NB_daily/lastSuccessfulBuild/artifact/main/nbbuild/nbms/compress/2008-10-20_02-31-53.tar.gz&quot;&gt;developmental build&lt;/a&gt;&lt;/span&gt;, directed to NB6.1, and I will try to install it manually.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/693713904657186052/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=693713904657186052&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/693713904657186052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/693713904657186052'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/10/installing-javafx.html' title='Installing JavaFX'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-8256705295975138241</id><published>2008-10-16T11:54:00.005-03:00</published><updated>2008-10-17T11:28:16.969-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaFX"/><category scheme="http://www.blogger.com/atom/ns#" term="RIA"/><title type='text'>Back to JavaFX</title><content type='html'>I decided to (re)inaugurate my blog, because of my new phase in my work. I need now to rewrite and improve the user interface of our desktop application. And I convince my partners that JavaFX is the solution to our problems. &lt;a href=&quot;http://javafx.com/&quot;&gt;JavaFX&lt;/a&gt; is the official solution to &lt;a href=&quot;http://en.wikipedia.org/wiki/Rich_Internet_application&quot;&gt;RIA&lt;/a&gt; in Java. It&#39;s main rivals are &lt;a href=&quot;http://www.adobe.com/products/flash/&quot;&gt;Flash&lt;/a&gt;, &lt;a href=&quot;http://www.adobe.com/products/air/&quot;&gt;Adobe AIR&lt;/a&gt; and &lt;a href=&quot;http://silverlight.net/&quot;&gt;MS Silverlight&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;First, I need to study JavaFX and discover it&#39;s features to desktop UI development. But Web development with it promises a good future after &lt;a href=&quot;http://java.sun.com/javase/6/webnotes/6u10.html&quot;&gt;JDK 1.6.0 update 10&lt;/a&gt;, that comes with the so expected &quot;&lt;span style=&quot;font-weight:bold;&quot;&gt;Next Generation Java Plug-in&lt;/span&gt;&quot;: &quot;This release introduces a new (default) implementation of the Java Plug-in that provides support for applets in the web browser. The next generation Java Plug-in combines the best architectural features of applet and Java Web Start technologies. It provides a robust platform for deployment of Java and JavaFX content in the web browser.&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My main questions about JavaFX:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Can I create a custom look and feel with JavaFX? My idea is to create an beautiful L&amp;F (ex. a title bar) with JavaFX features.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Can I create an efficient transparent window?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The most important: how to create a beautiful look to my application? :)&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/8256705295975138241/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=8256705295975138241&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8256705295975138241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8256705295975138241'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/10/back-to-javafx.html' title='Back to JavaFX'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-8543481355182629745</id><published>2008-10-16T10:12:00.003-03:00</published><updated>2008-10-16T11:54:42.248-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sharing ideas"/><title type='text'>Back to blogosphere, and now in English</title><content type='html'>Hey, I&#39;m back!&lt;br /&gt;&lt;br /&gt;I guess that I need to practice more my English. I&#39;m not an fluent english speaker/writer, but I concluded that the only way to improve english is practicing. There are no other option...&lt;br /&gt;&lt;br /&gt;On last months I&#39;m writing a lot of e-mails and program documentations in english. Even some IM conversations. My curriculum is 99% in english on &lt;a href=&quot;http://www.linkedin.com/in/brunogrossi&quot;&gt;LinkedIn profile&lt;/a&gt;. In some days, I want to translate (and get a better look) my home page to english too.&lt;br /&gt;&lt;br /&gt;The world is my workplace, and world talk, write and blog in english!</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/8543481355182629745/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=8543481355182629745&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8543481355182629745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8543481355182629745'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/10/back-to-blogosphere-and-now-in-english.html' title='Back to blogosphere, and now in English'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-1210764654085815425</id><published>2008-05-07T22:46:00.003-03:00</published><updated>2008-05-07T23:51:24.609-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dell"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Atualizando para Ubuntu 8.04 no meu Dell Vostro 1000</title><content type='html'>Acabei de atualizar o meu Ubuntu 7.10 para a versão 8.04, no meu Dell Vostro 1000. Deu 99% certo!&lt;br /&gt;&lt;br /&gt;Quando comprei meu notebook, em dezembro passado, nem vi o Windows Vista que veio instalado. Já formei de cara e coloquei o Ubuntu. Porém, tive vários problemas de compatibilidade, que com o tempo fui driblando. Listo abaixo os problemas:&lt;br /&gt;&lt;br /&gt;1- Minha placa de rede wireless não funcionou de inicio, mas um driver proprietário indicado pelo próprio sistema resolveu o problema.&lt;br /&gt;&lt;br /&gt;2- Apesar das teclas especiais de volume funcionarem perfeitamente, as de brilho não funcionaram. Resolvi criando alguns scripts e alterando algumas configurações para que esses scripts fossem chamados ao acionar as teclas. O incoveniente era que não aparecia o indicador gráfico de brilho.&lt;br /&gt;&lt;br /&gt;3- Os efeitos especiais, tão divulgados na versão do Ubuntu 7.10, não funcionaram com minha placa gráfica, uma ATI Radeon Xpress. Tive a impressão que alguns softwares que usam o OpenGL, como o Google Earth, também não funcionaram por algum motivo semelhante. Em suma, a placa gráfica não era suportada.&lt;br /&gt;&lt;br /&gt;4- O cooler da CPU não liga (fan control)! Tentei resolver de várias maneiras, mas não consegui, e comprei um cooler externo.&lt;br /&gt;&lt;br /&gt;5- O Flash não funcionava direito no Firefox (eu uso a versão 64bits). às vezes até funcionava, mas logo depois sumia da página.&lt;br /&gt;&lt;br /&gt;6- A Hibernação não funciona. Trava antes de encerrar. Tentei várias soluções que achei na internet, mas não resolveu.&lt;br /&gt;&lt;br /&gt;Alguns artigos que li para a versão 7.04 estão em &lt;a href=&quot;http://del.icio.us/bgrossi/dell&quot;&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ao atualizar para a versão 8.04, a placa de Wireless teve que ser reinstalada, o que aconteceu sem maiores problemas, e o indicador de brilho passou a funcionar. O Flash, até agora está funcionando bem...&lt;br /&gt;&lt;br /&gt;E para a minha grande surpresa, os efeitos especiais passaram a funcionar, foi instalado um driver melhor da placa ATI, e o software de configuração ATI Catalyst Control Center. Até o Google Earth passou a funcionar (apesar de ainda estar piscando muito, vou entender melhor o que acontece).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A melhor supresa: o Cooler passou a funcionar!! Isso era o que mais me preocupava, e quase me fez ir para o Windows...&lt;br /&gt;&lt;br /&gt;Agora é brincar de descobrir as coisas novas. O Firefox 3 (beta 5), ficou bem bacana. Os efeitos gráficos já estão cansando (em pouco mais de 1h de uso)...&lt;br /&gt;&lt;br /&gt;Vou também testar a Hibernação...&lt;br /&gt;&lt;br /&gt;Parabéns à turma do Ubuntu 8.04. A primeira impressão é muito boa. A atualização ocorreu automaticamente, sem nenhum esforço nem problemas técnicos.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/1210764654085815425/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=1210764654085815425&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/1210764654085815425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/1210764654085815425'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/05/atualizando-para-ubuntu-804-no-meu-dell.html' title='Atualizando para Ubuntu 8.04 no meu Dell Vostro 1000'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-684594916797462412</id><published>2008-04-18T11:08:00.002-03:00</published><updated>2008-04-18T11:24:32.382-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ide"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="opensource"/><title type='text'>NetBeans IDE 6.1 Beta Blogging Contest - não deu tempo!</title><content type='html'>É.. não deu tempo para eu particiar do concurso. Eu queria ter feito alguma coisa com JavaFX, mas ainda não está disponível o plugin para essa versão.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/684594916797462412/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=684594916797462412&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/684594916797462412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/684594916797462412'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/04/netbeans-ide-61-beta-blogging-contest_18.html' title='NetBeans IDE 6.1 Beta Blogging Contest - não deu tempo!'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-8010198531544122079</id><published>2008-04-02T14:49:00.003-03:00</published><updated>2008-04-02T14:57:35.206-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ide"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><title type='text'>NetBeans IDE 6.1 Beta Blogging Contest</title><content type='html'>Está no ar o &lt;a href=&quot;http://www.netbeans.org/competition/blog-contest.html&quot;&gt;NetBeans IDE 6.1 Beta Blogging Contest&lt;/a&gt;, um concurso que irá sortear 10 blogeiros, que falam sobre o NetBeans, para ganhar US$500! É um prêmio muito bom para explorar o NetBeans. Eu fiquei na dúvida se deveria participar ou não, afinal eu sempre gostei mais do Eclipse, mas esse movimento todo que a Sun e a comunidade tem feito para mostrar que o NetBeans pode ser melhor tem me chamado a atenção. Portanto, vou experimentar e blogar... Mas não vou &quot;puxar saco&quot; de ninguem por causa disso...&lt;br /&gt;&lt;br /&gt;Infelizmente, me parece que ainda não há o plugin do JavaFX para a versão 6.1...&lt;br /&gt;&lt;br /&gt;O que mais eu gosto do Eclipse, como a maioria dos desenvolvedores, é o editor dele, e a parte de Refactoring... vou investigar como está isso nessa primeira versão.. Mas minha primeira impressão foi que está bem melhor.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/8010198531544122079/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=8010198531544122079&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8010198531544122079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8010198531544122079'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/04/netbeans-ide-61-beta-blogging-contest.html' title='NetBeans IDE 6.1 Beta Blogging Contest'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-1149937455980339373</id><published>2008-04-01T16:40:00.002-03:00</published><updated>2008-04-01T16:47:03.050-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><title type='text'>Coincidência: Camisa do Netbeans chegou</title><content type='html'>No momento em que eu acabava o post anterior, o meu interfone tocou, e era o cara da FedEx, com uma encomenda pra mim. Submeti o post, e fui lá ver. Por coincidência, era um envio da Sun, com a minha camiseta e também o certificado por ter colaborado na tradução do Netbeans. Minha ajuda foi bem pequena, mas ainda assim eles me enviaram..&lt;br /&gt;&lt;br /&gt;Obrigado, Sun..&lt;br /&gt;&lt;br /&gt;Alias, a camiseta ficou muito bacana!</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/1149937455980339373/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=1149937455980339373&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/1149937455980339373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/1149937455980339373'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/04/coincidncia-camisa-do-netbeans-chegou.html' title='Coincidência: Camisa do Netbeans chegou'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-807225617374902054</id><published>2008-04-01T13:02:00.004-03:00</published><updated>2008-04-01T13:09:33.714-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="ide"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><title type='text'>Netbeans 6.1 beta - primeiras impressões</title><content type='html'>Eu, que gosto muito do Eclipse, venho acomanhando sempre a evolução do Netbeans, que está cada dia melhor, na espera de ser convencido a mudar de plataforma. Tenho instalado as versões 5.5, 6.0 e agora estou instalando a versão beta do 6.1, para ver as melhorias. Ainda nem li quais são as melhorias implementadas, mas já estou instalando. Baixei logo a versão completa, com todos os plugins, porque sou muito curioso. O que eu mais gosto do netbeans é a sua integração facilitada com os servidores de aplicação (nessa versão, o Glassfish V2ur1, o Tomcat 6..., e o OpenESB ...). A instalação completa gasta pouco mais de 500MB...&lt;br /&gt;&lt;br /&gt;Como um primeiro teste, resolvi criar um novo projeto &quot;Java Desktop Application&quot;, para também matar a minha curiosidade quanto ao &lt;a href=&quot;http://jcp.org/en/jsr/detail?id=296&quot;&gt;Swing Application Framework (JSR 296)&lt;/a&gt;. Interessante que agora a pasta de projetos não chama mais &quot;netbeans&quot;, mas sim &quot;NetBeansProjects&quot;. Muito mais claro. O wizard me deu duas opções para criação de projetos: Basic Application ou o Database Application. Escolhi a primeira opção, e me apareceu a tela como abaixo.&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_K_0BloenxHk/R_JdVnp08mI/AAAAAAAAAD0/6HNpOiiWtTY/s1600-h/netbeans1.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://3.bp.blogspot.com/_K_0BloenxHk/R_JdVnp08mI/AAAAAAAAAD0/6HNpOiiWtTY/s320/netbeans1.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5184308747059917410&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Mas o meu interesse mesmo no Netbeans é investigar o &lt;a href=&quot;https://openjfx.dev.java.net/&quot;&gt;JavaFX&lt;/a&gt; e seu plugin para o netbeans. O plugin para Eclipse é muito ruim ainda... Depois colocarei um post sobre isso.&lt;br /&gt;&lt;br /&gt;Outra coisa também que pretendo aprender é como trabalhar com o Maven junto com o Netbeans. No eclipse consigo trabalhar muito bem. Vamos ver se a idéia que uso no Eclipse serve para o Netbeans.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/807225617374902054/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=807225617374902054&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/807225617374902054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/807225617374902054'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/04/netbeans-61-beta-primeiras-impresses.html' title='Netbeans 6.1 beta - primeiras impressões'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_K_0BloenxHk/R_JdVnp08mI/AAAAAAAAAD0/6HNpOiiWtTY/s72-c/netbeans1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-3606049165430785505</id><published>2008-02-05T19:25:00.000-02:00</published><updated>2008-02-05T19:36:05.841-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="tech"/><category scheme="http://www.blogger.com/atom/ns#" term="yahoo"/><title type='text'>Google ofereçe ajuda ao Yahoo</title><content type='html'>Segundo a Exame, o &lt;a href=&quot;http://portalexame.abril.com.br/tecnologia/m0150909.html&quot;&gt;Google pode ter oferecido algum tipo de ajuda ao Yahoo&lt;/a&gt; para tentar evitar que esta aceite a oferta (quase irrecusável, já que é &lt;a href=&quot;http://weblog.infoworld.com/openresource/archives/2008/02/more_questions.html&quot;&gt;60% a mais que o valor atual&lt;/a&gt;) da Microsoft. As coisas estão realmente pegando fogo nessa briga pelo mercado de propaganda online.&lt;br /&gt;&lt;br /&gt;Não deixe de ler também:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://weblog.infoworld.com/openresource/archives/2008/02/more_questions.html&quot;&gt;More Questions for Microsoft and Yahoo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://weblog.infoworld.com/openresource/archives/2008/02/microsoft_to_ya.html&quot;&gt;MICROSOFT TO YAHOO: WE HAVE R&amp;amp;D SYNERGIES&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/3606049165430785505/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=3606049165430785505&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/3606049165430785505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/3606049165430785505'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/02/google-oferee-ajuda-ao-yahoo.html' title='Google ofereçe ajuda ao Yahoo'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-6818691260191960213</id><published>2008-02-03T10:24:00.000-02:00</published><updated>2008-02-03T10:36:19.147-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="tech"/><category scheme="http://www.blogger.com/atom/ns#" term="yahoo"/><title type='text'>Mais compras? MS comprando Yahoo!?</title><content type='html'>Esse ano promete muitas mudanças no mercado de TI... Agora foi a &lt;a href=&quot;http://www.microsoft.com&quot;&gt;Microsoft&lt;/a&gt; quem fez &lt;a href=&quot;http://www.infoworld.com/article/08/02/01/Microsoft-offers-to-buy-Yahoo-for-44-billion_1.html&quot;&gt;uma oferta para a compra&lt;/a&gt; da &lt;a href=&quot;http://www.yahoo.com&quot;&gt;Yahoo!&lt;/a&gt;, pelo valor de US$44,6 bilhões. Isso aconteceu no mesmo dia em que &lt;a href=&quot;http://www.infoworld.com/article/08/02/01/Terry-Semel-quits-Yahoo-board_1.html&quot;&gt;Terry Semel deixa a diretoria&lt;/a&gt; do Yahoo, e depois de várias tentativas tanto da MS quanto do Yahoo de bater o Google no mercado de marketing online. A união das duas empresas poderia unir esforços e gerar economias suficientes para ultrapassar o Google??&lt;br /&gt;Esperança há: &quot;&lt;span class=&quot;artText&quot;&gt;Microsoft expects the market for online advertising to almost double in size over the next three years, from $40 billion in 2007 to $80 billion by 2010. A merger will allow it to realize economies of scale and reduce capital costs as it addresses this market&quot;.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/6818691260191960213/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=6818691260191960213&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/6818691260191960213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/6818691260191960213'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/02/mais-compras-ms-comprando-yahoo.html' title='Mais compras? MS comprando Yahoo!?'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-4074126673405612125</id><published>2008-02-01T00:36:00.000-02:00</published><updated>2008-02-01T01:00:49.227-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="opensource"/><category scheme="http://www.blogger.com/atom/ns#" term="sun"/><title type='text'>E falando em Compras... a Sun comprou a MySQL AB</title><content type='html'>Não foi só a &lt;a href=&quot;http://techblog.brunogrossi.com.br/2008/01/oracle-adquiriu-bea.html&quot;&gt;Oracle que foi à compras&lt;/a&gt; nesse início de ano... No mesmo dia (16/01/2008), a &lt;a href=&quot;http://www.sun.com/&quot;&gt;Sun&lt;/a&gt; &lt;a href=&quot;http://www.mysql.com/news-and-events/sun-to-acquire-mysql.html&quot;&gt;anunciou a compra&lt;/a&gt; da &lt;a href=&quot;http://www.mysql.com/&quot;&gt;MySQL AB&lt;/a&gt;, fabricante de um dos melhores bancos de dados do mercado, e um dos mais populares projetos open source do mundo (integrante da famosa sigla &lt;a href=&quot;http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29&quot;&gt;LAMP&lt;/a&gt;).  Com essa aquisição, a Sun não só avança na sua onda open-source, como também passa a competir com outros grandes &lt;span style=&quot;font-style: italic;&quot;&gt;players&lt;/span&gt; de Banco de Dados, como a Microsoft e a Oracle.&lt;br /&gt;&lt;br /&gt;Me parece que a Sun está querendo mudar a sigla LAMP para MOGJN ou coisa parecida: &quot;The database from MySQL, OpenSolaris and GlassFish, together with Sun&#39;s Java platform and NetBeans communities, will create a powerful Web application platform across a wide range of customers shifting their applications to the Web.&quot; Podemos notar que realmente, agora a Sun tem todas as ferramentas para a construção de uma plataforma web corporativa em suas mãos.&lt;br /&gt;&lt;br /&gt;Vamos ver para onde isso irá caminhar. Por enquanto, espero que essa transação  traga muitos benefícios para esse banco tão prático e fácil de utilizar...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Não deixe de ler o &lt;a href=&quot;http://blogs.sun.com/jonathan/date/20080119&quot;&gt;post&lt;/a&gt; no blog do Jonathan sobre a aquisição... Ele fala sobre os motivos, como foi a transação, e o futuro do MySQL. E também do relacionamento com outros parceiros, como a Oracle e o &lt;a href=&quot;http://www.postgresql.org/&quot;&gt;PostgresSQL&lt;/a&gt;, outro excelente banco open-source.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/4074126673405612125/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=4074126673405612125&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/4074126673405612125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/4074126673405612125'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/02/e-falando-em-compras-sun-comprou-mysql.html' title='E falando em Compras... a Sun comprou a MySQL AB'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-2749066061773915801</id><published>2008-01-31T22:43:00.000-02:00</published><updated>2008-01-31T22:57:16.576-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaEE"/><title type='text'>Oracle adquiriu a BEA</title><content type='html'>A &lt;a href=&quot;http://www.oracle.com/&quot;&gt;Oracle&lt;/a&gt; &lt;a href=&quot;http://www.oracle.com/bea/index.html&quot;&gt;comprou&lt;/a&gt;, no último dia 16/01, a &lt;a href=&quot;http://www.oracle.com/corporate/press/2008_jan/bea.html&quot;&gt;BEA&lt;/a&gt;, fabricante de um dos mais famosos servidores de aplicação / middleware, o &lt;a href=&quot;http://www.bea.com/framework.jsp?CNT=index.htm&amp;amp;FP=/content/products/weblogic&amp;amp;WT.ac=topnav_products_weblogic&quot;&gt;BEA WebLogic&lt;/a&gt;. A Oracle nunca conseguiu popularizar o seu AS, o &lt;a href=&quot;http://www.oracle.com/appserver/index.html&quot;&gt;Oracle AS&lt;/a&gt;... Com a compra da BEA, resta saber qual a estratégia para novos produtos, se teremos a Oracle vendendo dois produtos em paralelo ou uma mistura de ambos. Veja uma discussão &lt;a href=&quot;http://searchoracle.techtarget.com/news/article/0,289142,sid41_gci1294298,00.html?track=NL-338&amp;amp;ad=623478&amp;amp;Offer=ORunsc0131ob&amp;amp;asrc=EM_USC_2981052&amp;amp;uid=2708170&quot;&gt;aqui&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/2749066061773915801/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=2749066061773915801&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/2749066061773915801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/2749066061773915801'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2008/01/oracle-adquiriu-bea.html' title='Oracle adquiriu a BEA'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-2747739382407314152</id><published>2007-12-15T19:37:00.000-02:00</published><updated>2007-12-17T11:11:50.298-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="knol"/><category scheme="http://www.blogger.com/atom/ns#" term="web2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="wikipedia"/><title type='text'>Google quer concorrer com Wikipedia</title><content type='html'>A muito já sabemos que a Wikipedia é um dos sites que mais incomodam a Google. Ainda mais depois que a Wikipedia lançou idéias sobre concorrer com o Google no setor de buscas. Mas agora a guerra foi declarada! A idéia da Google é construir uma mega enciclopédia online colaborativa, para substituir a Wikipedia. Veja mais na entrada do dia 12/12 no blog oficial:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://googleblog.blogspot.com/2007/12/encouraging-people-to-contribute.html&quot;&gt;Encouraging people to contribute knowledge&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;E também na Veja.com, do dia 14/12: &lt;a href=&quot;http://vejaonline.abril.com.br/notitia/servlet/newstorm.ns.presentation.NavigationServlet?publicationCode=1&amp;pageCode=1&amp;textCode=134805&amp;date=currentDate&quot;&gt;O Google quer concorrer com a Wikipedia&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Alguem duvida? A Google não tá parecendo a Microsoft??</content><link rel="related" href="http://googleblog.blogspot.com/2007/12/encouraging-people-to-contribute.html" title="Google quer concorrer com Wikipedia"/><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/2747739382407314152/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=2747739382407314152&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/2747739382407314152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/2747739382407314152'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2007/12/google-quer-concorrer-com-wikipedia.html' title='Google quer concorrer com Wikipedia'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-8256401922444170082</id><published>2007-12-15T19:25:00.000-02:00</published><updated>2007-12-15T19:35:05.221-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="homeoffice"/><category scheme="http://www.blogger.com/atom/ns#" term="JXTA"/><category scheme="http://www.blogger.com/atom/ns#" term="work"/><title type='text'>Trabalho em casa</title><content type='html'>Hoje faz um mês e meio que &lt;a href=&quot;http://techblog.brunogrossi.com.br/2007/11/novos-rumos.html&quot;&gt;saí da Powerlogic&lt;/a&gt; para trabalhar em casa. Está sendo uma ótima experiência. Tenho perseguido melhorar minha organização e meu tempo. Além disso, fiz novos amigos que moram no exterior.&lt;br /&gt;&lt;br /&gt;Estou trabalhando para um instituto de pesquisa no Chile, desenvolvendo alguns produtos que utilizam tecnologia de ponta. É muito bom estudar coisas novas. A primeira etapa envolve o uso do &lt;a href=&quot;http://jxta.dev.java.net&quot;&gt;JXTA&lt;/a&gt; para criar redes &lt;a href=&quot;http://en.wikipedia.org/wiki/Peer-to-peer&quot;&gt;P2P&lt;/a&gt;, que eu venho acompanhando e estudando desde 2002, quando ainda estava na graduação. É bom utilizar algo que conhecemos, e melhor ainda, poder passar esse conhecimento aos outros.&lt;br /&gt;&lt;br /&gt;O problema de trabalhar em casa tem sido os constantes assaltos à geladeira, que estou tentando controlar. No mais, a paz de trabalhar em casa, às vezes até descalço, tem me deixado mais tempo para pensar nos problemas de implementação.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/8256401922444170082/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=8256401922444170082&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8256401922444170082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/8256401922444170082'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2007/12/trabalho-em-casa.html' title='Trabalho em casa'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-5477636405471582466</id><published>2007-12-15T19:16:00.000-02:00</published><updated>2007-12-15T19:25:33.247-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="certification"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="tech"/><title type='text'>SCEA 5 Beta - Parte 2... Não deu tempo!</title><content type='html'>Infelismente, não consegui tempo para me dedicar à parte 2 do SCEA 5 Beta... É muito pouco tempo, do dia 21/11 até 12/12. Eu teria que parar minha vida para fazer esse exame: &quot;&lt;span style=&quot;font-family:Arial;font-size:100%;color:black;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: Arial;&quot;&gt;We have designed the complexity of the assignment so that it should take between 40-60 hours.&quot;. E exatamente na época de fim de período na faculdade onde dou aula (PUC Minas), e de maior carga de aulas minha na Pós Graduação (passei os últimos 3 ou 4 sábados, incluindo hoje, dando aula o dia inteiro!). Além disso, passei por problemas de saúde e outros problemas particulares. Nós temos que fazer escolhas e definir prioridades...&lt;br /&gt;&lt;br /&gt;Mas não foi em vão. Aprendi muito sobre JavaEE na primeira fase, testei meus conhecimentos, e me preparei para fazer a segunda parte. Ainda pretendo completá-la, pelo menos para treinar. Daqui a um ano espero estar com a certificação em mãos, mesmo tendo que pagar por ela.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/5477636405471582466/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=5477636405471582466&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/5477636405471582466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/5477636405471582466'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2007/12/scea-5-beta-parte-2-no-deu-tempo.html' title='SCEA 5 Beta - Parte 2... Não deu tempo!'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-1009728709434184602</id><published>2007-11-21T22:06:00.000-02:00</published><updated>2007-11-21T22:13:16.468-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="certification"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="tech"/><title type='text'>SCEA 5 Beta - Parte 2, aí vamos nós!</title><content type='html'>Acabei de receber o e-mail da Sun dizendo que eu passei na parte I do exame beta do SCEA &lt;a href=&quot;http://techblog.brunogrossi.com.br/2007/10/certificao-arquiteto-java-5-beta.html&quot;&gt;que fiz&lt;/a&gt; em &lt;a href=&quot;http://techblog.brunogrossi.com.br/2007/10/certificao-arquiteto-java-5-beta-eu-j.html&quot;&gt;outubro&lt;/a&gt;. Fiquei com 70%. Agora é enfrentar a parte 2... E rever meus vagos conhecimentos em UML (a muito não trabalho diretamente com UML).</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/1009728709434184602/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=1009728709434184602&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/1009728709434184602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/1009728709434184602'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2007/11/scea-5-beta-parte-2-vamos-ns.html' title='SCEA 5 Beta - Parte 2, aí vamos nós!'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28959237.post-5647855522024927361</id><published>2007-11-13T09:41:00.000-02:00</published><updated>2007-11-13T10:03:00.220-02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><category scheme="http://www.blogger.com/atom/ns#" term="SOA"/><category scheme="http://www.blogger.com/atom/ns#" term="WebServices"/><title type='text'>SOAP x REST</title><content type='html'>Há muita discussão hoje sobre o uso de REST como alternativa ao SOAP. Há até alguns que duvidam que REST é mesmo WebService, já que se acostumaram a ver WS como um emaranhado de siglas e padrões para fazer o que chamamos genericamente de &quot;chamada remota de procedimento&quot; (RPC). Nessa visão, REST parece simples demais para ser algo comercialmente &quot;vendável&quot;.&lt;br /&gt;&lt;br /&gt;REST é sim WebService, quando se percebe que a finalidade principal do WebService é permitir a comunicação entre duas aplicações quaisquer, independente de sua plataforma/linguagem de desenvolvimento. Eu tomei conhecimento do REST em 2004 enquanto escrevia minha dissertação (que foi sobre WebServices para Mineração de Dados), e percebi logo que REST tem muitas vantagens com relação ao SOAP, a começar pelo menor processamento necessário para a mensagem. SOAP é um emaranhado de tags XML para falarem pouca coisa. Num ambiente onde poder de processamento é escasso, processar tags &quot;desnecessárias&quot; pode ser penoso a todo o sistema. É o caso, por exemplo, de aplicações JavaME.&lt;br /&gt;&lt;br /&gt;Pretendo colocar aqui algumas observações sobre REST, explicar seu funcionamento, e advogar a seu favor. Não pretendo abordar 100% do tema, mas espero poder ajudar a quem ainda estiver em dúvida sobre se é utilizável ou não o REST no lugar do SOAP.&lt;br /&gt;&lt;br /&gt;Por enquanto, dêem uma olhada nos artigos que encontrei e marquei no &lt;a href=&quot;http://del.icio.us/bgrossi/rest&quot;&gt;del.icio.us&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://techblog.brunogrossi.com.br/feeds/5647855522024927361/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28959237&amp;postID=5647855522024927361&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/5647855522024927361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28959237/posts/default/5647855522024927361'/><link rel='alternate' type='text/html' href='http://techblog.brunogrossi.com.br/2007/11/soap-x-rest.html' title='SOAP x REST'/><author><name>Bruno E. Grossi</name><uri>http://www.blogger.com/profile/08243394637169028556</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>