<?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: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-5603257583125350954</id><updated>2012-02-01T01:06:29.809-08:00</updated><category term='.properties bundle to javabean'/><category term='gwt editor'/><category term='javascript'/><category term='replace text recursively'/><category term='rsync'/><category term='tomcat 5.5'/><category term='(405 Method Not Allowed)'/><category term='web development'/><category term='gwt'/><category term='tomcat'/><category term='mkactivity'/><category term='apache 2.2'/><category term='native javascript gwt widget'/><category term='405'/><category term='proxy_ajp'/><category term='css'/><category term='gwt editor 100% java example'/><category term='dynamic loading'/><category term='desperdicio de espacio en eclipse'/><category term='native gwt'/><category term='windows'/><category term='loggin on tomcat windows'/><category term='catalina.out'/><category term='eclipse'/><category term='eclipse package explorer en linux'/><category term='.properties file'/><category term='keyboard event handling java keypress keyrelease keypressed keyreleased user swing swt'/><category term='apache'/><category term='programatically load js'/><category term='eclipse  linux'/><category term='web application development'/><category term='ajp'/><category term='replacing text on files recursively over directories'/><category term='ajax'/><category term='commit'/><category term='sftp'/><category term='sourceforge'/><category term='jsp expression language'/><category term='css dynamic loading'/><category term='gtk'/><category term='ssh'/><category term='gtkrc'/><category term='googlecode'/><category term='javascript dynamic loading'/><category term='svg feConvolveMatrix &quot;kernel sum 0&quot; kernel zero &quot;kernel sum zero&quot; convolution &quot;convolve matrix&quot; &quot;matrix sum zero&quot;'/><category term='bundle2javabean'/><category term='gtk themes'/><category term='ckeditor in gwt'/><category term='EL variable'/><category term='scriptlet'/><category term='java bean .properties'/><category term='svn commit'/><category term='log'/><category term='script dynamic loading'/><category term='debug web applications in eclipse'/><category term='project'/><category term='loggin'/><category term='.build java class from .properties file'/><category term='svn'/><title type='text'>Cancerberonia</title><subtitle type='html'>Un lugar donde se dejan esas pequeñas cosas utiles y puntuales que si no se escriben tienden a olvidarse...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-8610996187721787368</id><published>2011-12-20T04:39:00.000-08:00</published><updated>2011-12-20T04:51:50.549-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='native gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='ckeditor in gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='native javascript gwt widget'/><title type='text'>Example on how easily a javascript native component can be embedded natively in an gwt widget</title><content type='html'>I needed to use a wysiwyg editor in my gwt application. Tried some sollutions, but none worked, so I decided to develop a gwt widget with ckeditor inside, and with support for gwt editor framework.&lt;br /&gt;&lt;br /&gt;In the following example, I will create an html file that loads ckeditor javascript before the gwt application javascript is loaded:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;!doctype html&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;  &amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;meta http-equiv="content-type" content="text/html; charset=UTF-8"&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;title&amp;gt;Web Application Starter Project&amp;lt;/title&amp;gt;&lt;br /&gt;    &lt;br /&gt;     &amp;lt;script type="text/javascript" language="javascript" &lt;br /&gt;     src="js/ckeditor/ckeditor.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;     &lt;br /&gt;  &amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;body&amp;gt;  &lt;br /&gt;  &lt;br /&gt;    &amp;lt;script type="text/javascript" language="javascript" &lt;br /&gt;     src="circulares2/circulares2.nocache.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;div id="uniqueID"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt; &lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then the following is the code for the ckeditor gwt widget, with support for gwt editor framework:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package com.beeblos.portlet.circulares2.gwt.client.util;&lt;br /&gt;&lt;br /&gt;import com.google.gwt.dom.client.Document;&lt;br /&gt;import com.google.gwt.dom.client.Style.Display;&lt;br /&gt;import com.google.gwt.dom.client.Style.Unit;&lt;br /&gt;import com.google.gwt.dom.client.TextAreaElement;&lt;br /&gt;import com.google.gwt.editor.client.LeafValueEditor;&lt;br /&gt;import com.google.gwt.user.client.ui.SimplePanel;&lt;br /&gt;import com.google.gwt.user.client.ui.TextArea;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * ckeditor.js must be already loaded, put it in &lt;head&gt;.&lt;br /&gt; * @author sg&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;public class CKEditor extends SimplePanel implements LeafValueEditor&lt;String&gt; {&lt;br /&gt;&lt;br /&gt; String _id=null;&lt;br /&gt; private String text;&lt;br /&gt; private TextAreaElement ta;&lt;br /&gt; static Integer idCounter=0;&lt;br /&gt; &lt;br /&gt; public CKEditor(String text) {&lt;br /&gt;  idCounter++;&lt;br /&gt;  _id="ckEditorWidget_"+idCounter;&lt;br /&gt;  this.text=text;&lt;br /&gt;&lt;br /&gt;  initGui();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; private void initGui() {  &lt;br /&gt;  ta = Document.get().createTextAreaElement();&lt;br /&gt;  ta.getStyle().setWidth(100, Unit.PCT);&lt;br /&gt;  ta.getStyle().setHeight(100, Unit.PCT);&lt;br /&gt;  ta.setId(_id);&lt;br /&gt;  getElement().appendChild(ta);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void setValue(String value) {&lt;br /&gt;  this.text=value;  &lt;br /&gt;  this._setText(_id, value);&lt;br /&gt; }&lt;br /&gt; @Override&lt;br /&gt; public String getValue() {&lt;br /&gt;  return _getText(_id)+"";&lt;br /&gt; }&lt;br /&gt; protected native void _setText(String id, String value)/*-{&lt;br /&gt;  if($wnd.CKEDITOR &amp;&amp; $wnd.CKEDITOR.instances &amp;&amp; $wnd.CKEDITOR.instances[id])&lt;br /&gt;     $wnd.CKEDITOR.instances[id].setData(value);&lt;br /&gt; }-*/;&lt;br /&gt; protected native Object _getText(String id) /*-{&lt;br /&gt;  if(!$wnd.CKEDITOR || !$wnd.CKEDITOR.instances || !$wnd.CKEDITOR.instances[id])&lt;br /&gt;   return "";&lt;br /&gt;    else&lt;br /&gt;     return $wnd.CKEDITOR.instances[id].getData();&lt;br /&gt; }-*/;&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; protected void onLoad() {&lt;br /&gt;  super.onLoad();&lt;br /&gt;  _loadCKEditor(_id, getCkEditorConfig());&lt;br /&gt;  ta.getStyle().setDisplay(Display.NONE);&lt;br /&gt;  if(Util.notNull(text))&lt;br /&gt;   this._setText(_id, text);  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; protected native Object getCkEditorConfig() /*-{&lt;br /&gt;    return {&lt;br /&gt;      toolbar : 'Basic',&lt;br /&gt;      uiColor : '#9AB8F3'&lt;br /&gt;  };&lt;br /&gt; }-*/;&lt;br /&gt;&lt;br /&gt; private static native void _loadCKEditor(String id, Object config) /*-{&lt;br /&gt;  $wnd.CKEDITOR.replace(id, config);&lt;br /&gt; }-*/;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note how I use the gwt widget's onLoad for loading native ckeditor inside the widget, because I need gwt to be fully loaded before adding native ckeditor. Also, note that you can extend this class for indicating a custom ckeditor configuration, for example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class CkEditorNormal extends CKEditor {&lt;br /&gt; public CkEditorNormal(String text) {&lt;br /&gt;  super(text);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; protected native Object getCkEditorConfig() /*-{&lt;br /&gt;    return {};&lt;br /&gt; }-*/;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Hope this helps somebody to develop / integrate its own javascript toolkits as gwt widgets or in gwt projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-8610996187721787368?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/8610996187721787368/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=8610996187721787368' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/8610996187721787368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/8610996187721787368'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2011/12/example-on-how-easily-javascript-native.html' title='Example on how easily a javascript native component can be embedded natively in an gwt widget'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-3695261533989049932</id><published>2011-12-19T05:41:00.000-08:00</published><updated>2011-12-19T05:49:03.261-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt editor'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt editor 100% java example'/><title type='text'>gwt editor framework, 100% java example</title><content type='html'>&lt;p&gt;I'm learning gwt, and found gwt editor framework and it seems very promising technology for doing gui. Nevertheless, there are little documentation available for gwt begginers, and all the examples uses gwt UIBinder, which I'm not. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So, this is a gwt module file, that contains a simple model class, a simple gwt editor for that model class, and a example of using it for displaying and let the user edit the model. No UIBinder, all the GUI was made in java using gwt eclipse editor. Enjoy! &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;package com.beeblos.portlet.circulares2.gwt.client;&lt;br /&gt;&lt;br /&gt;import com.google.gwt.core.client.*;&lt;br /&gt;import com.google.gwt.editor.client.*;&lt;br /&gt;import com.google.gwt.event.dom.client.*;&lt;br /&gt;import com.google.gwt.user.client.Window;&lt;br /&gt;import com.google.gwt.user.client.ui.*;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * entry point testing gwt editor framework. 100% java code, no UIBinder...&lt;br /&gt; * @author: sgurin&lt;br /&gt; */&lt;br /&gt;public class Circulares2 implements EntryPoint {&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; public static class Person {&lt;br /&gt;  String name;&lt;br /&gt;  Integer age;&lt;br /&gt;  public Person(String name, Integer age) {&lt;br /&gt;   super();&lt;br /&gt;   this.name = name;&lt;br /&gt;   this.age = age;&lt;br /&gt;  }&lt;br /&gt;  public String getName() {&lt;br /&gt;   return name;&lt;br /&gt;  }&lt;br /&gt;  public void setName(String name) {&lt;br /&gt;   this.name = name;&lt;br /&gt;  }&lt;br /&gt;  public Integer getAge() {&lt;br /&gt;   return age;&lt;br /&gt;  }&lt;br /&gt;  public void setAge(Integer age) {&lt;br /&gt;   this.age = age;&lt;br /&gt;  }&lt;br /&gt; } &lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * the perdon's editor. Note that it has 2 non private attributes with the exact name &lt;br /&gt;  * as the Person's attributes. &lt;br /&gt;  * &lt;br /&gt;  * @author sg&lt;br /&gt;  *&lt;br /&gt;  */&lt;br /&gt; public class PersonEditor extends SimplePanel implements Editor&lt;Person&gt; {&lt;br /&gt;  TextBox name;&lt;br /&gt;  IntegerBox age;&lt;br /&gt;&lt;br /&gt;  public PersonEditor() {   &lt;br /&gt;   Grid grid = new Grid(2, 2);&lt;br /&gt;   setWidget(grid);&lt;br /&gt;   grid.setSize("100%", "100%");&lt;br /&gt;   &lt;br /&gt;   Label lblNewLabel = new Label("name");&lt;br /&gt;   grid.setWidget(0, 0, lblNewLabel);&lt;br /&gt;   &lt;br /&gt;   name = new TextBox();&lt;br /&gt;   grid.setWidget(0, 1, name);&lt;br /&gt;   &lt;br /&gt;   Label lblAge = new Label("age");&lt;br /&gt;   grid.setWidget(1, 0, lblAge);&lt;br /&gt;   &lt;br /&gt;   age = new IntegerBox();&lt;br /&gt;   grid.setWidget(1, 1, age);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // Empty interface declaration, similar to UiBinder&lt;br /&gt; interface Driver extends SimpleBeanEditorDriver&lt;Person, PersonEditor&gt; {}&lt;br /&gt;  &lt;br /&gt; &lt;br /&gt; public void onModuleLoad() {&lt;br /&gt;  &lt;br /&gt;  /* this is the main entry point of our gwt application. &lt;br /&gt;   * Here we instance the editor (a gwt panel), a sample &lt;br /&gt;   * instance object (a person) and a editor driver, the &lt;br /&gt;   * object that will let us link the data with the editor */&lt;br /&gt;    &lt;br /&gt;  RootPanel rootPanel = RootPanel.get("uniqueID");&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;    // Create the editor's Driver&lt;br /&gt;    final Driver driver = GWT.create(Driver.class);&lt;br /&gt;  &lt;br /&gt;    //create a sample model object&lt;br /&gt;  Person p = new Person("john", 22);&lt;br /&gt;  &lt;br /&gt;  // PersonEditor is a DialogBox that extends Editor&lt;Person&gt;&lt;br /&gt;  PersonEditor editor = new PersonEditor();&lt;br /&gt;     // Initialize the driver with the top-level editor&lt;br /&gt;     driver.initialize(editor);&lt;br /&gt;     // Copy the data in the object into the UI&lt;br /&gt;     driver.edit(p);&lt;br /&gt;     &lt;br /&gt;     //at this point the editor panel is loaded with the person...&lt;br /&gt;  &lt;br /&gt;  VerticalPanel vp = new VerticalPanel();&lt;br /&gt;  vp.setSize("100%", "100%");&lt;br /&gt;  rootPanel.add(vp);&lt;br /&gt;  &lt;br /&gt;  Button editButton = new Button("edit", new ClickHandler() {   &lt;br /&gt;   @Override&lt;br /&gt;   public void onClick(ClickEvent event) {&lt;br /&gt;    //we get the edited person object back&lt;br /&gt;    Person editedPerson = driver.flush();&lt;br /&gt;    Window.alert("edited person name: "+editedPerson.getName());&lt;br /&gt;   }&lt;br /&gt;  });&lt;br /&gt;  vp.add(editor);&lt;br /&gt;  vp.add(editButton);  &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-3695261533989049932?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/3695261533989049932/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=3695261533989049932' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/3695261533989049932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/3695261533989049932'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2011/12/gwt-editor-framework-100-java-example.html' title='gwt editor framework, 100% java example'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-3403421714517090239</id><published>2011-11-23T19:27:00.001-08:00</published><updated>2011-11-23T19:33:48.359-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='programatically load js'/><category scheme='http://www.blogger.com/atom/ns#' term='css dynamic loading'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript dynamic loading'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Load javascript or css dynamically in javascript</title><content type='html'>If for some reason you need to programatically load some javascript or css stylesheet in the document, here is some code that helped me and seems to work fine in most browsers. Hope that helps somebody&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * loads javascript file or css stylesheet in current document.&lt;br /&gt; * Usage Examples:&lt;br /&gt; * loadFile("www.server.com/file1.js", "js", function(){&lt;br /&gt; *   alert("file1.js loaded!");&lt;br /&gt; * });&lt;br /&gt; * @param name : the url of the resource to load. I think there is no cross site problems here.&lt;br /&gt; * @param type : "js" or "css". if "js" then a new javascript script will be loaded&lt;br /&gt; * @param listener an optional function that will be called when loading of the resource is ready.&lt;br /&gt; * @author: sgurin&lt;br /&gt; */&lt;br /&gt;_loadF : function(name, type, listener){&lt;br /&gt; var el=null;&lt;br /&gt; if (type=="js"){&lt;br /&gt;  el=document.createElement("script");&lt;br /&gt;  el.setAttribute("type","text/javascript");&lt;br /&gt;  if(listener) {&lt;br /&gt;   el.onreadystatechange = function () {&lt;br /&gt;    if (this.readyState == 'complete') listener();&lt;br /&gt;   };&lt;br /&gt;   el.onload=listener;&lt;br /&gt;  }&lt;br /&gt;  el.setAttribute("src", name);&lt;br /&gt; }&lt;br /&gt; else if (type=="css"){&lt;br /&gt;  el=document.createElement("link"); &lt;br /&gt;  el.setAttribute("rel", "stylesheet");&lt;br /&gt;  el.setAttribute("type", "text/css");&lt;br /&gt;  el.setAttribute("href", name);&lt;br /&gt; }&lt;br /&gt; document.body.appendChild(el);&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-3403421714517090239?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/3403421714517090239/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=3403421714517090239' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/3403421714517090239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/3403421714517090239'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2011/11/load-javascript-or-css-dinamically-in.html' title='Load javascript or css dynamically in javascript'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-6592470265468018787</id><published>2011-10-06T07:31:00.000-07:00</published><updated>2011-10-06T07:37:11.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='loggin on tomcat windows'/><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='loggin'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='catalina.out'/><title type='text'>Tomcat in windows logging</title><content type='html'>I work daily with tomcat in linux, and I'm used to read all tomcat logs in file logs/catalina.out. The other day, I had to tun tomcat on a windows machine, launching it from comand line, not as a windows service. To my surprise, there was no logs/catalina.out file with my logs, and any of the other files in logs folder contain useful information. &lt;br /&gt;&lt;br /&gt;So, how to launch tomcat from windows command line and make it dump the logs to logs/catalina.out file??&lt;br /&gt;&lt;br /&gt;This is the answer:&lt;br /&gt;&lt;br /&gt;cd c:\tomcat\bin&lt;br /&gt;call catalina run 1&gt; ../logs/catalina.out 2&lt;&amp;1&lt;br /&gt;&lt;br /&gt;this will write all tomcat logs to file c:\tomcat\logs\catalina.out&lt;br /&gt;&lt;br /&gt;hope this can help people in the same situation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-6592470265468018787?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/6592470265468018787/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=6592470265468018787' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/6592470265468018787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/6592470265468018787'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2011/10/tomcat-in-windows-logging.html' title='Tomcat in windows logging'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-1175608283402818873</id><published>2011-01-18T13:44:00.000-08:00</published><updated>2011-01-18T13:53:32.664-08:00</updated><title type='text'>ajax cross domain</title><content type='html'>i need to do ajax cross site scripting&lt;br /&gt;&lt;br /&gt;there are several technics, all with its limitations&lt;br /&gt;&lt;br /&gt;* flash: needs security policy file in the target server&lt;br /&gt;&lt;br /&gt;* javascript : needs security policy file in the target server&lt;br /&gt;&lt;br /&gt;* cssHttpRequest (http://nb.io/hacks/csshttprequest). works fine but it is considered a bug and it is fixed in new versions of some browsers like FF or webkit, so IMHO it is not recommended to use this in your products.&lt;br /&gt;&lt;br /&gt;* using an iframe: it is tricky and didn't worked for me&lt;br /&gt;&lt;br /&gt;* an approach like www.ajax-cross-domain.com wirks very good, but the service offered by www.ajax-cross-domain.com it's only for demo porpuses and very limited.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In this article I will examplain how to make your own www.ajax-cross-domain.com service like for free:&lt;br /&gt;&lt;br /&gt;000webhost&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;file curl.php&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;$curl_url = $_GET["url"];&lt;br /&gt;/*echo "url = " . $curl_url;*/&lt;br /&gt;$curl_limit_size = 20000; /* ~20kb */&lt;br /&gt;$curl_handle = curl_init($curl_url);&lt;br /&gt;$data_string = "";&lt;br /&gt;&lt;br /&gt;function write_function($handle, $data) {&lt;br /&gt;    global $data_string;&lt;br /&gt;    global $curl_limit_size;&lt;br /&gt;    $data_string .= $data;&lt;br /&gt;    if (strlen($data_string) &gt; $curl_limit_size) {&lt;br /&gt;        return 0;&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;        return strlen($data);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function escapeJavaScriptText($string) {&lt;br /&gt;    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://cancerbero.vacau.com/curl.php?url=http://www.google.com&lt;br /&gt;&lt;br /&gt;you can disable the code here -&gt; http://members.000webhost.com/analytics.php&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-1175608283402818873?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/1175608283402818873/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=1175608283402818873' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/1175608283402818873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/1175608283402818873'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2011/01/ajax-cross-domain.html' title='ajax cross domain'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-7002603131905343308</id><published>2010-08-27T19:29:00.001-07:00</published><updated>2010-08-28T08:04:07.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='script dynamic loading'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamic loading'/><category scheme='http://www.blogger.com/atom/ns#' term='css dynamic loading'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'></title><content type='html'>&lt;span style="font-weight: bold;font-size:180%;" &gt;Script for dynamic JavaScript and CSS loading&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With the following script, you can easily load javascripts and css files dynamically and asynchronously of course:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/**javascript and css loader&lt;br /&gt; * @author: sgurin&lt;br /&gt; */&lt;br /&gt;(function(){&lt;br /&gt; &lt;br /&gt;var _loadF = function(name, type, listener){&lt;br /&gt; var el=null;&lt;br /&gt; if (type=="js"){ &lt;br /&gt;  el=document.createElement("script");&lt;br /&gt;  el.setAttribute("type","text/javascript");&lt;br /&gt;  if(listener) {&lt;br /&gt;   el.onreadystatechange = function () {&lt;br /&gt;    if (this.readyState == 'complete') listener();&lt;br /&gt;   };&lt;br /&gt;   el.onload=listener;&lt;br /&gt;  }&lt;br /&gt;  el.setAttribute("src", name);&lt;br /&gt; }&lt;br /&gt; else if (type=="css"){ &lt;br /&gt;  el=document.createElement("link");  &lt;br /&gt;  el.setAttribute("rel", "stylesheet");&lt;br /&gt;  el.setAttribute("type", "text/css");&lt;br /&gt;  el.setAttribute("href", name);&lt;br /&gt; }&lt;br /&gt; document.body.appendChild(el);&lt;br /&gt;};&lt;br /&gt;/**public global function&lt;br /&gt; * @param css - array of css url to load. can be null&lt;br /&gt; * @param js - array of javascript scripts urls to load. can be null&lt;br /&gt; * @param listener function that will be called when ALL js and css files are loaded.&lt;br /&gt; */&lt;br /&gt;LOADFILE = function (css, js, listener) { &lt;br /&gt; css=css==null?[]:css;&lt;br /&gt; js=js==null?[]:js;&lt;br /&gt; var subListener=function(){&lt;br /&gt;  LOADFILE.counter--;&lt;br /&gt;  if(LOADFILE.counter==0)&lt;br /&gt;   listener();&lt;br /&gt; };&lt;br /&gt; for(var i=0; i&amp;lt;css.length; i++) {&lt;br /&gt;  _loadF(css[i], "css", subListener);&lt;br /&gt; }&lt;br /&gt; for(var i=0; i&amp;lt;js.length; i++) {&lt;br /&gt;  LOADFILE.counter++;&lt;br /&gt;  _loadF(js[i], "js", subListener);&lt;br /&gt; }&lt;br /&gt;};&lt;br /&gt;LOADFILE.counter=0;//file load counter&lt;br /&gt;&lt;br /&gt;})();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For example, you can dynamically load all your javascript application's javascript and css files like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;LOADFILE(&lt;br /&gt; ["http://yui.yahooapis.com/2.8.1/build/slider/assets/skins/sam/slider.css", &lt;br /&gt;  "http://yui.yahooapis.com/2.8.1/build/fonts/fonts-min.css", &lt;br /&gt;  "http://yui.yahooapis.com/2.8.1/build/colorpicker/assets/skins/sam/colorpicker.css"], &lt;br /&gt;&lt;br /&gt; ["http://yui.yahooapis.com/2.8.1/build/yahoo-dom-event/yahoo-dom-event.js",&lt;br /&gt; "http://yui.yahooapis.com/2.8.1/build/animation/animation-min.js",&lt;br /&gt; "http://yui.yahooapis.com/2.8.1/build/dragdrop/dragdrop-min.js",&lt;br /&gt; "http://yui.yahooapis.com/2.8.1/build/slider/slider-min.js",&lt;br /&gt; "http://yui.yahooapis.com/2.8.1/build/element/element-min.js",&lt;br /&gt; "http://yui.yahooapis.com/2.8.1/build/colorpicker/colorpicker-min.js"], &lt;br /&gt; &lt;br /&gt; function(){&lt;br /&gt;    //my javascript application's code&lt;br /&gt;    var Event = YAHOO.util.Event,&lt;br /&gt;        picker;&lt;br /&gt;    Event.onDOMReady(function() {&lt;br /&gt;  YAHOO.log("Creating Color Picker.", "info", "example");&lt;br /&gt;           picker = new YAHOO.widget.ColorPicker("container", {&lt;br /&gt;                   showhsvcontrols: true,&lt;br /&gt;                   showhexcontrols: true,&lt;br /&gt;    images: {&lt;br /&gt;     PICKER_THUMB: "assets/picker_thumb.png",&lt;br /&gt;     HUE_THUMB: "assets/hue_thumb.png"&lt;br /&gt;       }&lt;br /&gt;               });&lt;br /&gt;  YAHOO.log("Finished creating Color Picker.", "info", "example");&lt;br /&gt;  var onRgbChange = function(o) {&lt;br /&gt;   YAHOO.log("The new color value is " + o.newValue, "info", "example");&lt;br /&gt;  }&lt;br /&gt;  picker.on("rgbChange", onRgbChange);&lt;br /&gt;  Event.on("reset", "click", function(e) {&lt;br /&gt;   picker.setValue([255, 255, 255], false); &lt;br /&gt;  });  &lt;br /&gt;  Event.on("gethex", "click", function(e) {&lt;br /&gt;   alert("Current hex value: " + picker.get("hex"), "info", "example"); &lt;br /&gt;  });&lt;br /&gt;     });  &lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hope this help somebody&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-7002603131905343308?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/7002603131905343308/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=7002603131905343308' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/7002603131905343308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/7002603131905343308'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2010/08/script-for-dynamic-javascript-and-css.html' title=''/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-818884850992736827</id><published>2010-07-29T10:45:00.000-07:00</published><updated>2010-07-29T10:49:31.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='405'/><category scheme='http://www.blogger.com/atom/ns#' term='commit'/><category scheme='http://www.blogger.com/atom/ns#' term='(405 Method Not Allowed)'/><category scheme='http://www.blogger.com/atom/ns#' term='sourceforge'/><category scheme='http://www.blogger.com/atom/ns#' term='mkactivity'/><category scheme='http://www.blogger.com/atom/ns#' term='svn commit'/><category scheme='http://www.blogger.com/atom/ns#' term='googlecode'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>svn error (405 Method Not Allowed) in commit</title><content type='html'>If you are web developer and are trying to commit your changes via svn to sourceforge.net or google code and the commit because a (405 Method Not Allowed), the first thing you want to check is the following.&lt;br /&gt;&lt;br /&gt;For commiting code to this kind of sites, you have to commit using the https:// direction and NOT http://. You can checkout projects using http:// but for commiting changes you must use https://. This is a common mistake that can stuck svn novices (like me)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-818884850992736827?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/818884850992736827/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=818884850992736827' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/818884850992736827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/818884850992736827'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2010/07/svn-error-405-method-not-allowed-in.html' title='svn error (405 Method Not Allowed) in commit'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-5774153186588863826</id><published>2010-03-30T21:24:00.000-07:00</published><updated>2010-05-06T08:45:59.109-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='sourceforge'/><category scheme='http://www.blogger.com/atom/ns#' term='rsync'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='sftp'/><title type='text'>How to start publishing your project in sourceforge</title><content type='html'>&lt;span style="font-weight: bold;font-size:180%;" &gt;How to start publishing your project in sourceforge&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This article is a step/by/step guide to those who want to maintain their development projects in sourceforge.net, with svn support for sharing their source code and a project web site.&lt;br /&gt;&lt;br /&gt;First of all I suppose you have already created a new project in sourceforge.net. The important thing to remember is the project's unix name. In the following examples, my sourceforge.net user name is cancerbero_sgx and my project unix name is yui4java. As an administrator of your new project, using a linux shell, you can do the following activities:&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;copy files and directories with rsync:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;# rsync -avP -e ssh foo.txt cancerbero_sgx,yui4java@web.sourceforge.net:htdocs/&lt;br /&gt;# rsync -avP -e ssh /home/sgurin/dir1 cancerbero_sgx,yui4java@web.sourceforge.net:htdocs/&lt;br /&gt;&lt;br /&gt;those will copy (synchronize) the file foo.txt and the directory /home/sgurin/dir1 to project's htdocs directory.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;conecting using sftp:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;sftp cancerbero_sgx,yui4java@web.sourceforge.net&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Getting a web shell with ssh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;with this option you will have access to a remote terminal in sf.net and there execute commands, access files ,etc&lt;br /&gt;for connecting I use:&lt;br /&gt;&lt;br /&gt;ssh -t cancerbero_sgx,yui4java@shell.sourceforge.net create&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Publish your source code using svn&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will create a svn repository from a local source directory. Be carefull when typing commands when creating a new repository! Once this is done, you can svn checkout your own source files. Then you can work with svn (svn update, svn commit) in your own local working copy.&lt;br /&gt;&lt;br /&gt;first you need to create a repository. for this you have to:&lt;br /&gt;&lt;br /&gt;1)&lt;br /&gt;connect via ssh as explained beore&lt;br /&gt;&lt;br /&gt;2)&lt;br /&gt;type the command :&lt;br /&gt;adminrepo --checkout svn&lt;br /&gt;(this will create a clone copy of your repository in /svnroot/yui4java.&lt;br /&gt;      * Use adminrepo --help for further information.)&lt;br /&gt;&lt;br /&gt;3)&lt;br /&gt;type the following commands (be carefull!)&lt;br /&gt;rm -rf /svnroot/yui4java/*&lt;br /&gt;# (Remove the clone copy of your repo)&lt;br /&gt;create /svnroot/PROJECT&lt;br /&gt;# (Create a new repository)&lt;br /&gt;&lt;br /&gt;4)&lt;br /&gt;type the following commands&lt;br /&gt;cd&lt;br /&gt;adminrepo --save svn&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;that operation can take some seconds... Once it is done, you can use your new svn repository. With the following command we will import a local source code directory into the svn repository:&lt;br /&gt;&lt;br /&gt;svn import /home/sgurin/my/local/src/folder  https://yui4java.svn.sourceforge.net/svnroot/yui4java/trunk&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;web page&lt;/span&gt;&lt;br /&gt;The last thing we will create for our new project is its web page in sourceforge.net. In our project's main folder, we have the directory htdocs and this is the directory that is exposed to the web. In my example, this diretory is located at /home/groups/y/yu/yui4java/htdocs. This means that a file there, for example, /home/groups/y/yu/yui4java/htdocs/example.html can be navigated from http://yui4java.sourceforge.net/example.html.&lt;br /&gt;&lt;br /&gt;it is important that all directory accesible from the web (for example, directories with javascript, css, images, etc), to contain a file .htaccess with the following content:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Options +Indexes&lt;br /&gt;&lt;/pre&gt;that's all. I hope this can be usefull to new sourceforge users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-5774153186588863826?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/5774153186588863826/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=5774153186588863826' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/5774153186588863826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/5774153186588863826'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2010/03/how-to-start-publishing-your-project-in.html' title='How to start publishing your project in sourceforge'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-4682927068182412073</id><published>2010-03-03T04:30:00.000-08:00</published><updated>2010-03-03T04:45:14.914-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svg feConvolveMatrix &quot;kernel sum 0&quot; kernel zero &quot;kernel sum zero&quot; convolution &quot;convolve matrix&quot; &quot;matrix sum zero&quot;'/><title type='text'>Problem with SVG feConvolveMatrix filter with kernel which sum is zero</title><content type='html'>Here I will document an issue that I had working with SVG feConvolveMatrix primitive filter that was a really pain for me but has a simple solution. &lt;br /&gt;&lt;br /&gt;My problem was using feConvolveMatrix filter primitive to apply operations like blur, sharp, edge detection, etc to images. Everything works OK, except for kernel matrix which elements sum equals 0. &lt;br /&gt;&lt;br /&gt;For example, the following filters works as spected:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;filter id="vstripe"&amp;gt;&lt;br /&gt; &amp;lt;feConvolveMatrix order="3" &lt;br /&gt; kernelMatrix=" &lt;br /&gt;   2 -1  2 &lt;br /&gt;  -1  2 -1&lt;br /&gt;   2 -1  2"&lt;br /&gt;  /&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;but the following filter (with a kernel which elements sum equals 0) won't work ( will show an empty rectangle):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;filter id="vstripe"&amp;gt;&lt;br /&gt; &amp;lt;feConvolveMatrix order="3" &lt;br /&gt; kernelMatrix=" &lt;br /&gt;  -1 -1 -1&lt;br /&gt;  -1  8 -1&lt;br /&gt;  -1 -1 -1"&lt;br /&gt;  /&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This problem manifest only for svg &lt;image&gt; elements and in all svg user agents (mozilla, webkit, opera, inskape, etc). This problem is very frustrating because, there are a lot of convolution filters that use kernels which element sum must be 0 (specially edge detector filters). &lt;br /&gt;&lt;br /&gt;The problem was because of the alpha channel of images. In most images, the alpha channel has a constant value for all pixels in a region and so, a convolution using these kernels will give 0 (totally transparent) and that is the reason for the empty rectangle. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The solution&lt;/span&gt; is setting the parameter preserveAlpha="true" so the alpha channel is not processed in the convolution:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;filter id="vstripe"&amp;gt;&lt;br /&gt; &amp;lt;feConvolveMatrix order="3" preserveAlpha="true"&lt;br /&gt; kernelMatrix=" &lt;br /&gt;  -1 -1 -1&lt;br /&gt;  -1  8 -1&lt;br /&gt;  -1 -1 -1"&lt;br /&gt;  /&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I hope this article can help those poor souls that, like me, are stagnant with this problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-4682927068182412073?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/4682927068182412073/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=4682927068182412073' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/4682927068182412073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/4682927068182412073'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2010/03/problem-with-svg-feconvolvematrix.html' title='Problem with SVG feConvolveMatrix filter with kernel which sum is zero'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-8551394240774014630</id><published>2010-02-02T04:45:00.001-08:00</published><updated>2010-02-02T05:04:00.785-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='replace text recursively'/><category scheme='http://www.blogger.com/atom/ns#' term='replacing text on files recursively over directories'/><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;replacing text on files recursively over directories&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In very special ocations, when I'm programming, I need to recursively replace text of all files in directories. For example, you want to recursively replace the string "import org.foo.bar.Class1" with "org2.foo.bar.Class1" in all .java files, in a java source folder. I know this can be done with a relatively simple shell (bash) script using sed, grep, etc unix commands, but what about systems that doesn't have bash? Also, there is a program called rpl (http://www.laffeycomputer.com/rpl.html) which purpose is this but, unfortunately, didn't worked for me (I compiled it on my machine, but the command fails with an error message (couldn't allocate memory or simply doesn't finnish its execution). So I implemented this functionality in java. I tested it on large source folders and works quick and nice. I hope this can be helpful for somebody:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;package org.sgx.utils;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * replace strings with new strings in multiple text files recursively over&lt;br /&gt; * directories and supports limiting the search to specific file names.&lt;br /&gt; * &lt;br /&gt; * @author sgurin&lt;br /&gt; * &lt;br /&gt; */&lt;br /&gt;public class RPL {&lt;br /&gt; public static void copyDirAndReplaceRecursively(File src, File dest,&lt;br /&gt;   String filter, String str, String replacement)&lt;br /&gt;   throws FileNotFoundException, IOException {&lt;br /&gt;  if (src.isDirectory()) {&lt;br /&gt;   dest.mkdirs();&lt;br /&gt;   File[] childs = src.listFiles();&lt;br /&gt;   for (int i = 0; i &lt; childs.length; i++) {&lt;br /&gt;    File child = childs[i];&lt;br /&gt;    File destChild = new File(dest.getAbsolutePath()&lt;br /&gt;      + File.separator + child.getName());&lt;br /&gt;    copyDirAndReplaceRecursively(child, destChild, filter, str,&lt;br /&gt;      replacement);&lt;br /&gt;   }&lt;br /&gt;  } else {&lt;br /&gt;   if (src.getName().contains(filter)) {&lt;br /&gt;    copyFileAnReplacetext(src, dest, str, replacement);&lt;br /&gt;   } else {&lt;br /&gt;    copyFileAnReplacetext(src, dest, null, null);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static void copyFileAnReplacetext(File srcFile, File destFile,&lt;br /&gt;   String str, String replacement) throws FileNotFoundException,&lt;br /&gt;   IOException {&lt;br /&gt;  StringBuffer sb = new StringBuffer();&lt;br /&gt;  InputStream is = new FileInputStream(srcFile);&lt;br /&gt;  readFile(is, sb);&lt;br /&gt;  is.close();&lt;br /&gt;  String s = sb.toString();&lt;br /&gt;  if (str != null &amp;&amp; replacement != null)&lt;br /&gt;   s = s.replace(str, replacement);&lt;br /&gt;  FileOutputStream os = new FileOutputStream(destFile);&lt;br /&gt;  os.write(s.getBytes());&lt;br /&gt;  os.close();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static void readFile(InputStream in, StringBuffer sb)&lt;br /&gt;   throws IOException {&lt;br /&gt;  BufferedReader br = new BufferedReader(new InputStreamReader(in));&lt;br /&gt;  String line = null;&lt;br /&gt;  while ((line = br.readLine()) != null) {&lt;br /&gt;   sb.append(line + "\n");&lt;br /&gt;  }&lt;br /&gt;  br.close();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // test&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  try {&lt;br /&gt;   File srcDir = new File(&lt;br /&gt;     "/home/sebastian/desarrollo/portal4/blogsJavas/src2"), destDir = new File(&lt;br /&gt;     "/home/sebastian/desarrollo/portal4/blogsJavas/src");&lt;br /&gt;   String str = "com.liferay.portlet.blogs", repl = "org.sgx.portlet.circulares";&lt;br /&gt;   FSUtils.copyDirAndReplaceRecursively(srcDir, destDir, ".java", str,&lt;br /&gt;     repl);&lt;br /&gt;&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-8551394240774014630?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/8551394240774014630/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=8551394240774014630' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/8551394240774014630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/8551394240774014630'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2010/02/replacing-text-on-files-recursively.html' title=''/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-7758111989635798743</id><published>2010-01-18T06:48:00.000-08:00</published><updated>2010-01-19T05:05:18.362-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keyboard event handling java keypress keyrelease keypressed keyreleased user swing swt'/><title type='text'>Problem with keyboard event handling in java, both with swing and swt</title><content type='html'>I will try to explain, with my bad english, a recent problem that I'm having with keyboard event handling in java using both swing and swt GUI libraries. Basically the problem is that there is not a way, both in swing and swt, of knowing the status of the keyboard keys. Basically the problem is that, while the user is still pressing the key (and never release it), keyrelease events are being throwed (!) and for that it is impossible to get the real keyrelease event. This problem only manifest in programs that need to use advance keyboard controlling; think for example in a piano simulator in which the user uses the keyboard keys as if it where a piano's keys. When the user presses a key a note turn on, and it is turned off only when the user releases it. The user can hold the key an arbitrary amount of time without release it and the note must be turned on in all that time.&lt;br /&gt;&lt;br /&gt;I will present the problem with two simple GUI snippets, one for swing and other for swt, and I will compile and execute them both in windows and linux, using sun jdk version 1.6_13. The snippets are a window that listens to keypressed and keyreleased events and prints a message when the event notification is received. In all the tests, the user will press a key and will keep it pressed for some time (more than a second) and then release it. So the correct output for this "use case" would be only two messages "keyPressed" and&lt;br /&gt;"keyReleased" in the output console. The only toolkit and OS combination that worked as spected was swt+linux. In the rest of the combinations, several "keyPressed" and&lt;br /&gt;"keyReleased" are repeated while the user is keeping the key presssed.&lt;br /&gt;&lt;br /&gt;&lt;!-- source code table--&gt;&lt;br /&gt;&lt;table style="display: block; width: 400px; table-layout: fixed;"&gt;&lt;br /&gt;&lt;tr&gt;&lt;td width="50%"&gt;&lt;b&gt;SWT snippet&lt;/b&gt;&lt;/td&gt;&lt;td width="50%"&gt;&lt;b&gt;SWING snippet&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;!-- SWT code --&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="overflow: scroll;"&gt;&lt;div class="codeBox" style="overflow: scroll;display: block; width: 200px; height: 800px; font-size: 10px; font-family: courier"&gt; &lt;span style="color: #000000"&gt;&lt;br /&gt;import&amp;nbsp;org.eclipse.swt.SWT;&lt;br &gt;import&amp;nbsp;org.eclipse.swt.events.KeyEvent;&lt;br &gt;import&amp;nbsp;org.eclipse.swt.events.KeyListener;&lt;br &gt;import&amp;nbsp;org.eclipse.swt.layout.FormLayout;&lt;br &gt;import&amp;nbsp;org.eclipse.swt.widgets.Display;&lt;br &gt;import&amp;nbsp;org.eclipse.swt.widgets.Shell;&lt;br &gt;&lt;br &gt;public&amp;nbsp;class&amp;nbsp;KeyPressTest&amp;nbsp;extends&amp;nbsp;org.eclipse.swt.widgets.Dialog&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;Shell&amp;nbsp;dialogShell;&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;KeyPressTest(Shell&amp;nbsp;parent,&amp;nbsp;int&amp;nbsp;style)&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super(parent,&amp;nbsp;style);&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;open()&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shell&amp;nbsp;parent&amp;nbsp;=&amp;nbsp;getParent();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dialogShell&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Shell(parent,&amp;nbsp;SWT.DIALOG_TRIM&amp;nbsp;|&amp;nbsp;SWT.APPLICATION_MODAL);&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dialogShell.addKeyListener(new&amp;nbsp;KeyListener()&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;keyReleased(KeyEvent&amp;nbsp;arg0)&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println("keyReleased");&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;keyPressed(KeyEvent&amp;nbsp;arg0)&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println("keyPressed");&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dialogShell.setLayout(new&amp;nbsp;FormLayout());&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dialogShell.layout();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dialogShell.pack();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dialogShell.setLocation(getParent().toDisplay(100,&amp;nbsp;100));&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dialogShell.open();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Display&amp;nbsp;display&amp;nbsp;=&amp;nbsp;dialogShell.getDisplay();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;(!dialogShell.isDisposed())&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!display.readAndDispatch())&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display.sleep();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Display&amp;nbsp;display&amp;nbsp;=&amp;nbsp;Display.getDefault();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shell&amp;nbsp;shell&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Shell(display);&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KeyPressTest&amp;nbsp;inst&amp;nbsp;=&amp;nbsp;new&amp;nbsp;KeyPressTest(shell,&amp;nbsp;SWT.NULL);&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inst.open();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br &gt;}&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- swing code --&gt;&lt;br /&gt;&lt;br /&gt;&lt;td&gt;&lt;div style="overflow: scroll;display: block; width: 200px; height: 800px; font-size: 10px; font-family: courier"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;import&amp;nbsp;java.awt.event.KeyEvent;&lt;br&gt;import&amp;nbsp;java.awt.event.KeyListener;&lt;br&gt;import&amp;nbsp;javax.swing.SwingUtilities;&lt;br&gt;import&amp;nbsp;javax.swing.WindowConstants;&lt;br&gt;&lt;br&gt;public&amp;nbsp;class&amp;nbsp;KeyPressTest&amp;nbsp;extends&amp;nbsp;javax.swing.JFrame&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;KeyPressTest()&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initGUI();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;void&amp;nbsp;initGUI()&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.addKeyListener(new&amp;nbsp;KeyListener()&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;keyTyped(KeyEvent&amp;nbsp;e)&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;keyReleased(KeyEvent&amp;nbsp;e)&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println("keyReleased");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;keyPressed(KeyEvent&amp;nbsp;e)&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println("keyPressed");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pack();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setSize(400,&amp;nbsp;300);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SwingUtilities.invokeLater(new&amp;nbsp;Runnable()&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;run()&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KeyPressTest&amp;nbsp;inst&amp;nbsp;=&amp;nbsp;new&amp;nbsp;KeyPressTest();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inst.setLocationRelativeTo(null);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inst.setVisible(true);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;}&lt;br&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;And the results, for swing and swt in combination with windows and linux are:&lt;br /&gt;&lt;table border="1" style="width: 460px;"&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="width: 60px; padding: 5px;"&gt;&lt;/td&gt;&lt;br /&gt;&lt;td style="width: 200px; padding: 5px;"&gt;&lt;b&gt;windows&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td style="width: 200px; padding: 5px;"&gt;&lt;b&gt;linux&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="width: 60px; padding: 5px;"&gt;&lt;b&gt;swing&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td style="width: 200px; padding: 5px;"&gt;&lt;div&gt;&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;....&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td style="width: 200px; padding: 5px;"&gt;&lt;div&gt;&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;....&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="width: 60px; padding: 5px;"&gt;&lt;b&gt;SWT&lt;/b&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;div&gt;&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;....&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td&gt;&lt;div&gt;&lt;br /&gt;keyPressed&lt;br /&gt;keyPressed&lt;br /&gt;keyPressed&lt;br /&gt;keyPressed&lt;br /&gt;keyPressed&lt;br /&gt;...&lt;br /&gt;keyPressed&lt;br /&gt;keyPressed&lt;br /&gt;keyReleased&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;As I understand, THIS IS A BUG, because the behaviour does not apply the documentation. For example, this is the more relevant paragraph about keypressed and keyreleased events of swing (java.awt.event.KeyEvent javadoc):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Key pressed" and "key released" events are lower-level and depend on the platform and keyboard layout. They are generated whenever a key is pressed or released, and are the only way to find out about keys that don't generate character input (e.g., action keys, modifier keys, etc.).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;and this is not true because keyreleased events are generated without a key being released&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note that the only different situation is swt in linux. Imho it is still incorrect (because several keypressed events are fired but only one actually happens) but in this case we can we can know when the key is really releaed. In the other scenarios it is impossible.&lt;br /&gt;&lt;br /&gt;IMHO, a cause of this problem coud be that swt and swing designers have modeled the keyboard event system thinking on text and not in other keyboard usage. In the case of swt that heavily relies on underlying plafform (gtk in linux, winapi in windows), I think the event stuff is a responsability of the uderlying platform and it is there where we note the defferencies.&lt;br /&gt;&lt;br /&gt;So my question for java developers reading this is if there exists a way of being correctly notified when a keyrelease event occurs using swing or swt. Other question could be if there exists other library for java which handles this correctly because now, I havent figure out how to do this simple task in java ;(.&lt;br /&gt;&lt;br /&gt;If you are a java programmer and want a workaround, I think the only one is the following. Since, while the key is pressed the keypressed event is fired regularly, the way we have to know that a key is released is when keypressed event is not firing anymore for that key. Note that this will be  incorrect (because it is not really a keyrelease event) and can be expensive to implement because it because it require, for each key, a listener thread that triggers the fake keyrelease event when it detects no more keypressed. My proposal is the following keylistener (KeyListener2 inner class):&lt;br /&gt;&lt;br /&gt;&lt;div style="display: block; height: 500px; overflow: scroll"&gt;&lt;code&gt;&lt;br /&gt;package org.sgx.javatests.keypress.swingAll;&lt;br /&gt;&lt;br /&gt;import java.awt.Component;&lt;br /&gt;import java.awt.event.KeyEvent;&lt;br /&gt;import java.awt.event.KeyListener;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;import java.util.Map;&lt;br /&gt;import javax.swing.SwingUtilities;&lt;br /&gt;import javax.swing.WindowConstants;&lt;br /&gt;&lt;br /&gt;public class SwingSollutionAllClasses {&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * this class is responsible for maintaining a key status map&lt;br /&gt;  * @author sebastian&lt;br /&gt;  *&lt;br /&gt;  */&lt;br /&gt; static class InputManager implements KeyListener {&lt;br /&gt;  //sgurin : þe last keypressed and keyreleased events registered for each key&lt;br /&gt;  Map&lt;Integer, KeyEvent&gt; lastKeyPressedEvents = new HashMap&lt;Integer, KeyEvent&gt;();&lt;br /&gt;  Map&lt;Integer, KeyEvent&gt; lastKeyReleasedEvents = new HashMap&lt;Integer, KeyEvent&gt;();   &lt;br /&gt;  //one for each ascii character.&lt;br /&gt;  public boolean[] key_state_up = new boolean[256];  //true if pressed&lt;br /&gt;  public boolean[] key_state_down = new boolean[256]; //true if not pressed  &lt;br /&gt;  //a string used as a buffer by widgets or other text input controls&lt;br /&gt;  private String keyCache = "";  &lt;br /&gt;  public InputManager(){&lt;br /&gt;   for (int i = 0; i &lt; key_state_up.length; i++) {&lt;br /&gt;    key_state_up[i]=true;&lt;br /&gt;    key_state_down[i]=false;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  public void keyPressed(KeyEvent e) {&lt;br /&gt;   int code = e.getKeyCode();&lt;br /&gt;   if( code &gt;= 0 &amp;&amp; code &lt; 256 ) {&lt;br /&gt;    key_state_down[code] = true;&lt;br /&gt;    key_state_up[code] = false;&lt;br /&gt;    lastKeyPressedEvents.put(code, e);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  public void keyReleased(KeyEvent e) {&lt;br /&gt;   int code = e.getKeyCode();&lt;br /&gt;   if( code &gt;= 0 &amp;&amp; code &lt; 256 ) {&lt;br /&gt;    key_state_up[code] = true;&lt;br /&gt;    key_state_down[code] = false;&lt;br /&gt;    lastKeyReleasedEvents.put(code, e);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  public void keyTyped(KeyEvent e) { &lt;br /&gt;   keyCache += e.getKeyChar();   &lt;br /&gt;  }&lt;br /&gt;  public boolean isKeyDown( int key ) {&lt;br /&gt;   return key_state_down[key];&lt;br /&gt;  }  &lt;br /&gt;  public boolean isKeyUp( int key ) {&lt;br /&gt;   return key_state_up[key];&lt;br /&gt;  }  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * this class is a new KeyListener adapter that corrects the default keyreleased &lt;br /&gt;  * notification policy (repeatedly notifies keypressed and keyreleased events &lt;br /&gt;  * when a key is pressed and not released for a while). &lt;br /&gt;  * &lt;br /&gt;  * note that this is a heavy listener, use only at special cases (when you need different behaviour for keyreleased event handling)&lt;br /&gt;  * it uses an InputManager that mantains the key status and starts a thread that checks each key status and notify changes&lt;br /&gt;  * &lt;br /&gt;  * @author sgurin&lt;br /&gt;  *&lt;br /&gt;  */&lt;br /&gt; static abstract class KeyListener2 implements KeyListener {&lt;br /&gt;  &lt;br /&gt;  KeyChecker checkerThread ;&lt;br /&gt;  public KeyListener2(Component target) {&lt;br /&gt;   super();  &lt;br /&gt;   checkerThread=new KeyChecker(this, target);&lt;br /&gt;   checkerThread.start();&lt;br /&gt;  } &lt;br /&gt;  public void destroy() {&lt;br /&gt;   checkerThread.stopChecking();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  static class KeyChecker extends Thread implements KeyListener {&lt;br /&gt;   private static final long SLEEP_AMOUNT =50;&lt;br /&gt;   InputManager iman;&lt;br /&gt;   Component target;&lt;br /&gt;   volatile private boolean stoped;&lt;br /&gt;   public boolean[] last_key_state_up=null, last_key_state_down=null;&lt;br /&gt;   KeyListener2 listener;&lt;br /&gt;   &lt;br /&gt;   public KeyChecker(KeyListener2 listener, Component target){&lt;br /&gt;    iman = new InputManager();&lt;br /&gt;    this.target = target;&lt;br /&gt;    this.listener = listener;&lt;br /&gt;    target.addKeyListener(iman);&lt;br /&gt;    target.addKeyListener(this);&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   @Override&lt;br /&gt;   public void run() {   &lt;br /&gt;    last_key_state_down=cloneArray(iman.key_state_down);&lt;br /&gt;    last_key_state_up = cloneArray(iman.key_state_up);&lt;br /&gt;    while(!stoped) {&lt;br /&gt;     try {&lt;br /&gt;      Thread.sleep(SLEEP_AMOUNT);&lt;br /&gt;     } catch (InterruptedException e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;     }&lt;br /&gt;     for (int i = 0; i &lt; last_key_state_up.length; i++) {&lt;br /&gt;      if(last_key_state_up[i] &amp;&amp; iman.key_state_down[i]) &lt;br /&gt;       listener.keyPressed(iman.lastKeyPressedEvents.get(i));&lt;br /&gt;      if(last_key_state_down[i] &amp;&amp; iman.key_state_up[i])&lt;br /&gt;       listener.keyReleased(iman.lastKeyReleasedEvents.get(i));    &lt;br /&gt;     }    &lt;br /&gt;     last_key_state_down=cloneArray(iman.key_state_down);&lt;br /&gt;     last_key_state_up = cloneArray(iman.key_state_up);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   private boolean[] cloneArray(boolean[] a) {&lt;br /&gt;    if(a==null)&lt;br /&gt;     return null;&lt;br /&gt;    boolean [] r = new boolean[a.length];&lt;br /&gt;    for (int i = 0; i &lt; r.length; i++) &lt;br /&gt;     r[i]=a[i];&lt;br /&gt;    return r;&lt;br /&gt;   }&lt;br /&gt;   public void stopChecking() {&lt;br /&gt;    stoped=true;&lt;br /&gt;   }&lt;br /&gt;   @Override&lt;br /&gt;   public void keyPressed(KeyEvent e) {}&lt;br /&gt;   @Override&lt;br /&gt;   public void keyReleased(KeyEvent e) {   &lt;br /&gt;   }&lt;br /&gt;   @Override&lt;br /&gt;   public void keyTyped(KeyEvent e) {&lt;br /&gt;    listener.keyTyped(e);&lt;br /&gt;   } &lt;br /&gt;  } &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * swing test&lt;br /&gt;  */&lt;br /&gt; static class KeyPressTest extends javax.swing.JFrame {&lt;br /&gt;  public KeyPressTest() {&lt;br /&gt;   super();&lt;br /&gt;   initGUI();&lt;br /&gt;  } &lt;br /&gt;  private void initGUI() {&lt;br /&gt;   try {&lt;br /&gt;    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);&lt;br /&gt;    new KeyListener2(this) {    &lt;br /&gt;     @Override&lt;br /&gt;     public void keyTyped(KeyEvent e) {}    &lt;br /&gt;     @Override&lt;br /&gt;     public void keyReleased(KeyEvent e) {&lt;br /&gt;      System.out.println("keyReleased");&lt;br /&gt;     }    &lt;br /&gt;     @Override&lt;br /&gt;     public void keyPressed(KeyEvent e) {&lt;br /&gt;      System.out.println("keyPressed");&lt;br /&gt;     }&lt;br /&gt;    };&lt;br /&gt;    pack();&lt;br /&gt;    setSize(400, 300);&lt;br /&gt;   } catch (Exception e) {&lt;br /&gt;    e.printStackTrace();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  public static void main(String[] args) {&lt;br /&gt;   SwingUtilities.invokeLater(new Runnable() {&lt;br /&gt;    public void run() {&lt;br /&gt;     KeyPressTest inst = new KeyPressTest();&lt;br /&gt;     inst.setLocationRelativeTo(null);&lt;br /&gt;     inst.setVisible(true);&lt;br /&gt;    }&lt;br /&gt;   });&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  KeyPressTest.main(args);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Related information I found:&lt;br /&gt;http://stackoverflow.com/questions/1736828/how-to-stop-repeated-keypressed-keyreleased-events-in-swing&lt;br /&gt;http://groups.google.com/group/comp.lang.java.gui/browse_thread/thread/e215f9729154511e&lt;br /&gt;http://gpsnippets.blogspot.com/2008/03/keyboard-input-polling-system-in-java.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-7758111989635798743?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/7758111989635798743/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=7758111989635798743' title='8 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/7758111989635798743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/7758111989635798743'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2010/01/problem-with-keyboard-event-handling-in.html' title='Problem with keyboard event handling in java, both with swing and swt'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-674539695351884809</id><published>2009-06-20T19:04:00.000-07:00</published><updated>2009-06-21T07:30:58.977-07:00</updated><title type='text'></title><content type='html'>&lt;span style="font-weight: bold;font-size:180%;" &gt;java2script SWT portlets&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;author: Sebastián Gurin &lt;/span&gt;&lt;/span&gt;&lt;sebastigurin@gmail.com&gt;&lt;br /&gt;&lt;/sebastigurin@gmail.com&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="" style="display: block;" id="formatbar_Add_Video" title="Añadir vídeo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="addVideo();" onmousedown="CheckFormatting(event);;ButtonMouseDown(this);"&gt;&lt;img src="http://www.blogger.com/img/blank.gif" alt="Añadir vídeo" class="gl_video" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;sebastigurin@gmail.com&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;In this document I will try to explain how to make a simple jsp portlet with a &lt;a href="http://j2s.sourceforge.net/"&gt;java2script&lt;/a&gt; swt  application as its contents. We will use liferay portal for testing it. You can download the portlet WAR file and project sources from&lt;a href="http://groups.google.com/group/java2script/files"&gt; java2script group files&lt;/a&gt; . the file is called &lt;a href="http://groups.google.com/group/java2script/web/myJ2sPortlet.war"&gt;MyJ2sPortlet.war&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is not a tutorial neither of swt gui applications, portlets, or client-server application. Here I will only show what is the best way, IMHO, of showing a swt shell as a portlet..&lt;br /&gt;&lt;br /&gt;If you want to test this portlet you only need to download liferay portal. If you want to import this as an eclipse project and make your own swt portlet you will have to be familiarized with  portlet development and java2script.&lt;br /&gt;&lt;br /&gt;In the first place I developed a simple swt application using my favorite visual editor in eclipse. In gnome it looks like the following:&lt;/sebastigurin@gmail.com&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HR_FUhhrdJg/Sj2XIaR-LiI/AAAAAAAAAH4/0bjK0Ayhdtw/s1600-h/1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 128px;" src="http://3.bp.blogspot.com/_HR_FUhhrdJg/Sj2XIaR-LiI/AAAAAAAAAH4/0bjK0Ayhdtw/s320/1.png" alt="" id="BLOGGER_PHOTO_ID_5349598103135464994" border="0" /&gt;&lt;/a&gt;&lt;style type="text/css"&gt;&lt;!--   @page { margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;p style="margin-bottom: 0in;"&gt;We want to render it as a portlet. In this solution, the resulting portlet (with red halo) will be:&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HR_FUhhrdJg/Sj2WHa54R9I/AAAAAAAAAHo/8iYsT0dM-vM/s1600-h/2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 186px;" src="http://1.bp.blogspot.com/_HR_FUhhrdJg/Sj2WHa54R9I/AAAAAAAAAHo/8iYsT0dM-vM/s320/2.png" alt="" id="BLOGGER_PHOTO_ID_5349596986611353554" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;style type="text/css"&gt;  &lt;!--   @page { margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt;  &lt;p style="margin-bottom: 0in;"&gt;In the following picture we use liferay freeform layout. Observe that the shell will expand accordingly to the portlet size:&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HR_FUhhrdJg/Sj2WHrJa3aI/AAAAAAAAAHw/4kdoG4GRGLY/s1600-h/3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 291px;" src="http://4.bp.blogspot.com/_HR_FUhhrdJg/Sj2WHrJa3aI/AAAAAAAAAHw/4kdoG4GRGLY/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5349596990971501986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;style type="text/css"&gt;  &lt;!--   @page { margin: 0.79in }   P { margin-bottom: 0.08in }   H1 { margin-bottom: 0.08in }   H1.western { font-family: "Arial", sans-serif; font-size: 16pt }   H1.cjk { font-family: "Arial"; font-size: 16pt }   H1.ctl { font-family: "Arial"; font-size: 16pt }   A:link { so-language: zxx }  --&gt;  &lt;/style&gt;  &lt;h1 class="western"&gt;deploying the portlet to liferay for testing&lt;/h1&gt; &lt;p style="margin-bottom: 0in;"&gt;The .war file is a web application portlet archive ready for deploy in a portal application. For testing the .war portlet in liferay you must:&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;download  liferay-bundled-with-tomcat, for example liferay 4.4.1 bundled with  tomcat 5.5  &lt;a href="http://sourceforge.net/project/downloading.php?group_id=49260&amp;amp;filename=liferay-portal-tomcat-5.5-4.4.1.zip&amp;amp;a=34438561"&gt;http://sourceforge.net/project/downloading.php?group_id=49260&amp;amp;filename=liferay-portal-tomcat-5.5-4.4.1.zip&amp;amp;a=34438561&lt;/a&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;run bin/startup,   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;login as &lt;a href="mailto:test@liferay.com"&gt;test@liferay.com&lt;/a&gt;  password “test”.   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;copy myJ2sPortlet.war to  /home/yourusername/liferay/deploy (or in the case of windows  something like &lt;a href="file:///c:/Documents"&gt;c:\Documents&lt;/a&gt; and  settings\Users\yourusername\liferay\deploy).   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;Wait until liferay console prints  “&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;22:43:54,308  INFO  [PortletHotDeployListener:425] Portlets for myJ2sPortlet  registered successfully”&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;Click on “welcome test!” →  add application → java2script → myj2sportlet and the portlet  should be added to the page&lt;/p&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p style="margin-bottom: 0in;"&gt;In the 4 step is where we actually make the portlet hot deploy in liferay. Alternatively, you can install de portlet from inside the portal. Just open Admin-&gt;admin liferay portlet, click "plugins" tab, click "install more plugins", click "upload file" tab, and choose MyJ2sPortlet.war. Once this step is finnished, liferay console should print somethings like the following telling us the portlet was successfully deployed:&lt;br /&gt;&lt;/p&gt;&lt;p  style="margin-bottom: 0in;font-family:courier new;"&gt;&lt;span style="font-size:78%;"&gt;13:06:38,595 INFO  [BaseDeployer:493] Deploying myJ2sPortlet.war&lt;br /&gt;Expanding: /home/sebastian/beeblos4/deploy/myJ2sPortlet.war into /tmp/20090621130638598&lt;br /&gt;Copying 1 file to /tmp/20090621130638598/WEB-INF&lt;br /&gt;13:06:39,230 INFO  [BaseDeployer:1132] Modifying Servlet 2.5 /tmp/20090621130638598/WEB-INF/web.xml&lt;br /&gt;Copying 735 files to /home/sebastian/desarrollo/portal4/tomcat/webapps/myJ2sPortlet&lt;br /&gt;Copied 76 empty directories to 3 empty directories under /home/sebastian/desarrollo/portal4/tomcat/webapps/myJ2sPortlet&lt;br /&gt;Copying 1 file to /home/sebastian/desarrollo/portal4/tomcat/webapps/myJ2sPortlet&lt;br /&gt;Deleting directory /tmp/20090621130638598&lt;br /&gt;13:06:40,151 INFO  [PortletAutoDeployListener:87] Portlets for /home/sebastian/beeblos4/deploy/myJ2sPortlet.war copied successfully&lt;br /&gt;13:06:43,934 INFO  [PluginPackageHotDeployListener:74] Reading plugin package for myJ2sPortlet&lt;br /&gt;13:06:43,935 WARN  [PluginPackageHotDeployListener:123] Plugin package on context myJ2sPortlet cannot be tracked because this WAR does not contain a liferay-plugin-package.xml file&lt;br /&gt;13:06:44,506 INFO  [PluginPackageHotDeployListener:187] Plugin package myJ2sPortlet/myJ2sPortlet/unknown/war registered successfully&lt;br /&gt;13:06:44,511 INFO  [PortletHotDeployListener:133] Registering portlets for myJ2sPortlet&lt;br /&gt;13:06:44,600 INFO  [PortletHotDeployListener:425] Portlets for myJ2sPortlet registered successfully&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Note that the portlet is not deployed until liferay prints "&lt;span style="font-size:78%;"&gt; Portlets for myJ2sPortlet registered successfully&lt;/span&gt;"&lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;Steps I followed for creating the project&lt;/h1&gt;  &lt;p style="margin-bottom: 0in;"&gt;The .war file is a zip and contains both binary (.class and .js) and source code (java). in src/ directory you can find portlet and servlet code and in /html/myJ2s_j2sproject/src-j2s it is the swt shell java sources.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;I recommend you to decompress it and import the  project to eclipse. This is a “portlet project” and you can easily build, package and deploy on liferay via a simple ant script (configure build.properties according to your system).&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;In summary this web application serve the java2script content statically and once deployed it still can be accessed from outside the portal application , for example from &lt;a href="http://localhost:8080/myJ2sPortlet/html/myJ2s_j2sproject/org.sgx.portlet.myJ2sPortlet.gui.Dialog1.html"&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;i&gt;&lt;u&gt;http://localhost:8080/myJ2sPortlet/html/myJ2s_j2sproject/org.sgx.portlet.myJ2sPortlet.gui.Dialog1.html&lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;For one side, we have an html and javascript files generated by java2script that will render a maximized swt shell:&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;span style="text-decoration: none;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;u&gt;dialogShell&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;u&gt;Shell&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(parent,  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;u&gt;SWT&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.NONE);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;   //.... initialize shell content......&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;u&gt;dialogShell&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.layout();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;u&gt;dialogShell&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.pack();   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;u&gt;dialogShell&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.open();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;u&gt;dialogShell&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.setMaximized(&lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;u&gt;Display&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; display = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;u&gt;dialogShell&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.getDisplay();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;u&gt;dialogShell&lt;/u&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.isDisposed()) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (!display.readAndDispatch())&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;     display.sleep();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;   }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;(see Dialog1.java)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin-bottom: 0in;"&gt;in the other side, out portlet contents will be a maximized iframe which points to the static content. Portlet's View.jsp:&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(191, 95, 63);"&gt;&lt;%@&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;page&lt;/span&gt; &lt;span style="color: rgb(127, 0, 127);"&gt;contentType&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;i&gt;"text/html"&lt;/i&gt;&lt;/span&gt;&lt;span style="color: rgb(191, 95, 63);"&gt;%&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(191, 95, 63);"&gt;&lt;%@&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;page&lt;/span&gt; &lt;span style="color: rgb(127, 0, 127);"&gt;pageEncoding&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;i&gt;"UTF-8"&lt;/i&gt;&lt;/span&gt;&lt;span style="color: rgb(191, 95, 63);"&gt;%&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="left"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt;&lt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt;iframe&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt; &lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt;height&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt;=&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;i&gt;&lt;u&gt;"100%"&lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt; &lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt;width&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt;=&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;i&gt;&lt;u&gt;"100%"&lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt;  &lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt;src&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;u&gt;=&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;&lt;i&gt;&lt;u&gt;"/myJ2sPortlet/html/myJ2s_j2sproject/org.sgx.portlet.myJ2sPortlet.gui.Dialog1.html"&lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Monospace;"&gt;&lt;span style="font-size:78%;"&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Times New Roman,serif;"&gt;Having  java2script application in a separate iframe (and thus in a separate dom) will prevent to have nasty javascript libraries incompatibilities. Also we took advantage of swt shell maximization for the portlet content size adjustment.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Times New Roman,serif;"&gt;Hope this can be useful for people who wish to experiment with java2script applications inside portals.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;sebastigurin@gmail.com&gt;&lt;/sebastigurin@gmail.com&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-674539695351884809?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/674539695351884809/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=674539695351884809' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/674539695351884809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/674539695351884809'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2009/06/java2script-swt-portlets-author.html' title=''/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_HR_FUhhrdJg/Sj2XIaR-LiI/AAAAAAAAAH4/0bjK0Ayhdtw/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-6539159750861027096</id><published>2009-05-20T05:17:00.000-07:00</published><updated>2009-05-22T06:05:57.939-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk themes'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse package explorer en linux'/><category scheme='http://www.blogger.com/atom/ns#' term='gtkrc'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse  linux'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='desperdicio de espacio en eclipse'/><title type='text'></title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Cómo hacer que eclipse se vea mejor en linux&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-style:dashed"&gt;&lt;br /&gt;&lt;span style="font-size:small"&gt;Plase translate this article to your favorite language:&lt;/span&gt;&lt;br /&gt;&lt;script src="http://www.gmodules.com/ig/ifr?url=http://www.google.com/ig/modules/translatemypage.xml&amp;up_source_language=es&amp;w=160&amp;h=60&amp;title=&amp;border=&amp;output=js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Una de las principales incomodidades de eclipse para linux es el desperdicio de espacio (principalmente vertical). Comparemos a continuación la versión de windows y la versión de linux. Observemos en particular, como la versión de windows es capaz de mostrar muchísima más información en la vista package explorer que la versión de linux:&lt;br /&gt;&lt;br /&gt;eclispe para linux (sin ajustes)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HR_FUhhrdJg/ShP3yk36VeI/AAAAAAAAAHQ/xJvThxqUJl8/s1600-h/Pantallazo-Java+-+beeblos4-portal-web-docroot-html-themes-beeblosWeb-css-custom.css+-+Eclipse+Platform+.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 195px;" src="http://2.bp.blogspot.com/_HR_FUhhrdJg/ShP3yk36VeI/AAAAAAAAAHQ/xJvThxqUJl8/s320/Pantallazo-Java+-+beeblos4-portal-web-docroot-html-themes-beeblosWeb-css-custom.css+-+Eclipse+Platform+.png" alt="" id="BLOGGER_PHOTO_ID_5337882431627875810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;eclipse para windows:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HR_FUhhrdJg/ShP3yYNR09I/AAAAAAAAAHI/ykOykzSHzdU/s1600-h/screeshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 250px;" src="http://4.bp.blogspot.com/_HR_FUhhrdJg/ShP3yYNR09I/AAAAAAAAAHI/ykOykzSHzdU/s320/screeshot.png" alt="" id="BLOGGER_PHOTO_ID_5337882428227834834" border="0" /&gt;&lt;/a&gt;Para proyectos grandes, con muchos recursos, este desperdicio de espacio es bastante molesto ya que cuanto más se tenga que hacer scroll para encontrar un recurso, más se distrae uno. Además de las vistas en forma de árbol como la package explorer, navigator, ant, outline, etc, en mi opinión eclipse para linux también desperdicia mucho espacio horizontal en los botones de la barra de herramientas, menu, etc.&lt;br /&gt;&lt;br /&gt;Lamentablemente, las preferencias de eclipse no permiten cambiar la fuente, ni el espaciado de los elementos de este tipo de componentes. Sin embargo, dado de que en linux, SWT (el toolkit gráfico utilizado por eclipse) se basa en los widgets de gtk+ lo que sí podemos hacer es personalizar la theme gtk de forma de solucionar esto.&lt;br /&gt;&lt;br /&gt;La forma más fácil de hacer esto es editando el archivo ~/.gtkrc-2.0 con el siguiente contenido:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;style "gtkcompact" {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    font_name="Sans 8"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkButton::default_border={0,0,0,0}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkButton::default_outside_border={0,0,0,0}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkButtonBox::child_min_width=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkButtonBox::child_min_heigth=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkButtonBox::child_internal_pad_x=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkButtonBox::child_internal_pad_y=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkMenu::vertical-padding=1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkMenuBar::internal_padding=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkMenuItem::horizontal_padding=4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkToolbar::internal-padding=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkToolbar::space-size=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkOptionMenu::indicator_size=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkOptionMenu::indicator_spacing=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkPaned::handle_size=4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkRange::trough_border=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkRange::stepper_spacing=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkScale::value_spacing=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkScrolledWindow::scrollbar_spacing=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkExpander::expander_size=10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkExpander::expander_spacing=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkTreeView::vertical-separator=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkTreeView::horizontal-separator=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkTreeView::expander-size=8&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkTreeView::fixed-height-mode=TRUE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    GtkWidget::focus_padding=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class "GtkWidget" style "gtkcompact"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;style "gtkcompactextra" {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    xthickness=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    ythickness=0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class "GtkButton" style "gtkcompactextra"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class "GtkToolbar" style "gtkcompactextra"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class "GtkPaned" style "gtkcompactextra"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Básicamente, las expresiones que comienzan con "style" son reglas de estilo, mientras que las expresiones que comienzan con "class"  aplican una regla de estilo a algún tipo de widget gtk. Luego de este cambio, al iniciar eclipse se ve prácticamente con el mismo espaciado que la versión de windows:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HR_FUhhrdJg/ShP6TEyy08I/AAAAAAAAAHY/FvHjsnCRRbU/s1600-h/eclipse+fixed.png.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 222px;" src="http://4.bp.blogspot.com/_HR_FUhhrdJg/ShP6TEyy08I/AAAAAAAAAHY/FvHjsnCRRbU/s320/eclipse+fixed.png.png" alt="" id="BLOGGER_PHOTO_ID_5337885188975416258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Notar que particularmente el problema es que todas las themes gtk que comunmente vienen instaladas dejan demasiado espacio (en el contexto de un programador) entre items del widget Tree de gtk (GtkTreeView).&lt;br /&gt;&lt;br /&gt;Este pequeño cambio hace, en mi opinión, 100% más utilizable a eclipse en linux.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-6539159750861027096?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/6539159750861027096/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=6539159750861027096' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/6539159750861027096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/6539159750861027096'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2009/05/como-hacer-que-eclipse-se-vea-mejor-en.html' title=''/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HR_FUhhrdJg/ShP3yk36VeI/AAAAAAAAAHQ/xJvThxqUJl8/s72-c/Pantallazo-Java+-+beeblos4-portal-web-docroot-html-themes-beeblosWeb-css-custom.css+-+Eclipse+Platform+.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-1890348309655975871</id><published>2009-05-04T06:30:00.000-07:00</published><updated>2009-05-04T06:41:14.358-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache 2.2'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat 5.5'/><category scheme='http://www.blogger.com/atom/ns#' term='ajp'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy_ajp'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;tomcat 5.5 behind apache 2.2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Recently I needed to add a web application hosted in tomcat 5.5 to an apache 2.2 web server that already serves static content, svn, web dav, etc. I tried lots of ways of making this, and in this document I will describe the best sollution I've found.&lt;br /&gt;&lt;br /&gt;In your apache's httpd.conf file add the following lines, for example at the end of the file:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;LoadModule proxy_module modules/mod_proxy.so&lt;br /&gt;LoadModule proxy_ajp_module modules/mod_proxy_ajp.so&lt;br /&gt;&amp;lt;Location /tomcatSite/ &gt;&lt;br /&gt;   ProxyPass ajp://localhost:8009/&lt;br /&gt;&amp;lt;/Location&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This tells apache that all http requests pointing to&lt;span style="font-family:courier new;"&gt; http://yourhost/tomcatSite/ &lt;/span&gt;will be redirected to a running apache instance. So save the file, restart apache, start tomcat and try to navigate to http &lt;span style="font-family:courier new;"&gt;http://yourhost/tomcatSite/&lt;/span&gt;. In a regular tomcat installation you should see the tomcat's main page.&lt;br /&gt;&lt;br /&gt;The idea is that apache to listen on port 80 and tomcat to listen on another port, for example 8080. In my case as I said, this allow me to have my j2ee application in &lt;span style="font-family:courier new;"&gt;http://yourhost/tomcatSite/ &lt;/span&gt;but taking advantage of apache&lt;span style="font-family:courier new;"&gt;'s &lt;/span&gt;flexibility, efficiency, supported protocols/servers like svn, webdav, etc.&lt;br /&gt;&lt;br /&gt;I hope this can be usefull for somebody as it was for me...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-1890348309655975871?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/1890348309655975871/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=1890348309655975871' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/1890348309655975871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/1890348309655975871'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2009/05/tomcat-5.html' title=''/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-6752544544006518311</id><published>2009-04-29T08:57:00.000-07:00</published><updated>2009-05-04T06:42:43.487-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.properties file'/><category scheme='http://www.blogger.com/atom/ns#' term='.properties bundle to javabean'/><category scheme='http://www.blogger.com/atom/ns#' term='bundle2javabean'/><category scheme='http://www.blogger.com/atom/ns#' term='.build java class from .properties file'/><category scheme='http://www.blogger.com/atom/ns#' term='java bean .properties'/><title type='text'></title><content type='html'>&lt;span style="font-style: italic;font-size:180%;" &gt;&lt;span style="font-family:georgia;"&gt;Generating a java bean from a properties file&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;little introduction to .properties files&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, this is my situation. In my work, often I'm in need of making configurable stuff so non-programmer users can configure certain aspect of a application only editing text files. Xml is great for that, specialy if you want to support complex data and formally define de format of the document with a DTD section. But, sometimes you need to define only few configurable string values and in these circunstance xml can be like killing a fly with a gun. A much more confortable way in these cases is to use .properties resources. These are plain text files with for example the following code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;username=fulano&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;password=xyz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;serverUrl=http://192.168.1.111&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the most common situation you left these files inside your classpath and some java class will read them.&lt;br /&gt;&lt;br /&gt;In the last example, a web service client will read the account information from a .properties file. For reading the properties, we can, for example, name the file account1.properties and store it in the same package as some WebServiceClientManager.class. In side this class we simply do&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;InputStream stream = this.getClass().getResourceAsStream("account1.properties");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;java.util.Properties props = new java.util.Properties();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;props.load(stream);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;String username = props.get("username");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;String password= props.get("password");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;etc.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note that java.util.Properties objects are java.utils.HashMap representing the key=value in the .properties file. Note that because of the last, the order of properties is not respected.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;Generating java bean class code from .properties files&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, in my case, I feel more confortable dealing with java objects than with maps (in which you have to work with string ids). So I've created the following class that is able to create a java class code (a java bean) with the properties expressed in a .properties file:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public class Properties2JavaBean {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  private Properties props;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public  String propertiesToBean(String className, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      String packageName) throws IOException {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    String attrDef = "\tString ", methodsDef="", &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    constructorSignature="\tpublic "+className+"(", constructorBody="{";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Iterator&amp;lt;object&gt; it = props.keySet().iterator();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    while (it.hasNext()) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      String k = (String) it.next();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      attrDef+=k;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      constructorSignature+="String "+k;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      constructorBody+="\n\t\tthis."+k+"="+k+";";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      if(it.hasNext()){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        attrDef+=", ";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        constructorSignature+=", ";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      methodsDef+="\n\n"+buildGetter(k)+"\n"+buildSetter(k);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    constructorSignature+=")";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    constructorBody+="\n\t}";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return "package "+packageName+";\n" +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    "/** this class was autogenerated from a .properties file"+&lt;br /&gt;   " by Properties2JavaBean */\n"+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    "public class "+className+"{\n" +&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    ""+attrDef+";\n"+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    constructorSignature+constructorBody+"\n"+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    methodsDef+"\n" +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    "\n\n\tpublic static "+className+ " newInstante(){ " +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    "\n\t\t"+propertiesToBeanConstructor(className, "inst")+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    ";\n\t\treturn inst;" +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    "\n\t}\n" +&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    "}";    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public String propertiesToBeanConstructor(String className, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      String instanceName) throws IOException{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    String s = className+" "+instanceName+" = new "+className+"(";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Iterator&amp;lt;object&gt; it = props.keySet().iterator();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    while (it.hasNext()) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      s+="\""+props.get(it.next())+"\"";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      if(it.hasNext())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        s+=", ";      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return s+");";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public void load(String s) throws IOException {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    load(stringToStream(s));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public void load(InputStream s) throws IOException {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    props = new Properties();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    props.load(s);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  String buildGetter(String propName) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return "\tpublic String get"+changeFirstLetterMayus(propName, true)+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      "(){\n\t\treturn this."+propName+";\n\t}";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  String buildSetter(String propName) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return "\tpublic void set"+changeFirstLetterMayus(propName, true)+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      "(String attr){\n\t\tthis."+propName+" = attr;\n\t}";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public static String changeFirstLetterMayus(String strInput, boolean mayus) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    if(mayus)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      return strInput.substring(0,1).toUpperCase()+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      strInput.substring(1,strInput.length());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      return strInput.substring(0,1).toLowerCase()+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      strInput.substring(1,strInput.length());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  private static InputStream stringToStream(String s) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return new ByteArrayInputStream(s.getBytes());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, for example, if I execute this conversor for the .properties example listed above, the following java bean class code is created:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;package org.sgx.claroscuro;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/** this class was autogenerated from a .properties file by Properties2JavaBean */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public class ConfigBean{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  String serverUrl, password, username;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public ConfigBean(String serverUrl, String password, String username){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    this.serverUrl=serverUrl;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    this.password=password;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    this.username=username;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public String getServerUrl(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return this.serverUrl;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public void setServerUrl(String attr){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    this.serverUrl = attr;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public String getPassword(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return this.password;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public void setPassword(String attr){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    this.password = attr;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public String getUsername(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return this.username;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public void setUsername(String attr){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    this.username = attr;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  public static ConfigBean newInstante(){ &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    ConfigBean inst = new ConfigBean(&lt;br /&gt;      "http://192.168.1.111", "xyz", "fulano");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return inst;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Nice, eh? As you can see, in the static &lt;span style="font-family:courier new;"&gt;newInstance()&lt;/span&gt; generated method this javabean is instantiated with the exacly the same information stored in the source .properties file.&lt;br /&gt;&lt;br /&gt;So, if you are dealing with .properties files for your configuration stuff, and you are making javabeans manually, this class can be usefull... Use it as you wish.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-6752544544006518311?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/6752544544006518311/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=6752544544006518311' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/6752544544006518311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/6752544544006518311'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2009/04/generating-java-bean-from-properties.html' title=''/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-7631538011967708743</id><published>2009-04-20T13:58:00.000-07:00</published><updated>2009-04-20T14:10:48.816-07:00</updated><title type='text'>json parser in visual basic 6</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;json parser in visual basic 6&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Recently, in work, I encountered with the following situation. A visual basic 6 desktop program need to comunicate with our main web application via web services. This webservices are json based. Until recently, there were no json librery / parser for visual basic 6. Today I found the only (seems) json library for visual basic.&lt;br /&gt;&lt;br /&gt;My knowledge of vb6 is short and I don't like it (or eny other ms devel tools). But it seems that you can embed a javascript aprser in your vb6 programs using "MSScriptControl.ScriptControl.1" object. So the json parser is there! With this little class:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;'a very little json library in vb using MSScriptControl.ScriptControl.1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'@author: sgurin.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Dim ScriptControl&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Dim initialized As Boolean&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Public Sub init_class()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Set ScriptControl = CreateObject("MSScriptControl.ScriptControl.1")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    ScriptControl.Language = "JavaScript"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    initialized = True&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Private Function evalCode(json As String) As String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    json = Replace(json, """", "\""")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    evalCode = "eval("" " &amp;amp; json &amp;amp; " "") "&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Public Function getProperty(jsonObject As String, prop As String) As String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  Dim ret As String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  Dim jsCode As String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  If Not initialized Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    init_class&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  End If&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  jsCode = "var obj = " &amp;amp; jsonObject 'evalCode(jsonObject)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  ScriptControl.ExecuteStatement (jsCode)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;getProperty =&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; ScriptControl.Eval("obj[""" &amp;amp; prop &amp;amp; """]")&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'for example getSimpleArrayItem("[{foo:1}, {foo:2}]", 0, "foo") == 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Public Function getSimpleArrayItem(jsonArray As String, index As Integer, prop As String) As String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  Dim jsCode As String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  If Not initialized Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    init_class&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  End If&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  jsCode = "var arr = " &amp;amp; jsonArray&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  ScriptControl.ExecuteStatement (jsCode)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  getSimpleArrayItem = ScriptControl.Eval("arr[" &amp;amp; index &amp;amp; "][""" &amp;amp; prop &amp;amp; """]")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Public Function getArrayLenght(jsonArray As String) As Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  Dim jsCode As String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  If Not initialized Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    init_class&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  End If&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  jsCode = "var arr = " &amp;amp; jsonArray&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  ScriptControl.ExecuteStatement (jsCode)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  getArrayLenght = ScriptControl.Eval("function   js_arrayLength(a){if(a==null||a.length==null||a.length==undefined){return 0}else     return a.length;}js_arrayLength(arr)")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;End Function&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;using this class one can parse a json string  with for example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Dim parser As New jsonParser&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Dim s as String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;s="{age:18}"    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;msgbox "age: " &amp;amp; parser.getProperty(s, "age")&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;of another example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Dim parser As New jsonParser&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Dim size As Integer, i As Integer, s As String, json as String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;json="[{age:18},{age:22}]" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;s=" ages: "&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;size = parser.getArrayLenght(resp)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;For i = 0 To size - 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    s = s &amp;amp; parser.getSimpleArrayItem(resp, i, "age") &amp;amp; ", "&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Next i&lt;br /&gt;&lt;br /&gt;Well, I hope somebody found this useful.  Please feel free to use this code as a fundation for a real json parser in visual basic 6. We need more !&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-7631538011967708743?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/7631538011967708743/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=7631538011967708743' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/7631538011967708743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/7631538011967708743'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2009/04/json-parser-in-visual-basic-6.html' title='json parser in visual basic 6'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-4421689855754215570</id><published>2009-03-31T09:24:00.000-07:00</published><updated>2009-04-14T08:07:46.759-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web application development'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='debug web applications in eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>Developing and debugging web applications in eclipse and tomcat</title><content type='html'>&lt;div&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Point tomcat to our web applications sources and debug them in eclipse&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Ok this is my situation. I like to program my java web app applications inside some ide like eclipse or netbeans and test them in tomcat. The idea is that tomcat take its resources directly from the eclipse workspace so just saving a file (like a jsp, .java, etc) will instantly apply the changes. Also we will be able to debug our web application java code.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Personally, I like to have my tomcat clean and under control, so I am not a fan of "web development tools" that came with these IDEs.&lt;br /&gt;&lt;br /&gt;So, the &lt;strong&gt;main idea&lt;/strong&gt; is for one side, having one project in the IDE with the entire web application resources (java, jsp, xml) and for the other side we will work with a tomcat which have defined a web application that points directly to the eclipse project resources. When we finnish, we will be able to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Have all our web application in one eclipse project.&lt;/li&gt;&lt;li&gt;Simply saving modified .java or .jsp resources will impact inmediately the changes in a running application.&lt;/li&gt;&lt;li&gt;Debug java code inside eclipse while the web application is running, both in .java and .jsp files.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;I will explain how to configure the web applications project inside the eclipse ide.&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_HR_FUhhrdJg/SdJHXPE0o6I/AAAAAAAAAGI/bKuFseub_2s/s1600-h/eclipseProj1.png"&gt;&lt;strong&gt;&lt;img id="BLOGGER_PHOTO_ID_5319392574387299234" style="margin: 0px 10px 10px 0px; float: left; width: 153px; height: 190px;" alt="" src="http://1.bp.blogspot.com/_HR_FUhhrdJg/SdJHXPE0o6I/AAAAAAAAAGI/bKuFseub_2s/s320/eclipseProj1.png" border="0" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;1) Create an eclipse java project.&lt;/strong&gt; I suppose you will have one or more java source folders with your application logic, persistence classes, etc.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2) Define a directory for your webapp.&lt;/strong&gt; Inside the created eclipse project define a directory that will contain exactly the files needed by your webapp application (the files that will be stored in $TOMCAT/webapp/$YOUR_WEBAPP_NAME). This means that your .jsps, WEB-INF/web.xml, WEB-INF/classes, META-INF/ will be here. Later, we will point tomcat to this directory so it will read the resources stored in this.&lt;br /&gt;&lt;/div&gt;&lt;p&gt;In my little application I named it /html/ and need to create /html/WEB-INF/web.xml, /html/classes.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3) Output .class files to your webapp dir. &lt;/strong&gt;We must tell eclipse to put all .class generated files to /html/WEB-INF/classes. For this you have to, in each of your source folders, right click the source folder -&gt; Build bath -&gt; Configure output folder, choose "Specific output folder..." and enter html/WEB-INF/classes.&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;strong&gt;4) Point tomcat to the project resources.&lt;/strong&gt; All we need now is to create a tomcat web application that points to our $ECLIPSE_PROJECT/html directory. The best way I found in Tomcat (5.x and 6.x) for doing this is creating the file $TOMCAT/conf/$ENGINENAME/$HOSTNAME/$YOUR_WEBAPP_NAME.xml with the following content:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;context path="" crosscontext="true"&gt;&lt;/context&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-family:courier new;"&gt;docBase="$ECLIPSE_PROJECT/html"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;/span&gt;&lt;div&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;in my example I had to create the file &lt;span style="font-size:85%;"&gt;C:\apache-tomcat-5.5.27\conf\Catalina\localhost\fileIndexer.xml&lt;/span&gt;&lt;br /&gt;with the following content:&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;/div&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;context path="" crosscontext="true"&gt;&lt;/context&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;docBase="C:\dev\workspace\fileIndexer\html"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;If your application needs it, more information can be added to this context file.&lt;/span&gt;&lt;div&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;div  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;5) Libraries.&lt;/strong&gt; You will have to put all yout java libraries (.jar) in /html/WEB-INF/lib directory for making them available to the tomcat web app.&lt;/span&gt;&lt;/div&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;div  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;6) java compiler. &lt;/span&gt;We rest only one thing to do and is to be sure that tomcat and eclipse are using the same jre, and that eclipse is generating the propert version .class files. Tomcat uses the jre defined by the environment variable JAVA_HOME and prints to the console which jre is using like:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Using JRE_HOME:        C:\Java\jdk1.5.0_15&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So one thing we can do is, in eclipse Window-&gt;preferences-&gt;java-&gt;Installed JREs make sure to select the same jre tomcat's using and in Window-&gt;preferences-&gt;java-&gt;Compiler choose a java compliance level supported by that jre.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7) debuggin java in eclipse. &lt;/span&gt;Basically we will configure eclipse so tomcat is launched as a eclipse application.  In eclipse go to : Run-&gt;"Debug configurations..."  (or "Open debug dialog..." in 3.3 and previous eclipse versions). There create a new java application launcher, name it appropiately, and in the Main tab select your eclipse project and specify  "org.apache.catalina.startup.Bootstrap" as Main class:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HR_FUhhrdJg/SdJk3elRsbI/AAAAAAAAAGQ/fqgfo4OdHA8/s1600-h/eclipsedebug1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 232px;" src="http://3.bp.blogspot.com/_HR_FUhhrdJg/SdJk3elRsbI/AAAAAAAAAGQ/fqgfo4OdHA8/s320/eclipsedebug1.png" alt="" id="BLOGGER_PHOTO_ID_5319425014142972338" border="0" /&gt;&lt;/a&gt;Now, in "Arguments" write "start" in Program arguments and something like the following (change it according to your installation):&lt;br /&gt;&lt;br /&gt;-Dcatalina.home="C:\apache-tomcat-5.5.27" -Djava.endorsed.dirs="C:\apache-tomcat-5.5.27\common\endorsed" -Dcatalina.base="C:\apache-tomcat-5.5.27"&lt;br /&gt;-Djava.io.tmpdir="C:\apache-tomcat-5.5.27"&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HR_FUhhrdJg/SdJoXCcWo5I/AAAAAAAAAGY/2tLNAcOxMUQ/s1600-h/eclipsedebug2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 290px;" src="http://3.bp.blogspot.com/_HR_FUhhrdJg/SdJoXCcWo5I/AAAAAAAAAGY/2tLNAcOxMUQ/s320/eclipsedebug2.png" alt="" id="BLOGGER_PHOTO_ID_5319428854880052114" border="0" /&gt;&lt;/a&gt;Now, "add the external Jar" $TOMCAT/bin/bootstrap.jar in User entries, like in:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HR_FUhhrdJg/SdJq-0e9dhI/AAAAAAAAAGg/PXdvpXuSxTo/s1600-h/eclipsedebug3.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 290px;" src="http://1.bp.blogspot.com/_HR_FUhhrdJg/SdJq-0e9dhI/AAAAAAAAAGg/PXdvpXuSxTo/s320/eclipsedebug3.PNG" alt="" id="BLOGGER_PHOTO_ID_5319431737350911506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and last, in "Source" tab add your java project. Click in "Apply" to save and click "debug" for launching tomcat in debug mode.&lt;br /&gt;&lt;br /&gt;Breakpoints in your .java files, or even in you .jsp's java scriptlets will pause the web user requests and open the debug perspective. Try for example, adding a breakpoint in some java code of one of yours jsps, "debug as" your tomcat using the created eclipse java app launch configuration, point the browser to the later jsp and eclipse must pause the thread in debug perspective:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HR_FUhhrdJg/SdJ9qAQ9KvI/AAAAAAAAAGo/GGdDxihXfp0/s1600-h/eclipsedebug4.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 192px;" src="http://2.bp.blogspot.com/_HR_FUhhrdJg/SdJ9qAQ9KvI/AAAAAAAAAGo/GGdDxihXfp0/s320/eclipsedebug4.PNG" alt="" id="BLOGGER_PHOTO_ID_5319452270457072370" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-4421689855754215570?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/4421689855754215570/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=4421689855754215570' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/4421689855754215570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/4421689855754215570'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2009/03/point-tomcat-to-our-web-applications.html' title='Developing and debugging web applications in eclipse and tomcat'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HR_FUhhrdJg/SdJHXPE0o6I/AAAAAAAAAGI/bKuFseub_2s/s72-c/eclipseProj1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-5003758658175691865</id><published>2009-02-05T10:21:00.000-08:00</published><updated>2009-02-05T10:23:13.102-08:00</updated><title type='text'>a personal problem with struts...</title><content type='html'>I do almost all my work in a j2ee big portal application. Sometimes my work consist in developing portlets using among other things, struts, jsp, etc. Here is something about struts that i'm always unsure of:&lt;br /&gt;&lt;br /&gt;in a struts action file, if you invoque&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    res.sendRedirect(url);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;this will be like if the user navigates to that url, first execute the correspondent struts action, and the show the user the related page&lt;br /&gt;&lt;br /&gt;another different thing is doing a&lt;br /&gt;&lt;br /&gt;        setForward(req, page_name)&lt;br /&gt;&lt;br /&gt;this will inmediately show the user the indicated jsp without invokling the correspondent action&lt;br /&gt;   &lt;br /&gt;This note is only for me, i always get confused about which one of these two use ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-5003758658175691865?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/5003758658175691865/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=5003758658175691865' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/5003758658175691865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/5003758658175691865'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2009/02/personal-problem-with-struts.html' title='a personal problem with struts...'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-894426563989440282</id><published>2008-12-09T15:13:00.000-08:00</published><updated>2009-03-31T13:21:25.403-07:00</updated><title type='text'>eclipse 3.4 (ganymede) with visual editor and java2script</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;font-family:times new roman;" &gt;Visual editor&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, I'm a very big fan of eclipse visual editor. It is the best free visual editor with full swt and swing support I've found in eclipse. Unfortunately, it is not seriously developed since eclipse 3.2. However, days pass, and I see no other valid alternative. So the next describes how you can install visual editor in eclipse 3.4 (last eclipse release while this was written).&lt;br /&gt;&lt;br /&gt;step 1) goto http://www.eclipse.org/downloads/, download and install ganymede J2EE distribution (i.e: "Eclipse IDE for Java EE Developers (163 MB)", http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR1/eclipse-jee-ganymede-SR1-win32.zip).&lt;br /&gt;&lt;br /&gt;Note: it is important to use this eclipse distribution beacause it already have visual editor plugin dependencies. If you use other distribution (like classic) you must install also required visual editor plugin dependencies.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;step 2) guys from http://www.ehecht.com/eclipse_ve/ve.html, have made little patches to visual editor sources for supporting eclipse 3.4. this worked for me: http://www.ehecht.com/eclipse_ve/ve_eclipse_34M7_win200805121900.zip. Download it and unzip it in eclipse folder. (as any eclipse plugin, the idea is that you overwrite eclipse plugins/ and features/ directory)&lt;br /&gt;&lt;br /&gt;step 3) start eclipse with "-clean" parameter&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;java2script&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'm doing serious investigations with java2script eclipse plugin. It is very exiting since java2script let you export your java swt applications to full compatible html and javascript for tunning them in the browser. i.e: Now you can release THE SAME APPLICATION both for java-desktop and for the browser. (I will talk about java2script in another post).&lt;br /&gt;&lt;br /&gt;In order to install java2script in "our eclipse", first download the java2script for eclipse 3.4 package from http://j2s.sourceforge.net/ (http://downloads.sourceforge.net/j2s/j2s-2.0.0-20081203-eclipse-3.4.zip) and install it as we did with visual editor plugin.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:times new roman;"&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;With the eclipse we have built, you can make your GUis with visual editor (in swt) and export them as normal java swt applications and as html web pages. Some examples of swt web guis are: TODO&lt;br /&gt;&lt;br /&gt;The next is an screenshot of java2script and visual editor in action. As you can see, i'm developing a sample SWT composite in eclipse, and in firefox i'm test it in the html and javascript code generated by java2script.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HR_FUhhrdJg/ST8JBt4BwsI/AAAAAAAAADo/3pkCUFWa7jg/s1600-h/java2script-in-action.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 194px;" src="http://1.bp.blogspot.com/_HR_FUhhrdJg/ST8JBt4BwsI/AAAAAAAAADo/3pkCUFWa7jg/s320/java2script-in-action.PNG" alt="" id="BLOGGER_PHOTO_ID_5277947213400621762" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-894426563989440282?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/894426563989440282/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=894426563989440282' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/894426563989440282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/894426563989440282'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2008/12/eclipse-34-gamynede-with-visual-editor.html' title='eclipse 3.4 (ganymede) with visual editor and java2script'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HR_FUhhrdJg/ST8JBt4BwsI/AAAAAAAAADo/3pkCUFWa7jg/s72-c/java2script-in-action.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-207601953722387634</id><published>2008-04-29T12:38:00.000-07:00</published><updated>2008-04-29T13:07:14.210-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jsp expression language'/><category scheme='http://www.blogger.com/atom/ns#' term='EL variable'/><category scheme='http://www.blogger.com/atom/ns#' term='scriptlet'/><title type='text'>jsp expression language variables in jsp scriptlets</title><content type='html'>Well. i'm starting to work with java server pages expression language (EL). I don't understand why is recommended to use EL instead of java scriptlets in jsps, but i'm using it anyway.&lt;br /&gt;&lt;br /&gt;Yesterday I needed to use a value stored in an EL variable. (i.e: ${elVar}) in a java scriptlet (i.e: &lt;%...%&gt;).  Well, i was all the day looking how to do this. Well the solution (in my case):&lt;br /&gt;&lt;br /&gt;&lt;% /* java scriptlet accessing the EL variable ${elVar} */&lt;br /&gt;    String elVar = pageContext.findAttribute("elVar");&lt;br /&gt;%&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;hope this saves some programmer time&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-207601953722387634?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/207601953722387634/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=207601953722387634' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/207601953722387634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/207601953722387634'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2008/04/jsp-expression-language-variables-in.html' title='jsp expression language variables in jsp scriptlets'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5603257583125350954.post-8387283145080434877</id><published>2006-12-18T03:36:00.000-08:00</published><updated>2009-05-20T06:14:01.294-07:00</updated><title type='text'>Cancerberonia</title><content type='html'>Hoy doy comienzo a este blog. Mi nombre es Sebastián Gurin, soy estudiante de ingeniería de computación en la Facultad de Ingeniería de la República Oriental del Uruguay. También trabajo como desarrollador principalmente en el ámbito de aplicaciones web, por lo que probablemente, el objetivo de Cancerberonia sea documentar mis prácticas y "nuevos descubrimientos" sobre informática supongo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5603257583125350954-8387283145080434877?l=cancerberonia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cancerberonia.blogspot.com/feeds/8387283145080434877/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5603257583125350954&amp;postID=8387283145080434877' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/8387283145080434877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5603257583125350954/posts/default/8387283145080434877'/><link rel='alternate' type='text/html' href='http://cancerberonia.blogspot.com/2006/12/cancerberonia.html' title='Cancerberonia'/><author><name>Cancerbero</name><uri>http://www.blogger.com/profile/15687265872787922810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
