tag:blogger.com,1999:blog-51133112445623445562009-07-17T08:04:08.554-07:00pavelgj was HereWhen there's nothing else to readPavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.comBlogger22125tag:blogger.com,1999:blog-5113311244562344556.post-12373258374108472612009-07-09T16:06:00.001-07:002009-07-09T19:55:04.478-07:00Bing vs. GoogleCame across this interesting <a href="http://bing-vs-google.com/">Bing vs. Google</a> tool. Must say, I was pleasantly surprised by the consistency of results and opinions.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XFJZGUXf86c/SlateBCzjQI/AAAAAAAAALs/hnokP2Moq8M/s1600-h/bing_vs_google.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 219px;" src="http://4.bp.blogspot.com/_XFJZGUXf86c/SlateBCzjQI/AAAAAAAAALs/hnokP2Moq8M/s400/bing_vs_google.png" alt="" id="BLOGGER_PHOTO_ID_5356659537991666946" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XFJZGUXf86c/SlZ4J7vnTbI/AAAAAAAAALk/WSlFeY9DV-k/s1600-h/bing_vs_google.jpg"><br /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-1237325837410847261?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0tag:blogger.com,1999:blog-5113311244562344556.post-69387182751677530872008-02-01T10:29:00.000-08:002008-04-01T07:50:42.377-07:00GWT RemoteServiceServlet + Guice = GuiceRemoteServiceServletIf you use Guice and GWT you'll probably find this handy:<br /><i>GuiceRemoteServiceServlet is a wrapper servlet for GWT RPC utilizing Guice for managing RemoteService implementation object's lifecycle.</i><br /><br /><div style="font-size: 12px; white-space: pre;"><br />&lt;servlet&gt;<br /> &lt;servlet-name&gt;GWT-RPCServlet&lt;/servlet-name&gt;<br /> &lt;servlet-class&gt;com.gc.gwt.server.GuiceRemoteServiceServlet&lt;/servlet-class&gt;<br /> &lt;init-param&gt;<br /> &lt;param-name&gt;guice.module&lt;/param-name&gt;<br /> &lt;param-value&gt;com.test.guice.MyGuiceModule&lt;/param-value&gt;<br /> &lt;/init-param&gt;<br />&lt;/servlet&gt;<br /><br />&lt;servlet-mapping&gt;<br /> &lt;servlet-name&gt;GWT-RPCServlet&lt;/servlet-name&gt;<br /> &lt;url-pattern&gt;/GWT.rpc&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br /></div><br /><div><br /><ol><li>map all you remote service implementations in Guice Module</li><li>define and map <span style="font-family:courier new;">GuiceRemoteServiceServlet</span> as shown above</li><li>point ALL services to the same /GWT.rpc</li></ol></div><br /><br />The source for the <span style="font-family:courier new;">GuiceRemoteServiceServlet</span> can be found <a href="http://pavelgj.googlepages.com/GuiceRemoteServiceServlet.html">here</a>.<br /><br />Good luck.<br /><br />PS: <span style="font-family:courier new;">GuiceRemoteServiceServlet</span> depends on Guice and apache-commons beanutils.<br /><br />PS2: The source of GuiceRemoteServiceServlet is distributed under Apache 2.0 License.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-6938718275167753087?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com1tag:blogger.com,1999:blog-5113311244562344556.post-3545123403785922652007-12-10T15:24:00.000-08:002007-12-11T12:17:30.473-08:00MS Volta is doomed I tell you... doooooo-o-o-o-oomed!!!Not that I care about any of the MS technology, but the simple reason for such dramatic subject is this screenshot (I took it myself):<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_XFJZGUXf86c/R13K8OYcDlI/AAAAAAAAAHo/54NQGPxp3no/s1600-h/11_19_2007+03_28+PM.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_XFJZGUXf86c/R13K8OYcDlI/AAAAAAAAAHo/54NQGPxp3no/s400/11_19_2007+03_28+PM.png" alt="" id="BLOGGER_PHOTO_ID_5142489485528534610" border="0" /></a>This is the simplest sample application: <a href="http://labs.live.com/volta/samples/Quickstart.html">http://labs.live.com/volta/samples/Quickstart.html</a><br />135 requests, 2.29MB download (only 56KB from cache), it took 31.67 seconds, FF said "Not Responding" while it was loading and I've been loading it for the third time.<br /><br />They're not going to get out the sandbox with that attitude.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-354512340378592265?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com7tag:blogger.com,1999:blog-5113311244562344556.post-75442252413894718382007-11-26T07:47:00.000-08:002007-11-26T07:56:15.540-08:00The Eclipse Integration for Apache Maven (IAM)The biggest obstacle for using Maven full time at work or my open-source projects was the absence of reasonable IDE support. There is an eclipse Maven plugin available, but it has some significant issues (I won't go into details):<br /> <a href="http://maven.apache.org/eclipse-plugin.html">http://maven.apache.org/eclipse-plugin.html</a><br /><br />And finally, Eclipse will have "native" maven support!!!<br /> <a href="http://www.eclipse.org/proposals/iam/">http://www.eclipse.org/proposals/iam/</a><br /><br />Eclipse IAM - The Eclipse Integration for Apache Maven proposal was approved. So, this time next year (according to the tentative time line) we'll be able to, hopefully, efficiently use maven from within eclipse.<br /><br />1 day down, 364 to go...<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-7544225241389471838?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0tag:blogger.com,1999:blog-5113311244562344556.post-34846705743764210072007-10-30T11:03:00.000-07:002007-10-30T11:11:05.612-07:00What's up with Firefox?Just take a look at that memory usage:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_XFJZGUXf86c/RydyaG0KnrI/AAAAAAAAAGo/NblmclZv_b4/s1600-h/taskmanager.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_XFJZGUXf86c/RydyaG0KnrI/AAAAAAAAAGo/NblmclZv_b4/s320/taskmanager.png" alt="" id="BLOGGER_PHOTO_ID_5127192493616176818" border="0" /></a>And the Firefox window in question is this:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_XFJZGUXf86c/Rydyx20KnsI/AAAAAAAAAGw/3mvbE_CueCw/s1600-h/firefox.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_XFJZGUXf86c/Rydyx20KnsI/AAAAAAAAAGw/3mvbE_CueCw/s320/firefox.png" alt="" id="BLOGGER_PHOTO_ID_5127192901638069954" border="0" /></a>Yes, I did work with some resource intensive pages, but I've closed them all. So, what's up with Firefox?<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-3484670574376421007?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com2tag:blogger.com,1999:blog-5113311244562344556.post-63322212185557564152007-10-15T10:44:00.000-07:002007-10-16T12:43:53.543-07:00Nice GWT Tree: Part 2This is my second attempt to introduce <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=543#c14">lines in GWT Tree</a>. This a very rough version: <a href="http://pavelgj.googlepages.com/tree-patch-20071016.zip">download patch</a> (for the 1.4.60 tag).<br /><br />Basic usage:<br /><blockquote><br /> // Create a tree with a few items in it.<br /> TreeItem root1 = new TreeItem("root 1");<br /> root1.addItem("item0");<br /> root1.addItem("item1");<br /> root1.addItem("item2");<br /><br /> TreeItem subItem1 = new TreeItem("sub item 1");<br /> subItem1.addItem("item0");<br /> subItem1.addItem("item1");<br /> subItem1.addItem("item2");<br /><br /> root1.addItem(subItem1);<br /> root1.addItem("item3");<br /> TreeItem subItem2 = new TreeItem("sub item 1");<br /> subItem2.addItem("item0");<br /> subItem2.addItem("item1");<br /> subItem2.addItem("item2");<br /><br /><br /> // Add a CheckBox to the tree<br /> TreeItem item = new TreeItem(new CheckBox("item3"));<br /> root1.addItem(item);<br /><br /> root1.addItem(subItem2);<br /><br /><br /> TreeItem root2 = new TreeItem("root 2");<br /> root2.addItem("item0");<br /> root2.addItem("item1");<br /> root2.addItem("item2");<br /><br /><span style="font-weight: bold;"> Tree t = new Tree((TreeImages) GWT.create(TreeLinedImages.class));</span><br /> t.addItem(root1);<br /> t.addItem(root2);<br /><br /> // Add it to the root panel.<br /> RootPanel.get().add(t);<br /><br />interface TreeLinedImages extends TreeImages {<br /><br /> /**<br /> * @gwt.resource treeOpenLined.gif<br /> */<br /> AbstractImagePrototype treeOpen();<br /><br /> /**<br /> * @gwt.resource treeClosedLined.gif<br /> */<br /> AbstractImagePrototype treeClosed();<br /><br /> /**<br /> * @gwt.resource treeLeafLined.gif<br /> */<br /> AbstractImagePrototype treeLeaf();<br />}<br /><br /></blockquote><br /><br />CSS:<br /><blockquote><br />.gwt-TreeItem {<br />}<br /><br />.gwt-TreeItem-selected {<br />background-color: #3169C6;<br />}<br /><br />.gwt-TreeItemTable {<br />padding: 0px;<br />margin: 0px;<br />border-collapse: collapse;<br />}<br /><br />.gwt-TreeItemTable tbody, .gwt-TreeItemTable td, .gwt-TreeItemTable tr, .gwt-TreeItemTable th {<br />padding: 0px;<br />margin: 0px;<br />}<br /><br />.gwt-TreeItem-Nested {<br />margin: 0px;<br />padding: 0px;<br />}<br /><br />.gwt-TreeItemTdImg {<br />border: 0px;<br />padding: 0px;<br />margin: 0px;<br />background: transparent url("tree_connect_tb.gif") repeat-y 7px top;<br />}<br /><br />.gwt-TreeItemTdImgLast {<br />border: 0px;<br />padding: 0px;<br />margin: 0px;<br />}<br /><br />.gwt-TreeItemChildSpan {<br />margin: 0px;<br />background: transparent url("tree_connect_tb.gif") repeat-y 7px top;<br />}<br /><br />.gwt-TreeItemChildSpanLast {<br />}<br /><br /></blockquote><br /><br />And you should see something like this:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_XFJZGUXf86c/RxOtsAXpoLI/AAAAAAAAAGg/jhfONmXEA_w/s1600-h/10_15_2007.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_XFJZGUXf86c/RxOtsAXpoLI/AAAAAAAAAGg/jhfONmXEA_w/s320/10_15_2007.png" alt="" id="BLOGGER_PHOTO_ID_5121628172775432370" border="0" /></a><br /><br />You'll also need to include tree.css and the images from the zip file.<br /><br />Good luck.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-6332221218555756415?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com11tag:blogger.com,1999:blog-5113311244562344556.post-54431486195372505962007-10-09T08:46:00.000-07:002007-10-10T07:48:37.443-07:00GWT-Ext (GWT wrapper for ExtJS) - the bug fixing adventureRecently I started playing around with <a href="http://extjs.com/">ExtJS</a> — it is agruably (vs. Dojo) the best integrated JavaScript widget library. I was also pleased to learn that there is a GWT wrapper library out in the wild, i.e. <a href="http://code.google.com/p/gwt-ext/">GWT-Ext</a>. But (there is always a "but") I quickly learned that it's not all flowers — none of the key Drag&amp;Drop features were implemented in gwtext-0.9.1. So I had to go back to writing all that nasty JavaScript by hand.<br /><br />Shortly after, gwtext-0.9.2 was released and I was pleased to learn that tree Drag&amp;Drop support was added, but (obviously) some key events were missing, like "move" and "nodedaragover" wasn't returning the crucial boolean (to indicate wheather to allow drop on the target node). And then I decided that instead of filing a bug report and waiting for it to be considered from a pile of other bugs and enhancement requests I'd rather fix it myself and just share a patch. And that's what I did. It took me a couple of hours to figure out a fix and 30 seconds to send a patch... and to my surprise it took only a couple of days for my fix to be included in the trunk. It saved me a lot of grieve of trying to maintain my own fixed version.<br /><br />Here is a <a href="http://groups.google.com/group/gwt-ext/browse_thread/thread/411c2008cb97cb1b/bbf8917de2a0e58b">link</a> to the discussion on the GWT-Ext developers forum.<br /><br />I guess the moral of this story is that if you find a bug, don't rush to file that bug report... try to spend a few minutes to figure it out yourself. It will:<br /><ul><li>give you an opportunity to learn the product/library/framework,<br /></li><li>allow you to narrow down the scope of the problem,</li><li>give you better understanding of the circumstances that lead to the failure,<br /></li><li>give you valuable knowledge that will allow you to write a bug report that will include more of the much needed details.<br /></li></ul>Ultimately it will directly reflect on the time spent to fix the problem.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-5443148619537250596?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com1tag:blogger.com,1999:blog-5113311244562344556.post-2330302466841821952007-05-30T09:48:00.000-07:002007-05-30T09:55:56.960-07:00That's one small step for Dell, one giant leap for linuxkind"By popular demand Ubuntu has arrived" says <a href="http://www.dell.com/content/topics/segtopic.aspx/ubuntu?c=us&l=en&s=">Dell(US) website</a>.<br /><br />Let hope others (cough-HP-cough) will follow this great example.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-233030246684182195?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0tag:blogger.com,1999:blog-5113311244562344556.post-6343032140378238252007-02-15T12:52:00.000-08:002007-02-15T13:18:28.835-08:00GWT compile Ant macroI've recently shared this approach of implementing ant GWT compile macro on GWT mailing list. Thought I'd share it here too. Here it is:<br /><div style="font-family:courier"><br />&nbsp;&nbsp;&lt;target name="gwt-compile"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;gwtCompile module="com.test.MyModule1" classpathref="gwt.compile.class.path"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;gwtCompile module="com.test.MyModule2" output="www/module2/"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;gwtCompile module="com.test.MyModule3" classpathref="gwt.module3.compile.class.path" output="www/module3/"/&gt;<br />&nbsp;&nbsp;&lt;/target&gt;<br /><br />&nbsp;&nbsp;&lt;path id="gwt.compile.class.path"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement location="src/" /&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement path="${gwt.jar.user}" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement path="${gwt.jar.dev}" /&gt;<br />&nbsp;&nbsp;&lt;/path&gt;<br /><br />&nbsp;&nbsp;&lt;path id="gwt.module3.compile.class.path"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement location="src/" /&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement path="${gwt.jar.user}" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement path="${gwt.jar.dev}" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement path="libs/gwtWidgetsLibrary.jar" /&gt;<br />&nbsp;&nbsp;&lt;/path&gt;<br /><br />&nbsp;&nbsp;&lt;macrodef name="gwtCompile"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;attribute name="module" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;attribute name="classpathref" default="gwt.compile.class.path"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;attribute name="output" default="www/"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;sequential&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;java classpathref="@{classpathref}" classname="com.google.gwt.dev.GWTCompiler" fork="true"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg value="-out" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg value="@{output}" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg value="@{module}" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/java&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/sequential&gt;<br />&nbsp;&nbsp;&lt;/macrodef&gt;<br /></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-634303214037823825?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com1tag:blogger.com,1999:blog-5113311244562344556.post-62066161763052185922007-01-22T07:19:00.000-08:002007-01-22T08:07:40.251-08:00Inside GWT experience: Tree/TreeItemRecently (or more like a couple of weeks ago) I've been looking around for other ways to contribute to Google Web Toolkit project aside from <a href="http://code.google.com/p/gwt-html-editor/">Rich-Text Editor</a> project. The one thing that caught my eye was the Look&Feel of the Tree Widget... Many other frameworks have done a great job making the tree look more like standard tree in Swing, GTK, etc. So I took a couple of hours to tweak it bit, and here is how I made it look:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pavelgj.googlepages.com/tree-sample.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://pavelgj.googlepages.com/tree-sample.jpg" alt="" border="0" /></a>Interested? You can apply the <a href="http://pavelgj.googlepages.com/TreeItem-Pavel.patch">patch</a> (for TreeItem class) and additional images (<a href="http://pavelgj.googlepages.com/tree_open.gif">1</a>, <a href="http://pavelgj.googlepages.com/tree_closed.gif">2</a>, <a href="http://pavelgj.googlepages.com/tree_connect_tb.gif">3</a>, <a href="http://pavelgj.googlepages.com/tree_connect_tr.gif">4</a>, <a href="http://pavelgj.googlepages.com/tree_connect_trb.gif">5</a>) and try it out.<br /><br /><span style="font-weight: bold;">PS</span>: <span style="font-weight: bold;"></span>It seems GWT project is going though a lot of big-picture changes right now, so it's not very easy to pass such a simple patch. <a href="http://groups-beta.google.com/group/Google-Web-Toolkit-Contributors/browse_frm/thread/4748e4de9d7adccf">Here</a> is the discussion on the GWT Contributors forum.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-6206616176305218592?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0tag:blogger.com,1999:blog-5113311244562344556.post-19141926556915546802007-01-11T08:03:00.000-08:002007-01-11T08:27:48.900-08:00Safari experience: selection rangeI just had so far the most painful experience with Safari -- trying to figure out the Safari support for this spec:<br />&nbsp;&nbsp;&nbsp;<a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html">http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html</a><br /><br />Turned out it was very limited to the point that it didn't make sense, ex. you can create the range (createRange()) but you cannot apply/add it because Selection.addRange(newRange) method does not exist...<br /><br />I just want to be able to save current selection and then be able to restore it at a later time. I need that because Safari (as well as IE, but to Safari extent) looses selection when the focus is lost off the element (IFrame in my case). Long story short here is a working Safari version:<br /><br />To save:<br /><pre> var oWin = oIframe.contentWindow;<br /> var oDoc = oWin.document;<br /> var sel = oWin.getSelection();<br /><br /> oDoc._previous_range = new Object();<br /> oDoc._previous_range.baseNode = sel.baseNode;<br /> oDoc._previous_range.baseOffset = sel.baseOffset;<br /> oDoc._previous_range.extentNode = sel.extentNode;<br /> oDoc._previous_range.extentOffset = sel.extentOffset;</pre><br />To restore:<br /><pre> var oWin = oIframe.contentWindow;<br /> var oDoc = oWin.document;<br /> var sel = oWin.getSelection();<br /> sel.setBaseAndExtent(oDoc._previous_range.baseNode,<br /> oDoc._previous_range.baseOffset,<br /> oDoc._previous_range.extentNode,<br /> oDoc._previous_range.extentOffset);<span style="font-family:Georgia,serif;"><br /><br /></span></pre><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-1914192655691554680?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com1tag:blogger.com,1999:blog-5113311244562344556.post-46774842028101878352007-01-08T08:40:00.000-08:002007-01-08T08:44:22.496-08:00QuickWCM project movedQuickWCM project moved to Google Code.<br /> <a href="http://code.google.com/p/quickwcm/">http://code.google.com/p/quickwcm/</a><br /><br />Google Code proved to be a bit more comfortable at this point. I'll be committing the source code over the next couple of days.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-4677484202810187835?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com2tag:blogger.com,1999:blog-5113311244562344556.post-69714725215312271242007-01-05T14:48:00.000-08:002007-01-05T14:52:26.960-08:00GWT SplitPane - dev releaseI've been working on an SplitPane Widget for GWT, it's still in dev progress and a bit buggy on Opera and very sensitive to DOCTYPE, but you can still try it.<br />You can get it from the source of gwt-html-editor project:<br /> <a href="http://code.google.com/p/gwt-html-editor/source">http://code.google.com/p/gwt-html-editor/source</a><br /><br />Follow these instructions to run the sample and build the latest jar:<br /> <a href="http://gwt-html-editor.googlecode.com/svn/trunk/README.txt">http://gwt-html-editor.googlecode.com/svn/trunk/README.txt</a><br /><br />See inside gwt-html-editor/test/com/jpavel/gwt/wysiwyg/test/* for more details.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-6971472521531227124?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0tag:blogger.com,1999:blog-5113311244562344556.post-56924255280770935922007-01-02T15:47:00.000-08:002007-01-02T15:50:07.743-08:00GWT Rich Text Editor 0.1.2 is availableVersion 0.1.2 is now available for downloads:<br /> <a class="moz-txt-link-freetext" href="http://gwt-html-editor.googlecode.com/files/editor-0.1.2-preview.jar">http://gwt-html-editor.googlecode.com/files/editor-0.1.2-preview.jar</a><br /><br />The release includes bug fixes and some API changes.<br /><br />Also, source code has been restructured. Ant build.xml file has been added that can compile and build jar file, GWT-compile and run GWT shell for sample/test application.<br />Refer to README.txt file for more details.<br /><a class="moz-txt-link-freetext" href="http://gwt-html-editor.googlecode.com/svn/trunk/README.txt">http://gwt-html-editor.googlecode.com/svn/trunk/README.txt</a><br /><br />I'm still looking into Safari support. The current version is marked as preview, but is pretty stable. I just don't want to make a final release until Safari is supported.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-5692425528077093592?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com5tag:blogger.com,1999:blog-5113311244562344556.post-74857597752552537552006-12-18T14:49:00.000-08:002007-01-02T16:01:31.782-08:00GWT Rich Text Editor Widget Preview Release 0.1<b>Announcing GWT Rich Text Editor Widget Preview Release 0.1</b><br /><br /><a href="http://code.google.com/p/gwt-html-editor/" editor="">http://code.google.com/p/gwt-html-editor/</a><br /><br />check out the <a href="http://code.google.com/p/gwt-html-editor/wiki/GettingStarted">Getting Started</a> wiki page for installation and usage instructions.<br /><br />Waiting for bug reports. ;)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-7485759775255253755?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0tag:blogger.com,1999:blog-5113311244562344556.post-80961870795051124942006-12-13T13:13:00.000-08:002006-12-13T13:22:39.360-08:00New GWT TutorialsI've published a couple of more GWT Tutorials:<br /><ul><li><a href="http://pavelgj.googlepages.com/gwt2">Core widgets and panels</a><br /></li><li><a href="http://pavelgj.googlepages.com/gwt22">Custom widgets </a></li></ul>PS: I've also made a couple of changes to the <a href="http://code.google.com/p/gwt-html-editor/">Rich Text Editor</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-8096187079505112494?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0tag:blogger.com,1999:blog-5113311244562344556.post-24074542284407010032006-11-30T15:01:00.000-08:002006-12-13T13:20:42.457-08:00Update: GWT Rich Text Editor commit<p>I committed the latest update of the Rich Text Editor Widget. The update includes ability to use custom widgets for data entry like urls, colors, etc.</p><p><a href="http://code.google.com/p/gwt-html-editor/">http://code.google.com/p/gwt-html-editor/</a><br /></p><p>Here is the code demonstrating actual "create link" button:</p><br /><blockquote style="font-family: courier new; white-space: pre; font-size: 12px;">EditorToolbarButton link<br /> = new EditorToolbarButton(EditorToolbarButton.BUTTON_LINK);<br /><br />link.addClickListener(new ClickListener() {<br /> public void onClick(Widget sender) {<br /><br /> final EditorPromptPanelWidget customWidget<br /> = new EditorPromptPanelWidget();<br /> VerticalPanel container = new VerticalPanel();<br /> final TextBox urlTextBox = new TextBox();<br /><br /> HorizontalPanel hz = new HorizontalPanel();<br /> hz.add(new Label("Link URL: "));<br /> hz.add(urlTextBox);<br /> container.add(hz);<br /><br /> HorizontalPanel hzButtons = new HorizontalPanel();<br /> Button b = new Button("Create Link");<br /> b.addClickListener(new ClickListener() {<br /> public void onClick(Widget sender) {<br /> customWidget.getPrompt().complete(urlTextBox.getText());<br /> }<br /> });<br /><br /> Button c = new Button("Cancel");<br /> c.addClickListener(new ClickListener() {<br /> public void onClick(Widget sender) {<br /> customWidget.getPrompt().complete(null);<br /> }<br /> });<br /><br /> hzButtons.add(b);<br /> hzButtons.add(c);<br /><br /> container.add(hzButtons);<br /><br /> customWidget.setWidget(container);<br /><br /> new AdvancedPromptPannel("CreateLink", "Create Link", customWidget);<br /><br /> urlTextBox.setFocus(true);<br /> }<br />});<br /></blockquote><br />And this is what it looks like:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/2668/624183501533489/1600/186471/GWT-Editor-Screenshot2.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/2668/624183501533489/320/346575/GWT-Editor-Screenshot2.jpg" alt="" border="0" /></a><br /><br />Here is the compiled version if you would like to see it in action:<br /><p><a href="http://pavelgj.googlepages.com/www.zip">http://pavelgj.googlepages.com/www.zip</a></p><br />And source (if you don't want to go through SVN):<br /><p><a href="http://pavelgj.googlepages.com/src.zip">http://pavelgj.googlepages.com/src.zip</a></p><br />Enjoy! :)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-2407454228440701003?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0tag:blogger.com,1999:blog-5113311244562344556.post-48159232719778241172006-11-29T10:47:00.000-08:002006-12-13T13:23:00.849-08:00GWT WYSIWYG HTML (Rich Text) Editor WidgetThis is a simple but sufficient for most cases WYSIWYG HTML (Rich Text) Editor fully (99% + JSNI) implemented with GWT.<br /><br />I just created a new project and committed the first version.<br /><a href="http://code.google.com/p/gwt-html-editor/">http://code.google.com/p/gwt-html-editor/</a><br /><br />Anonymous checkout:<br /><tt style="margin: 1em; font-size: 120%;"> svn checkout http://gwt-html-editor.googlecode.com/svn/trunk/ gwt-html-editor</tt><br /><br />This is preview release, it needs more testing on different browsers, I only tested on IE 7 and Firefox 2.0<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/2668/624183501533489/1600/940865/GWT-Editor-Screenshot2.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/2668/624183501533489/320/273692/GWT-Editor-Screenshot2.jpg" alt="" border="0" /></a><br />Simple use case:<br /><blockquote style="font-family: courier new;"><br />Editor editor = new Editor();<br />editor.setWidth("100%");<br />editor.setHeight("300px");<br />editor.setHTML("Hello World");<br /><br />editor.load();<br />RootPanel.get().add(editor);<br /><br />//...<br /><br />String html = editor.getHTML();<br /></blockquote><br />Extended SPI and new formatting features are coming soon.<br /><br />Check it out.<br /><br />Any comments are highly appreciated.<br /><br /><span style="color: rgb(255, 0, 0);">Update:</span> <a href="http://pavelgj.blogspot.com/2006/11/update-gwt-rich-text-editor-commit.html">http://pavelgj.blogspot.com/2006/11/update-gwt-rich-text-editor-commit.html</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-4815923271977824117?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com3tag:blogger.com,1999:blog-5113311244562344556.post-84546100624368754052006-11-23T12:22:00.000-08:002006-12-13T13:21:30.729-08:00Tutorial: GWT - Part 2: Your First GWT Application (dissected)Just added part 2 of the GWT tutorial series: Your First GWT Application (dissected)<br /><a href="http://pavelgj.googlepages.com/jpavels%27tutorials-gwt2">http://pavelgj.googlepages.com/jpavels%27tutorials-gwt2</a><br />Part 2 explains the default GWT module descriptor, HTML file and the Entry Point class.<br />Any feedback is highly appreciated.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-8454610062436875405?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com1tag:blogger.com,1999:blog-5113311244562344556.post-87045823247191645392006-11-23T07:44:00.000-08:002006-12-13T13:22:17.388-08:00GWT Maven Plugin 1.0.3 AvailableDidn't know about the GWT Maven Plugin until this release. Here is the article (contains a short but a complete HOWTO):<br /><a href="http://www.oreillynet.com/onjava/blog/2006/11/gwt_maven_plugin_103_available.html">http://www.oreillynet.com/onjava/blog/2006/11/gwt_maven_plugin_103_available.html</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-8704582324719164539?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com1tag:blogger.com,1999:blog-5113311244562344556.post-69610205858988352962006-11-22T09:27:00.000-08:002006-12-13T13:21:44.639-08:00Tutorial: GWT - Part 1: Getting StartedAdded my first Tutorial: Google Web Toolkit - Getting Started<br /><a href="http://pavelgj.googlepages.com/gwt">http://pavelgj.googlepages.com/gwt</a><br />Part 1 of GWT series covers basic installation and starting your first GWT project.<br />Any comments are very appreciated.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-6961020585898835296?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0tag:blogger.com,1999:blog-5113311244562344556.post-13962794434769476682006-11-22T09:03:00.000-08:002009-05-22T09:48:28.687-07:00My first postHey guys,<br /><br />Finally decided to jump into the whole Blog thing. Hope it's going to be fun!<br />So, I also started a small <a href="http://pavelgj.googlepages.com/">web site</a> to share my experience with different technologies and frameworks: Java, AJAX, Portals, Web Services, JavaScript and other cool stuff. I'll be posting updates here on my new mega-Blog! LOL<br /><br />Pavel<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113311244562344556-1396279443476947668?l=pavelgj.blogspot.com'/></div>Pavel Jbanovhttp://www.blogger.com/profile/13237725824114949795noreply@blogger.com0