<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5794802768211098530</id><updated>2025-11-12T17:26:11.044+01:00</updated><category term="Java"/><category term="Opinion"/><category term="Code"/><category term="GWT"/><category term="iphone"/><category term="HowTo"/><category term="programming language"/><category term="Comment"/><category term="OSX"/><category term="SSL"/><category term="Web"/><category term="tools"/><category term="7zip"/><category term="7zipjbind"/><category term="Apple"/><category term="Customer Satisfaction"/><category term="Dell"/><category term="GitHub"/><category term="HTML"/><category term="JUnit"/><category term="JavaScript"/><category term="Microsoft"/><category term="Movistar"/><category term="NetBeans"/><category term="OpenSource"/><category term="Software Patents"/><category term="StackOverflow"/><category term="Support"/><category term="Swing"/><category term="SwingX"/><category term="Windows"/><category term="blogging"/><category term="hobby"/><category term="iPad"/><category term="performance"/><category term="project"/><category term="zip"/><title type='text'>Dev Experience</title><subtitle type='html'>I know, another blog about programming. But my intention with this one is to show a different point of view.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-2872474154629962287</id><published>2012-04-08T21:44:00.000+02:00</published><updated>2012-04-08T21:44:00.625+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GitHub"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenSource"/><title type='text'>GWT-Eureka Available</title><content type='html'>Both in this blog and in &lt;a href=&quot;http://stackoverflow.com/&quot;&gt;stackoverflow&lt;/a&gt; I&#39;ve been writing about different widgets and improvements to already existing GWT widgets.&lt;br /&gt;
&lt;br /&gt;
Due to popular demand (well at least some people asked for it) I decided to finally put all this code publicly available in a new project: GWT-Eureka&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Website&lt;/b&gt;: &lt;a href=&quot;https://github.com/ctasada/GWT-Eureka&quot;&gt;GWT-Eureka&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The code is available under GPLv3 license and you can simply use it. You&#39;re also welcome to fork the git repository or, even better, collaborate with your own widgets and improvements.&lt;br /&gt;
&lt;br /&gt;
Here you have an screenshot of the first widgets:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXogZxRvIOmZJ1OCZI9-A7V_Ubyk1U50DtyAatg7iRiljEG2BMR83JRFJoll3-kVPkpDiQmlDSvCCSGFnt9u_ekMqwBy5-kD0QWaqTNW5BU0eu-t2n8uLvc7ZG1gtmE9D2X-t8c1rdfik/s1600/GWT-Eureka.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;190&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXogZxRvIOmZJ1OCZI9-A7V_Ubyk1U50DtyAatg7iRiljEG2BMR83JRFJoll3-kVPkpDiQmlDSvCCSGFnt9u_ekMqwBy5-kD0QWaqTNW5BU0eu-t2n8uLvc7ZG1gtmE9D2X-t8c1rdfik/s320/GWT-Eureka.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
So far the available widgets are:&lt;br /&gt;
&lt;h4&gt;

TimePicker&lt;/h4&gt;
An input box for time. It supports both am/pm and 24h formats.&lt;br /&gt;
&lt;br /&gt;
There&#39;s also TimePickerSmall widget, that&#39;s a simple extension of the TimePicker, but with a different CSS style applied for those cases where you need an smaller element.&lt;br /&gt;
&lt;h4&gt;

iOSButton&lt;/h4&gt;
A basic button with support for badges. You can see more details here: &lt;a href=&quot;http://ctasada.blogspot.com.es/2010/08/gwt-iphone-like-buttons.html&quot;&gt;iPhone like Buttons&lt;/a&gt;&lt;br /&gt;
&lt;h4&gt;

ExtendedDatePicker&lt;/h4&gt;
Is a modified version of &lt;a href=&quot;http://google-web-toolkit.googlecode.com/svn/javadoc/2.4/com/google/gwt/user/datepicker/client/DatePicker.html&quot;&gt;GWT DatePicker&lt;/a&gt; with some new features:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Support to configure the first day of the week, independently of the defined locale&lt;/li&gt;
&lt;li&gt;Support for minimum date. Any date older will be disabled&lt;/li&gt;
&lt;li&gt;Support for maximum date. Any date newer will be disabled&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
You can see it in action here:&amp;nbsp;&lt;a href=&quot;http://gwt-eureka.appspot.com/&quot;&gt;http://gwt-eureka.appspot.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
That&#39;s everything right now. Looking forward for your feedback and comments.&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/2872474154629962287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2012/04/gwt-eureka-available.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/2872474154629962287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/2872474154629962287'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2012/04/gwt-eureka-available.html' title='GWT-Eureka Available'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXogZxRvIOmZJ1OCZI9-A7V_Ubyk1U50DtyAatg7iRiljEG2BMR83JRFJoll3-kVPkpDiQmlDSvCCSGFnt9u_ekMqwBy5-kD0QWaqTNW5BU0eu-t2n8uLvc7ZG1gtmE9D2X-t8c1rdfik/s72-c/GWT-Eureka.png" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-8475748238596369707</id><published>2012-04-05T18:58:00.000+02:00</published><updated>2012-04-05T18:59:45.395+02:00</updated><title type='text'>I&#39;m back (at least I think so)</title><content type='html'>I cannot believe it&#39;s been more than a year since my last post. A lot of things have happened in the mean time.&lt;br /&gt;
&lt;br /&gt;
I&#39;ll do my best to start writing again some interesting stuff, in fact I&#39;ve already prepared some things to start with.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s give a second try to blogging.&lt;br /&gt;
&lt;br /&gt;
See all you here.</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/8475748238596369707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2012/04/im-back-at-least-i-think-so.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8475748238596369707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8475748238596369707'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2012/04/im-back-at-least-i-think-so.html' title='I&#39;m back (at least I think so)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-897769789129343854</id><published>2010-12-17T21:59:00.000+01:00</published><updated>2010-12-17T21:59:45.208+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><title type='text'>HttpClient: Connecting to an SSL Server</title><content type='html'>In the last days I&#39;ve been fighting trying to solve an issue connecting to an SSL Server with SSLv2 disabled. For some reason my client code was crashing trying to connect, but as soon as SSLv2 was enabled everything worked fine again.&lt;br /&gt;
&lt;br /&gt;
The problem was that even when my server was not accepting SSLv2 connections, my client code was trying to do a handshake validation using the SSLv2 protocol. This was causing the problem.&lt;br /&gt;
&lt;br /&gt;
Since it took me so much time to find the problem, I though would be nice to share here what did I discover.&lt;br /&gt;
&lt;br /&gt;
The first step is to create the code to properly connect to an SSL server. You can find how to do it with Self-Signed certificates in my&amp;nbsp;previous post &quot;&lt;a href=&quot;http://ctasada.blogspot.com/2010/11/httpclient-use-self-signed-certificates.html&quot;&gt;HttpClient: Use Self-Signed Certificates&lt;/a&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
Ok, if you followed it without problems now we&#39;re going to attack the way our code validates the different protocols.&lt;br /&gt;
&lt;br /&gt;
With the debug enabled, you&#39;ll see the whole SSL handshake process.&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;System.setProperty(&quot;javax.net.debug&quot;, &quot;all&quot;);&lt;/pre&gt;In a normal scenario any of the SSL protocols should be accepted, but in some cases, as the one I found, the SSLv2 is disabled. That&#39;s because this protocol is considered insecure.&lt;br /&gt;
&lt;br /&gt;
The way of dealing with these scenarios is creating your own SocketFactory.&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;public class TLSSocketFactory extends SSLSocketFactory {

 private final javax.net.ssl.SSLSocketFactory socketfactory;
 
 public TLSSocketFactory(SSLContext sslContext) {
  super(sslContext);
  
  this.socketfactory = sslContext.getSocketFactory();
 }

    public Socket createSocket() throws IOException {
     SSLSocket socket = (SSLSocket) super.createSocket();
     
     socket.setEnabledProtocols(new String[] {&quot;SSLv3, TLSv1&quot;});
     
     return socket;
    }
    
    public Socket createSocket(
            final Socket socket,
            final String host,
            final int port,
            final boolean autoClose
        ) throws IOException, UnknownHostException {
     
        SSLSocket sslSocket = (SSLSocket) this.socketfactory.createSocket(
                socket,
                host,
                port,
                autoClose
          );
     
     sslSocket.setEnabledProtocols(new String[] {&quot;SSLv3&quot;, &quot;TLSv1&quot;});
     
     getHostnameVerifier().verify(host, sslSocket);
     
     return sslSocket;
    }
}&lt;/pre&gt;As you can see the code is quite simple. It&#39;s simply wrapping the SSLSocketFactory. Where is the trick? The best way to control with protocols can be used for the handshake is configuring them directly in the socket object. So here we&#39;re simply overloading the createSocket methods, but inserting a minor tweak&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;sslSocket.setEnabledProtocols(new String[] {&quot;SSLv3&quot;, &quot;TLSv1&quot;});&lt;/pre&gt;If for some reason you only want to allow connections using TLS, then remove the SSLv3 protocol from the list.&lt;br /&gt;
&lt;br /&gt;
And that&#39;s all. As you can see the code is quite simple.&lt;br /&gt;
&lt;br /&gt;
See you soon.</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/897769789129343854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/12/httpclient-connecting-to-ssl-server.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/897769789129343854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/897769789129343854'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/12/httpclient-connecting-to-ssl-server.html' title='HttpClient: Connecting to an SSL Server'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-7138283429407002464</id><published>2010-11-16T23:04:00.000+01:00</published><updated>2010-11-16T23:04:03.875+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><title type='text'>HttpClient: Use Self-Signed Certificates</title><content type='html'>Lately I&#39;ve been implementing SSL support between a Java Server and another production server. In my development environment I needed to use self-signed certificates and be able to use them with Jakarta HttpClient 4.x.&lt;br /&gt;
&lt;br /&gt;
Looking through internet I found quite a lot information about how to add SSL support to HttpClient 3.x but not too much about &lt;a href=&quot;http://hc.apache.org/httpcomponents-client-ga/index.html&quot;&gt;HttpClient 4.x&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Lets start with the code&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;private static DefaultHttpClient createHttpClient(int port) {
  try {
   java.lang.System.setProperty(
     &quot;sun.security.ssl.allowUnsafeRenegotiation&quot;, &quot;true&quot;);

   // First create a trust manager that won&#39;t care.
   X509TrustManager trustManager = new X509TrustManager() {
    public void checkClientTrusted(X509Certificate[] chain,
      String authType) throws CertificateException {
     // Don&#39;t do anything.
    }

    public void checkServerTrusted(X509Certificate[] chain,
      String authType) throws CertificateException {
     // Don&#39;t do anything.
    }

    public X509Certificate[] getAcceptedIssuers() {
     // Don&#39;t do anything.
     return null;
    }
   };

   // Now put the trust manager into an SSLContext.
   // Supported: SSL, SSLv2, SSLv3, TLS, TLSv1, TLSv1.1
   SSLContext sslContext = SSLContext.getInstance(&quot;SSL&quot;);
   sslContext.init(null, new TrustManager[] { trustManager },
     new SecureRandom());

   // Use the above SSLContext to create your socket factory
   SSLSocketFactory sf = new SSLSocketFactory(sslContext);
   // Accept any hostname, so the self-signed certificates don&#39;t fail
   sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

   // Register our new socket factory with the typical SSL port and the
   // correct protocol name.
   Scheme httpsScheme = new Scheme(&quot;https&quot;, sf, port);
   SchemeRegistry schemeRegistry = new SchemeRegistry();
   schemeRegistry.register(httpsScheme);

   HttpParams params = new BasicHttpParams();
   ClientConnectionManager cm = new SingleClientConnManager(params,
     schemeRegistry);

   return new DefaultHttpClient(cm, params);
  } catch (Exception ex) {
   Log.error(&quot;ERROR Creating SSL Connection: &quot; + ex.getMessage());

   return null;
  }
 }
&lt;/pre&gt;&lt;br /&gt;
The code is quite documented, so I will not add too much. Anyway I want to clarify somethings.&lt;br /&gt;
&lt;br /&gt;
This code is not secure. This code accepts any certificate from any host, so don&#39;t use it in production code (or use it if you&#39;re really sure you known what you&#39;re doing)&lt;br /&gt;
&lt;br /&gt;
In case you&#39;ve any problem, there&#39;s a command that will really help you to debug the whole process.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;System.setProperty(&quot;javax.net.debug&quot;, &quot;all&quot;);
&lt;/pre&gt;&lt;br /&gt;
I really hope it will help you to save sometime.</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/7138283429407002464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/11/httpclient-use-self-signed-certificates.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/7138283429407002464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/7138283429407002464'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/11/httpclient-use-self-signed-certificates.html' title='HttpClient: Use Self-Signed Certificates'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-6751920694802047901</id><published>2010-08-30T15:31:00.000+02:00</published><updated>2010-08-30T15:31:01.257+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="iphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>GWT: iPhone Like Buttons</title><content type='html'>In a new entry dedicated to GWT we&#39;re going to learn how to create an iPhone like button.&lt;br /&gt;
&lt;br /&gt;
The objective is to create a rounded button with an image and support for badges.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s compare the iPhone button with the result of our tutorial&lt;br /&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfkVT4iKQlo_P966GrGrTFMyggWWYIU48dZOy0d4HpYdWyeceTYhcxROQ3n71iHdjgeZhGFmTNyU0MUGxpEr7uFYWFGaZQj4V1Na3NLBXtUdQ5bUveYhI0g93V3nV-8tirIue6eCFnjpc/s1600/mailBadge.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfkVT4iKQlo_P966GrGrTFMyggWWYIU48dZOy0d4HpYdWyeceTYhcxROQ3n71iHdjgeZhGFmTNyU0MUGxpEr7uFYWFGaZQj4V1Na3NLBXtUdQ5bUveYhI0g93V3nV-8tirIue6eCFnjpc/s320/mailBadge.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;iPhone Button&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDc5VNT3h6GOLarOIC3p-IFpTp46pk8-Dm1pM2yxWe9MXxADu7lk7DTSLRlQQGjEMtkaj21tqaw1l6VsOZHaBaGGHer4PBKzMf3KJEja49pwl_dfPwb8XmJvTkjwg6vzHCVpWExTP3jJ0/s1600/GWTiPhone.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; display: inline ! important; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDc5VNT3h6GOLarOIC3p-IFpTp46pk8-Dm1pM2yxWe9MXxADu7lk7DTSLRlQQGjEMtkaj21tqaw1l6VsOZHaBaGGHer4PBKzMf3KJEja49pwl_dfPwb8XmJvTkjwg6vzHCVpWExTP3jJ0/s320/GWTiPhone.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Our CoolButton&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Do you like it? Then stay with me for the How To.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;Create the new Widget&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
We&#39;ll start creating a new Composite Widget, we&#39;ll call it &lt;b&gt;CoolButton&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;public class CoolButton extends Composite implements HasClickHandlers,
  ClickHandler {

 private final AbsolutePanel wrapper;
 private final PushButton pushButton;
 private final Label badge;
 
 public CoolButton(Image buttonIcon) {
  
  wrapper = new AbsolutePanel();
  badge = new Label();
  badge.setStyleName(&quot;badges&quot;);
  badge.setVisible(false);

  pushButton = new PushButton(buttonIcon);
  pushButton.setStyleName(&quot;CoolButton&quot;);

  wrapper.add(pushButton, 0, 20);
  wrapper.add(badge, 40, 10);
  wrapper.setWidth(&quot;75px&quot;);
  wrapper.setHeight(&quot;80px&quot;);

  this.addClickHandler(this);

  initWidget(wrapper);
 }
 
 @Override
 public HandlerRegistration addClickHandler(ClickHandler handler) {
  return addDomHandler(handler, ClickEvent.getType());
 }

 @Override
 public void onClick(ClickEvent event) {
  //toggleButton.fireEvent(event);
 }

 public void setEnabled(boolean enabled) {
  pushButton.setEnabled(enabled);
 }

 public void setBadge(int total) {
  if (total &amp;gt; 0) {
   badge.setVisible(true);
   badge.setText(String.valueOf(total));
  } else {
   badge.setVisible(false);
  }
 }
}
&lt;/pre&gt;&lt;br /&gt;
We&#39;ll analyze this code:&lt;br /&gt;
&lt;br /&gt;
We&#39;re creating a Composite Widget, so basically we&#39;re creating a wrapper around already existing Widgets and adding some logic on top.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;private final AbsolutePanel wrapper;
 private final PushButton pushButton;
 private final Label badge;
&lt;/pre&gt;&lt;br /&gt;
For you Widget we&#39;re using an &lt;a href=&quot;http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/AbsolutePanel.html&quot;&gt;AbsolutePanel&lt;/a&gt;, a &lt;a href=&quot;http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/PushButton.html&quot;&gt;PushButton&lt;/a&gt; and a &lt;a href=&quot;http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/Label.html&quot;&gt;Label&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The PushButton is our main component. It&#39;s a real button and displays an image, so it&#39;s perfect for our needs. The Label will be used to show the badge. Finally, the AbsolutePanel will allow us to layout the components, overlapping them to create the desired effect.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;public CoolButton(Image buttonIcon) {
  
  wrapper = new AbsolutePanel();
  badge = new Label();
  badge.setStyleName(&quot;badges&quot;);
  badge.setVisible(false);

  pushButton = new PushButton(buttonIcon);
  pushButton.setStyleName(&quot;CoolButton&quot;);

  wrapper.add(pushButton, 0, 20);
  wrapper.add(badge, 40, 10);
  wrapper.setWidth(&quot;75px&quot;);
  wrapper.setHeight(&quot;80px&quot;);

  this.addClickHandler(this);

  initWidget(wrapper);
 }
&lt;/pre&gt;&lt;br /&gt;
In the constructor we create the badge label, and hide it by default. We&#39;ll show it later if needed. We create also the button with the specified image.&lt;br /&gt;
&lt;br /&gt;
The tricky part here is the use of AbsolutePanel. The AbsolutePanel doesn&#39;t resize automatically to show properly all its children, as other LayoutPanels, so we need to position everything manually and make sure that it will fit.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;wrapper.add(pushButton, 0, 20);&lt;/pre&gt;&lt;br /&gt;
We place the button in the coordinates 0,20 that leaves some vertical space on top of the button that will be needed to place the badge.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;wrapper.add(badge, 40, 10);&lt;/pre&gt;&lt;br /&gt;
The badge is placed in the coordinates 40,10 so vertically will overlap with the button, and horizontally will be close to the right side.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;wrapper.setWidth(&quot;75px&quot;);
wrapper.setHeight(&quot;80px&quot;);
&lt;/pre&gt;&lt;br /&gt;
Finally we make sure we&#39;ve enough space to show everything.&lt;br /&gt;
&lt;br /&gt;
All these coordinates and sizes are hardcoded, because they&#39;re relative to the image size.&lt;br /&gt;
&lt;br /&gt;
The rest of the code doesn&#39;t have too much mystery. Since it&#39;s a button we need to add the needed code to fire the ClickEvents and register a ClickHandler. Also we need a method to set the badge and properly show and hide it.&lt;br /&gt;
&lt;br /&gt;
With that we&#39;ve our widget done. Now we need to attack the styling, so take a look to the CSS.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: css&quot;&gt;.badges {
 text-align: center;
 display: inline-block;
 font-size: 16px;
 color: white;
 background: #ff3333;
 border: 2px solid white;
 padding: 0px 5px;
 -moz-border-radius: 15px;
 -webkit-border-radius: 15px;
 -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
}
&lt;/pre&gt;&lt;br /&gt;
The badges style is quite simple, but let&#39;s check the different elements:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;color: Defines de text color&lt;/li&gt;
&lt;li&gt;background: defines the color of the background&lt;/li&gt;
&lt;li&gt;border: defines the white border&lt;/li&gt;
&lt;li&gt;border-radius: defines de rounding border (for Firefox and Webkit)&lt;/li&gt;
&lt;li&gt;box-shadow: defines a tiny shadow for the badge (also for Firefox and Webkit)&lt;/li&gt;
&lt;/ul&gt;&lt;pre class=&quot;brush: css&quot;&gt;.CoolButton {
 padding-left: 2px;
 padding-top: 2px;
 cursor: pointer;
 border: 1px solid black;
 -moz-border-radius: 5px;
 -webkit-border-radius: 5px;
 -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
 background: #00b5e2;
}
&lt;/pre&gt;&lt;br /&gt;
The button style is again the same CSS elements.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note&lt;/b&gt;: That&#39;s not the case in our example, but GWT doesn&#39;t recognize properly some CSS styles, for those cases we need to wrap it in a &lt;i&gt;literal&lt;/i&gt; call&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:css&quot;&gt;background: -moz-linear-gradient(top, #e4e4e4, #cfcfcf);
background: literal(&quot;-webkit-gradient(linear, 0% 0%, 0% 100%, from(#e4e4e4), to(#cfcfcf))&quot;);
&lt;/pre&gt;&lt;br /&gt;
And that&#39;s it. You can download the code from the next link:&amp;nbsp;&lt;a href=&quot;https://docs.google.com/leaf?id=0ByqwJjG87utVZDdhNTkxMmYtNDEyMy00ZmZmLTgwZTAtMWEyNzdjOTVhMzRk&amp;amp;hl=en&quot;&gt;iPhoneDemo - CoolButton&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
See you soon.</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/6751920694802047901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/08/gwt-iphone-like-buttons.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/6751920694802047901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/6751920694802047901'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/08/gwt-iphone-like-buttons.html' title='GWT: iPhone Like Buttons'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfkVT4iKQlo_P966GrGrTFMyggWWYIU48dZOy0d4HpYdWyeceTYhcxROQ3n71iHdjgeZhGFmTNyU0MUGxpEr7uFYWFGaZQj4V1Na3NLBXtUdQ5bUveYhI0g93V3nV-8tirIue6eCFnjpc/s72-c/mailBadge.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-8738921807479746094</id><published>2010-08-16T22:54:00.001+02:00</published><updated>2010-08-17T19:32:41.954+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Web"/><title type='text'>GWT: Best 5 GWT Libraries</title><content type='html'>Continuing with the GWT series we&#39;re going to see some of the best GWT libraries.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;Ext GWT&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.sencha.com/products/gwt/&quot;&gt;Ext GWT&lt;/a&gt;, also known as GXT, is a complete widget library for GWT. It gives you Grid, Trees, Drag&amp;amp;Drop, Forms, Data Binding and much more.&lt;br /&gt;
&lt;br /&gt;
The beauty is that everything comes perfectly integrated and works perfectly with GWT. GXT can be compared with SmartGWT, but the main difference is that SmartGWT is a wrapper around a JavaScript library, but GXT is a pure GWT implementation.&lt;br /&gt;
&lt;br /&gt;
If the GWT widgets are not enough for you application, that should be your first option. GXT has a Commercial and Open Source license, so if your application is not Open Source, you&#39;ll need to pay.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;GWT-Mosaic&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/gwt-mosaic/&quot;&gt;GWT-Mosaic&lt;/a&gt; is a great expansion to the standard GWT library. Distributed with an Apache License, allows you to use it in any application.&lt;br /&gt;
&lt;br /&gt;
GWT-Mosaic provides enhanced Trees and Tables, compared to GWT. But probably the best feature is the layout implementation. If you&#39;re used to the Swing layouts, you&#39;ll feel at home. On top of that it also provides a great Form and DataBinding support.&lt;br /&gt;
&lt;br /&gt;
Probably the main complexity is mixing the Mosaic layouts with GWT components. But checking the demos and documentation helps to solve it. As a best practice tip you need to remember only that: don&#39;t insert a Mosaic layout inside a GWT layout.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;GWT-DND&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/gwt-dnd/&quot;&gt;GWT-DND&lt;/a&gt; is one of the basic components of other libraries, like GWT-Mosaic and GWT-Cal. Distributed with an Apache License only makes it better ;)&lt;br /&gt;
&lt;br /&gt;
GWT-DND provides all the needed support for all type of Drag&amp;amp;Drop operations, you can even expand them for your own needs.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;GWT-Log&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/gwt-log/&quot;&gt;GWT-Log&lt;/a&gt; is the best option nowadays to have client side logging capabilities. The lack of a real logging system is probably one of the big missing features of GWT, but GWT-Log solves it perfectly.&lt;br /&gt;
&lt;br /&gt;
It even provides multiple ways of see the logs, allowing to send the logs to the server, show them in a window or a console client side. As any log system is possible to configure the logging level.&lt;br /&gt;
&lt;br /&gt;
GWT 2.1 implements java.util.logging emulation that seems will be able to super-seed this library, but until it&#39;s released, GWT-Log will still be an irreplaceable library in my GWT projects.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;GWT-Cal&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/gwt-cal/&quot;&gt;GWT-Cal&lt;/a&gt; is probably my favorite GWT library. If provides a great looking a really flexible calendar component for GWT projects. If you need an iCal / Outlook / Google Calendar component, don&#39;t look more, that&#39;s what you need.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://gwt-cal.googlecode.com/svn/wiki/gwt-cal_Google_700x245.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;224&quot; src=&quot;http://gwt-cal.googlecode.com/svn/wiki/gwt-cal_Google_700x245.gif&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why do I like it? Well mainly because is the core part of the GWT application I&#39;m working with, but also &amp;nbsp;because both developers are really helpful and collaborative.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
As you can see all the proposed libraries are based in Apache License, except GXT and GWT-Cal. As I said at the beginning, if GXT covers your needs, don&#39;t make your life complex and use it.&lt;br /&gt;
&lt;br /&gt;
Before using any GWT library, check that&#39;s really a GWT library and not a wrapper around a JavaScript library. The main problem with this kind of solutions is that are hard to mix with pure GWT components and usually slower and harder to expand.&lt;br /&gt;
&lt;br /&gt;
As a last tip remember that any extra library that you add to your project will have 2 side effects: the compilation of your application will take longer and your application will need to load bigger files.&lt;br /&gt;
&lt;br /&gt;
See you soon.</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/8738921807479746094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/08/gwt-best-5-gwt-libraries.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8738921807479746094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8738921807479746094'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/08/gwt-best-5-gwt-libraries.html' title='GWT: Best 5 GWT Libraries'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-8889088696287608938</id><published>2010-08-13T14:15:00.000+02:00</published><updated>2010-08-13T14:15:15.931+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Movistar"/><title type='text'>La Odisea del iPhone 4</title><content type='html'>El pasado viernes 30 de Julio de 2010 recibí una amigable llamada de un comercial de Movistar ofreciéndome el iPhone 4. La verdad es que la oferta era muy tentadora, pero quería ver que me ofrecía Vodafone, por lo que quedé con el comercial que me llamaría el siguiente martes.&lt;br /&gt;
&lt;br /&gt;
Hablé con un comercial de Vodafone y me dijeron que la única opción era a través del programa de Puntos (me tocaba pagar más de 300 euros). Así que llame al departamento de bajas, donde me dijeron lo mismo. Les digo que tengo 2 líneas y que me llevaré las 2 a Movistar. Nada, que adiós....&lt;br /&gt;
&lt;br /&gt;
El martes 3 de Agosto me vuelve a llamar el comercial de Movistar y le digo que acepto la oferta. Me confirma que recibiré el iPhone4 en 1 semana y que la portabilidad de línea se realizará el viernes 13 de Agosto. El iPhone4 me sale por 69 euros y contrato la otra linea con un Nokia Navigator para mi mujer. Perfecto!!!!&lt;br /&gt;
&lt;br /&gt;
El miércoles 4 de Agosto recibo una nueva llamada, diciéndome que en estos momentos no hay disponibilidad de iPhone4 y que como cortesía me enviarán un iPhone3GS hasta que el modelo solicitado esté disponible, y que para compensar las molestias me descuentan 40 euros del iPhone (ahora sólo me costará 29 euros) Me dicen que no me preocupe y que se mantienen las fechas.&lt;br /&gt;
&lt;br /&gt;
Llegamos al jueves 12 de Agosto, ni rastro del terminal ni de las tarjetas. Llamo al 1004 y me confirman que durante el mismo jueves recibiré el paquete.&lt;br /&gt;
&lt;br /&gt;
Estamos a viernes 13 de Agosto y no hay rastro del terminal. La portabilidad se ha realizado y estoy sin línea. Vuelvo a llamar al 1004 y, sorpresa, resulta que el iPhone3 llega HOY al almacén. Sí, sí, el iPhone3, el de cortesía para que no me quedase sin línea. Y que no está previsto que yo lo reciba hasta la próxima semana.&lt;br /&gt;
&lt;br /&gt;
La única solución que me dan es solicitar un duplicado de la tarjeta y que me abonarán el coste en la próxima factura. Claro para eso necesito tener un terminal de Movistar.&lt;br /&gt;
&lt;br /&gt;
Mientras espero alguna solución estoy sin línea y la única solución es que me busque la vida.&lt;br /&gt;
&lt;br /&gt;
Movistar: Ya recuerdo porqué me marche hace 3 años. Apenas llevo unas horas con vosotros y ya me arrepiento :(&lt;br /&gt;
&lt;br /&gt;
Os mantendré informados.</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/8889088696287608938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/08/la-odisea-del-iphone-4.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8889088696287608938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8889088696287608938'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/08/la-odisea-del-iphone-4.html' title='La Odisea del iPhone 4'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-795885538434936216</id><published>2010-08-09T23:48:00.000+02:00</published><updated>2010-08-09T23:48:59.817+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apple"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="Opinion"/><category scheme="http://www.blogger.com/atom/ns#" term="OSX"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>PC vs Mac (from Microsoft Point of View)</title><content type='html'>Microsoft just opened a new page on their website &lt;a href=&quot;http://www.microsoft.com/windows/windows-7/compare/pc-vs-mac.aspx&quot;&gt;comparing PCs and Macs&lt;/a&gt; in an attempt to counter attack the &quot;&lt;a href=&quot;http://www.apple.com/why-mac/&quot;&gt;Get a Mac&lt;/a&gt;&quot; campaign.&lt;br /&gt;
&lt;br /&gt;
I&#39;m sorry to say that even when Microsoft as all the right to play to the same game as Apple, the reasons they are showing are, at least, weak:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;&lt;u&gt;Having Fun&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It&#39;s true that&#39;s not possible to play Blue-Rays in a Mac or connect it to an XBox. The first is due to an Apple&#39;s decision and the second is probably because either Microsoft or Apple are interested in this kind of connection.&lt;br /&gt;
&lt;br /&gt;
Regarding the problem of connecting a Mac to a TV, really I&#39;ve done it and it&#39;s not a big deal. Sure you need an special connector, but works fine.&lt;br /&gt;
&lt;br /&gt;
The lack of games in the OSX OS seems that&#39;s finally changing and shouldn&#39;t be an issue in the near future.&lt;br /&gt;
&lt;br /&gt;
In any case these could be reasons for a home user, but no company should be stopped due to these points.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;&lt;u&gt;Simplicity&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote&gt;The computer that&#39;s easiest to use is typically the one you already know how to use. Another nice one is Unlike Macs, many PCs running Windows 7 support Touch&lt;/blockquote&gt;&lt;div&gt;To me that&#39;s a really weak reason. In fact if you saw &lt;a href=&quot;http://ctasada.blogspot.com/2010/07/switching-experience-i-finally-moved-to.html&quot;&gt;my post&lt;/a&gt; from some days ago I would say that OSX is much more easier to use than Windows. &amp;nbsp;Apple is a reference regarding usability and OSX is a really easy system to use. Just think about how easy is to install something in OSX.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Also in OSX there&#39;s almost no need for antivirus or other maintenance programs. Try to do that in Windows and you&#39;ll see how works.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Affirmations as &quot;&lt;i&gt;the mouse works differently. And many of the shortcuts you&#39;re familiar with don&#39;t work the same way on a Mac&quot;&lt;/i&gt;&amp;nbsp;Sound really egocentric to me. Sure they are different, but I don&#39;t think that anyone would need more that 5 minutes to learn them.&lt;br /&gt;
&lt;br /&gt;
The last one is hilarious &lt;i&gt;&quot;Unlike Macs, many PCs running Windows 7 support Touch&quot;&lt;/i&gt;&amp;nbsp;Is Microsoft the only one that missed the &quot;Magic Mouse&quot; and &quot;Magic TrackPad&quot; devices, not to talk about the normal TrackPad in the MacBooks. We could also talk about the touch support in iPhone and iPad, but since are not using OSX (yet) we&#39;ll leave them aside.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;Working Hard&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;&lt;blockquote&gt;If most of the computers in your office or school run Windows you may find it harder to get things done with a Mac.&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;
Can we apply the same argument if most of the computers use OSX? I&#39;m using my MacBookPro in a network with Windows and Linux computers and I don&#39;t have any problem accessing to any kind of file. iWorks works perfectly well with Office documents (even OpenOffice work fine) and accessing the network drives is not a problem.&lt;br /&gt;
&lt;br /&gt;
Or maybe Microsoft means that Windows is really bad sharing files with different OS (sarcastic mode off).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;&lt;u&gt;Sharing&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;i&gt;Macs don&#39;t like share&lt;/i&gt;. I&#39;m sorry but I don&#39;t known what is Microsoft talking about. The Macs can share using NFS, Samba or even the beautiful &quot;BonJour&quot; system. That&#39;s an affirmation without any base or explanation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;Compatibility&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;&lt;blockquote&gt;Plain and simple, if you&#39;re a PC user, lots of your favorite stuff just might not work on a Mac. With PCs outselling Macs 10 to 1, the reality is that most computer software is developed to run on PCs&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;
Let&#39;s start with the most obvious point that&#39;s &quot;More doesn&#39;t mean better&quot; Also again the affirmation is quite egocentric. Almost all the most important programs have an OSX version or a substitute. And in most of the cases the OSX version is as good as the Windows version, or event better.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;Choice&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
&lt;blockquote&gt;PCs give you a lot more choice and capabilities for your money. You can get the PC you want, in the size and color you want, with the features you want. You just don&#39;t have as many options with a Mac.&lt;/blockquote&gt;&lt;br /&gt;
That&#39;s again quite obvious. When only 1 company is making Mac computers is not possible to have all the combinations that Windows have with all the hundreds of manufacturers of PCs. Again they are mixing quantity with quality.&lt;br /&gt;
&lt;br /&gt;
One of the main problems of Windows stability is that Windows needs to work with thousands of hardware combinations, and not all the drivers are as stable as expected. Meanwhile Apple keeps a low number of hardware combinations, making easier to keep the stability.&lt;br /&gt;
&lt;br /&gt;
As another point, I think is hard to find in the market more beautiful and well design computers than the Macs.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;&lt;u&gt;Conclusion&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
I known that seems that I&#39;m an anti-Microsoft guy. That&#39;s not the case, but I got pissed off with the weak excuses that Microsoft is showing to publicity their operating system. Most of the affirmations are simply false, and the others are quite subjective.&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/795885538434936216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/08/pc-vs-mac-from-microsoft-point-of-view.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/795885538434936216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/795885538434936216'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/08/pc-vs-mac-from-microsoft-point-of-view.html' title='PC vs Mac (from Microsoft Point of View)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-424998747960596924</id><published>2010-08-05T23:07:00.000+02:00</published><updated>2010-08-05T23:07:57.100+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>GWT: Extend The DatePicker/CalendarView</title><content type='html'>We&#39;re going to start this series of articles related with GWT with a tutorial about extending the DatePicker/CalendarView.&lt;br /&gt;
&lt;br /&gt;
With the DatePicker you can choose any date in a Calendar and browse through it. The DatePicker uses internally the CalendarView class to configure the way the Dates are showed.&lt;br /&gt;
&lt;br /&gt;
The nice thing about the DatePicker is that is really simple to use, but this simplicity comes with a high cost for Enterprise developments: It&#39;s really hard to extend, since is highly dependent of internal classes.&lt;br /&gt;
&lt;br /&gt;
One of the most requested features is the ability to limit the valid dates, basically configuring a minimum and a maximum date.&lt;br /&gt;
&lt;br /&gt;
To accomplish that we need to extend the DefaultCalendarView class.&lt;br /&gt;
&lt;br /&gt;
In you GWT Project create a new com.google.gwt.user.datepicker.client package in your /src directory&lt;br /&gt;
&lt;br /&gt;
Go to the GWT subversion repository and copy the &lt;a href=&quot;http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/user/datepicker/client/DefaultCalendarView.java&quot;&gt;DefaultCalendarView&lt;/a&gt; file to your code.&lt;br /&gt;
&lt;br /&gt;
Now we&#39;re going to start doing our changes:&lt;br /&gt;
&lt;br /&gt;
Create a new constructor adding support for the minimum and maximum dates and define the new variables&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;private Date minDate = null;
 private Date maxDate = null;

 /**
  * Constructor.
  */
 public DefaultCalendarView() {
 }

 /**
  * Constructor.
  * 
  * @param minDate
  *            Minimum allowed date.
  * @param maxDate
  *            Maximum allowed date.
  */
 public DefaultCalendarView(Date minDate, Date maxDate) {
  this.minDate = minDate;
  this.maxDate = maxDate;
 }
&lt;/pre&gt;&lt;br /&gt;
Ok that was easy, now we can define which are the minimum and maximum valid dates, but that&#39;s still doing nothing by itself&lt;br /&gt;
&lt;br /&gt;
The easiest way to accomplish our objective is to disable the non-valid dates in the calendar, so let&#39;s modify the ......&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;@Override
 public boolean isDateEnabled(Date d) {
  if (minDate != null &amp;amp;&amp;amp; maxDate != null) {
   if (d.after(minDate) &amp;amp;&amp;amp; d.before(maxDate)) {
    return true;
   } else {
    return false;
   }
  }
  return getCell(d).isEnabled();
 }
&lt;/pre&gt;&lt;br /&gt;
We are almost done. Now let&#39;s modify the update method of the&amp;nbsp;CellGrid subclass.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;public void update(Date current) {
    // * Another Tweak *//
    setEnabled(getDatePicker().isDateEnabled(current));
    getValue().setTime(current.getTime());
    String value = getModel().formatDayOfMonth(getValue());
    setText(value);
    dateStyle = cellStyle;
    if (isFiller()) {
     dateStyle += &quot; &quot; + css().dayIsFiller();
    } else {
     String extraStyle = getDatePicker().getStyleOfDate(current);
     if (extraStyle != null) {
      dateStyle += &quot; &quot; + extraStyle;
     }
    }
    // We want to certify that all date styles have &quot; &quot; before and
    // after
    // them for ease of adding to and replacing them.
    dateStyle += &quot; &quot;;
    updateStyle();
   }
&lt;/pre&gt;&lt;br /&gt;
Note that we only changed the first line of the method, so we are not enabling the cell by default anymore, but we&#39;re checking if should be enabled.&lt;br /&gt;
&lt;br /&gt;
The last missing part is that the DatePicker class needs also to be extended to use our new code:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;public class DatePickerEx extends DatePicker {

 public DatePickerEx(Date minimum, Date maximum) {
  super(new DefaultMonthSelector(),
    new DefaultCalendarView(minimum, maximum), new CalendarModel());
 }

 public DatePickerEx(MonthSelector monthSelector, CalendarView view,
   CalendarModel model) {
  super(monthSelector, view, model);
 }
}
&lt;/pre&gt;&lt;br /&gt;
For your convenience you can also &lt;a href=&quot;http://docs.google.com/uc?id=0ByqwJjG87utVMDQyMGEyOTMtZDU3MS00YjViLTgwZmUtYzMyMzFmNGU2MmM3&amp;amp;export=download&amp;amp;authkey=CMKNoIQM&amp;amp;hl=en&quot;&gt;download the code in this archive&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
We&#39;re done. Enjoy your new DatePicker.</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/424998747960596924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/08/gwt-extend-datepickercalendarview.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/424998747960596924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/424998747960596924'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/08/gwt-extend-datepickercalendarview.html' title='GWT: Extend The DatePicker/CalendarView'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-127035280839747335</id><published>2010-08-05T21:37:00.000+02:00</published><updated>2010-08-05T21:37:58.482+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Web"/><title type='text'>Introduction to GWT</title><content type='html'>&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;This is the Part 1 of what I expect will become a series of articles about my personal experiences when developing with GWT.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;Some months ago I started a project with GWT for my current employee. This was my first GWT project, so I needed to do some research and quite a lot of proof of concept, to make sure I could cover all the requested features.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;What’s and what’s not GWT&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;That’s what Google says about GWT in their &lt;/span&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;a href=&quot;http://code.google.com/webtoolkit/&quot;&gt;official page.&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;Google Web Toolkit (GWT) is a development toolkit for building and optimizing complex browser-based applications. GWT is used by many products at Google, including Google Wave and Google AdWords. It&#39;s open source, completely free, and used by thousands of developers around the world.&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;In this paragraph we have the first key about what’s GWT “is a development toolkit for building complex browser-based applications”. GWT is &lt;strong&gt;not&lt;/strong&gt; the toolkit to use in your homepage or a simple website. For those tasks it’s much better to use pure Javascript toolkits (like JQuery) or maybe some PHP backend.&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;GWT is useful when you want to create complex enterprise browser-based applications. But “what’s a complex enterprise browser-based application”?&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;Well, I imagine that really depends, but I would say that any browser-based application that requires support for multiple simultaneous users, access to some backend with complex rules and wants to use a rich user interface.&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;GWT only solves the rich user interface part, but is a perfect complement for a J2EE backend, allowing an easy integration and a rich experience.&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;How is different GWT from other web toolkits?&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;I would say that the most important difference is that when developing you only need to known Java, there’s no need to known anything about HTML or Javascript (even when it helps when you need to do &lt;em&gt;really&lt;/em&gt; complex features)&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;Ok, but JSP or IceFaces/RichFaces also allow to do that. Yes and no. JSP is the Java equivalent to PHP. That means that you need to known HTML and Javascript and inject the PHP in the middle. IceFaces/RichFaces are a really good alternative. In fact I almost choose IceFaces for my project, but the widgets and the flexibility of the components where not matching my expectations.&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;Why should I choose GWT?&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;For me GWT was the correct solution due to multiple factors:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;Google is putting quite some efforts in this toolkit and the community around it is really active&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;GWT can be easily customized using CSS and even with direct DOM interaction&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;There are some really interesting extensions for GWT&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;GWT-Cal: Covert one of my main requisites and the developers are really friendly and helpful&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;GWT-Mosaic: Perfectly complements some missing feature and widgets in GWT&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;GWT-Log: Nice and easy integrated logging system&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;GWT-DND: Wonderful Drag&amp;amp;Drop API&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;Is everything that good? Really?&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;Well, not really. When I started my project I used SmartGWT. At the beginning it was awesome, everything was really simple, tons of widgets and a lot of people giving good reviews.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;I was decided to use it, in fact I even started my project using SmartGWT, but not everything was &lt;em&gt;that&lt;/em&gt; perfect.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;When using SmartGWT I started finding problems, some were more annoyances than bugs, others required tons of extra work. My first disappointment came from the lack of help in the official forums. In fact I was even surprised by the hard reaction of some of the developers with some users questions. The next problem came when I tried to modify the theme. Was a complete nightmare, everything seemed like a problem and I found myself investing too much time in something that should be really simple.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;By then I knew enough to create my own components and libraries like GWT-Mosaic only made everything easier. So I took the way that I wanted to avoid using SmartGWT, but at the end was easier than expected. And now I could use simple CSS and PNGs to create my UI.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;Here I finish the first part of these tour through GWT. As you saw GWT is easy enough to use, but powerful enough to tweak it as you want. The ecosystem of libraries is rich enough, but keep always in mind what to you want to achieve.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;In the Part 2 I will show you how to create some nice effects and widgets in GWT.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 16.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 13.0px Helvetica; line-height: 16.0px; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;See you soon.&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/127035280839747335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/08/introduction-to-gwt.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/127035280839747335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/127035280839747335'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/08/introduction-to-gwt.html' title='Introduction to GWT'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-1934585451406308317</id><published>2010-07-28T21:50:00.000+02:00</published><updated>2010-07-28T21:50:43.203+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Opinion"/><category scheme="http://www.blogger.com/atom/ns#" term="OSX"/><title type='text'>Switching Experience (I finally moved to Mac)</title><content type='html'>&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;I finally did it, I´m finally a switcher.&amp;nbsp;Last month I bought my first Mac (a new MacBook Pro 17” i5) I have been playing with the idea of buying a Mac since&amp;nbsp;some time ago, but I never found a good excuse or reason. When last month my laptop start dying (a 4 years old Fujitsu) I decided it was the proper time to jump to OSX.&amp;nbsp;I was a Windows user for more than 10 years (I started with Windows 3.0), 5 years ago I started to use Linux seriously and 3 years ago was already my main working environment.&amp;nbsp;I must say that I´m a happy Linux user, but the idea of doing some iPhone/iPad application&amp;nbsp; was the final push to move to Mac.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;My first 5 minutes&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;I always though that all the buzz around the Apple products was exaggerated. As you may known, I got an &lt;/span&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;a href=&quot;http://ctasada.blogspot.com/2009/12/iphoneipod-as-it-tool.html&quot;&gt;iPod in Christmas&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; and I´m really happy about it, but I didn’t felt what was owning an Apple product until now.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;The box design was beautiful, there is a magic sensation when un-boxing the computer. I saw a nice box with the CDs and some simplified manual, but I took the shortcut. I simply put the MacBook at the table, I connected the power adapter and turned it on.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;My kids where playing around, without paying attention to Daddy (in fact there’s nothing weird if Dad is in his computer, right?). But at the moment the MacBook turned on the first time, the speakers started playing a nice music, the screen was filled with a &lt;/span&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;a href=&quot;http://www.youtube.com/watch#!v=8mogagcE538&quot;&gt;great welcome presentation&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; and both of them came to see what was that. My 2 years old kid directly sit down saying “Daddy, it’s cooool”.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;The whole OSX configuration took 5 minutes, asking from time to time for some information. Everything was really easy and straight forward, without any complex stuff. When it finished I had a completely working OS running.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;Ok, what do I do now?&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Perfect, it’s working, and now what? That was not my first time using an OSX, so probably for me was faster to start playing around that for a normal Windows user. Anyway I really felt at home. Everything was responding really fast and things where really intuitive. I went to Preferences to configure the multitouch trackpad and I was simply wordless when I saw the way the different &lt;/span&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;a href=&quot;http://www.youtube.com/watch#!v=-OIwcMWA2oI&quot;&gt;gestures are explained&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;Then I playing a little bit with my kids and the “Photo Booth” application. OSX doesn’t come with games, but I can say that the “Photo Booth” application can be really funny :)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;Time to get serious, where are my apps?&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;The first thing I did was to install all my usual communication, browsing and other common applications. So I started installing Firefox, Google Chrome, Skype, DropBox, OpenOffice, VirtualBox, VLC, FileZilla, Transmission and TrueCrypt (see &lt;a href=&quot;http://lifehacker.com/5562864/lifehacker-pack-for-mac-our-essential-list-of-the-best-free-mac-downloads&quot;&gt;Essential List of the Best Mac Free Downloads&lt;/a&gt; for more recommendations). But I was still missing some functionalities from my Linux/Windows machines.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;My first problem was to find a proper replacement for 7Zip. After some googling I found a really nice project which solved my needs perfectly: &lt;/span&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;a href=&quot;http://www.kekaosx.com/en/&quot;&gt;Keka&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Next problem, I wanted to properly play my DivX and Xvid files using QuickTime. VLC is really great, but I’m always looking for the best integrated solution. This time the answer came from the &lt;/span&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;a href=&quot;http://perian.org/&quot;&gt;Perian&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; project.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;Ok, now I can browse, execute my virtual machines, use my compressed files and play my&amp;nbsp; video files.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;My first surprise came when I tried to access my external drives. Both of them are formatted using NTFS, I simply connected them and I could access my files perfectly .... but I was not able to modify them !!!! Back to Google and I find that there’s no NTFS writing support in OSX. The solution came from Tuxera, but I find it really slow, so I’m still looking for an optimal solution&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;Time for the Developer&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;Until now I was able to cover all my basic needs, but now was time to configure my future development environment.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;As I already said, I always try to use the best tool for my projects, so I don’t hesitate to install different IDEs and tools if I get some benefits.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;So I first started with my NetBeans installation. Then I followed with Eclipse 64bits and I must say that the speed difference with my Linux Eclipse is amazing. The version in OSX runs like a breeze and feels much faster. Then I followed with “Komodo Edit” which is quite powerful when working with scripting languages and finally I got the XCode from Apple, just to start learning Cocoa and Objective-C.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;So I can now continue working with my different projects, but I’m still missing a good way of working with my Subversion repositories. I known, both Eclipse and Netbeans have SVN plugins, but I always feel limited when using them, compared to the power of TortoiseSVN + WinMerger.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;Back to Google and my second problem. There’s nothing that can be compared with my Windows TortoiseSVN + WinMerge or my Linux RabbiVCS + Merger. After some search and testing I found CornerStone, Versions and Kaleidoscope. Even when from a visual point of view these are amazing tools, from a functionality point of view I’m missing some basic features, like branch merging. So far I’m using my bellowed command-line svn, using the CollabNet installers.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px; text-decoration: underline;&quot;&gt;&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;&lt;strong&gt;Casual / Home Users:&lt;/strong&gt; The MacBook Pro is a great tool, really intuitive and gives all the needed tools out-of-the-box&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;&lt;strong&gt;Advanced Users:&lt;/strong&gt; Again, a great system that you can tweak as needed&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span style=&quot;font-family: helvetica; font-size: medium; letter-spacing: 0px;&quot;&gt;&lt;strong&gt;Developers:&lt;/strong&gt; I miss some of my Windows / Linux tools. The options in OSX are great and maybe I just need to change the way I do some stuff, but right now I would say that’s a good system, but needs some extra effort to make it great.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: helvetica;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;&quot;&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/1934585451406308317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/07/switching-experience-i-finally-moved-to.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/1934585451406308317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/1934585451406308317'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/07/switching-experience-i-finally-moved-to.html' title='Switching Experience (I finally moved to Mac)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-8938824733026222687</id><published>2010-03-11T22:15:00.000+01:00</published><updated>2010-03-11T22:15:37.462+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Opinion"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Patents"/><title type='text'>The True Behind the Software Patents</title><content type='html'>Finally someone said the true about the Software Patents. Since yesterday all the blogosphere is talking about the latest Jonathan Schwartz (former Sun CEO) post &lt;a href=&quot;http://jonathanischwartz.wordpress.com/2010/03/09/good-artists-copy-great-artists-steal/&quot;&gt;&quot;Good Artists Copy, Great Artists Steal&quot;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For years I&#39;ve seen the big companies (Microsoft, Apple, Nokia, Adobe, ....) defending the need of software patents. The main reason, the excuse, was always to protect the intellectual property, the investments these companies where doing in research and development. And that&#39;s the point that was never clear to me.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s see. If you create a chip, or an engine, or a car, there&#39;s always a big amount of work, design, engineering, models, tests, .... The same could be said about a software package. Any Operating System (Windows, OSX, Linux) or production software like the ones created by Adobe, Microsoft, .... All of those cannot be pirated or illegally copied, since there was a huge amount of work to create them.&lt;br /&gt;
&lt;br /&gt;
But what happens with the Software Patents? Most of them are only ideas, and the patent owner is not always the one that had the idea. Patents like Amazon&#39;s &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/1-Click&quot;&gt;1-Click&lt;/a&gt;&quot;, or some of the crazy Microsoft patents like &quot;&lt;a href=&quot;http://gizmodo.com/5402796/microsoft-patents-the-sudo-command&quot;&gt;the sudo command&lt;/a&gt;&quot;, &quot;&lt;a href=&quot;http://news.zdnet.com/2100-9595_22-329645.html&quot;&gt;XML&lt;/a&gt;&quot;, or &quot;&lt;a href=&quot;http://www.out-law.com/page-4596&quot;&gt;the click&lt;/a&gt;&quot;. In Amazon&#39;s case, the &quot;1-Click&quot; is an obvious choice if you want a nice user experience in your online shop. Regarding Microsoft patents ... well I think it&#39;s quite obvious that they where only trolling.&lt;br /&gt;
&lt;br /&gt;
Now finally someone said the true. The software patents are nothing else that a way to protect your company against trolls. The software patent alone has no value, the real value appears when you can use it to do a deal with another company so you can use the others ideas for free.&lt;br /&gt;
&lt;br /&gt;
Guys, do you known something? You can do the same using some of the Open Source licenses laying around. I would really prefer more investment in real technology: new protocols (someone said IPV6 support?), better languages (HTML5 before 2015?) or simply more stable, secure and mature software.&lt;br /&gt;
&lt;br /&gt;
What&#39;s clear is that Jonathan Schwartz won a new fan in me. I&#39;m waiting to see what else he couldn&#39;t say...&lt;br /&gt;
&lt;br /&gt;
See you soon.</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/8938824733026222687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/03/true-behind-software-patents.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8938824733026222687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8938824733026222687'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/03/true-behind-software-patents.html' title='The True Behind the Software Patents'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-8936842214661273558</id><published>2010-01-28T23:04:00.001+01:00</published><updated>2010-01-28T23:06:08.880+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPad"/><category scheme="http://www.blogger.com/atom/ns#" term="iphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Opinion"/><title type='text'>iPad: What can we do with it?</title><content type='html'>&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;After months of rumors the iPad is finally here. It&#39;s a great device, but is also missing some great features, that for sure will be included in iPad v2. But right now we have a first version opening a new way (or as Apple usually does, converting an existing market).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;Worldwide the media is talking about this new device, saying things like &quot;The future is here&quot;, &quot;The best device for ....&quot;. But, what&#39;s really the iPad? What we will do with it? How is it going to change our way of working?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;Let&#39;s see different examples:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;b&gt;&lt;u&gt;iPad in the Education&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;That&#39;s the first situation that comes to my mind. Maybe because I&#39;ve children, maybe because in Spain the&amp;nbsp;government&amp;nbsp;is starting to invest in netbooks for the schools.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;The iPad looks like the perfect solution for the 21st century education. Some countries are investing in netbooks (like Spain) to introduce the new technologies to our kids. But looks like the iPad is a much better choice.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;The main objective of the netbook is that the children can learn how to use internet, read the text books and write their works. The problem appears when the netbook is hit by a virus, someone needs to install the applications, configure the computer, ......&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;The iPad can do everything that the netbook needs to do, but is also easier to manage, safer, everything can be installed easily and the UI is really intuitive.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;In fact, the iPad seems to be a winner as an educational tool.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;u&gt;&lt;b&gt;iPad in the Company&lt;/b&gt;&lt;/u&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;I see the iPad in the company doing mainly 2 different jobs.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;The first one is again in substitution of a netbook. If you need to travel a lot, but you need to be always in touch, a netbook is a good option, but probably an iPad with a bigger screen and a lighter weight is a better partner. If you need a tool to write email, surf the web and read the latest news the iPad is a good solution. If you add a 3G connection and a GPS is a winner. I can foresee different scenarios where a GPS can be an extra benefit. Simply looking for the closest restaurant or hotel for a meeting is an example.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;The second example is when you&#39;re always at the office, but your work request continuous walks inside the company (think of a secretary or a warehouse worker) The iPad is a good way to have all your worksheets, documents and email always with you.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;Another situation (I known, I said &quot;2 different jobs&quot;) is when your work requires an specific &lt;i&gt;image. &lt;/i&gt;Design or Media companies are just an example of companies that are alway looking for the cooler device for their receptions, for a device that says &quot;we care about how things look&quot;. And right now, the iPad is the best way of saying it.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;b&gt;&lt;u&gt;iPad at Home&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;And of course, the iPad is also a great device to have at home. The iPhone has already proven itself as a great gaming platform, just imagine with a bigger screen.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;At home, the iPad, can be ideal as a family device for &quot;quick tasks&quot;. Checking your email, twitter or social network is just an example. Using it as a photo album or contacts manager is just another. You can also watch your movies or series or listen your favorite music. And now you can also read books.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;Most of these things were already possible with the iPhone/iPod Touch, but the screen is making here all the difference. I&#39;m the owner of an iPod Touch, and even when I use it a lot, I cannot write more than a short answer to an email, or do a quick check to a website. I cannot imagine myself working hours with this tiny screen. But I can see myself perfectly working with the iPad, in fact, I can see myself writing in this blog with the iPad in a couple of months.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;b&gt;&lt;u&gt;Conclusion&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;The iPad is far away from being perfect.&amp;nbsp;The fact that doesn&#39;t have a camera is, from my point of view, an error. The apparent lack of multitasking is also a problem, the fact that the screen is 4:3 is another drawback.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;It&#39;s clear that the iPad is not a computer, is not a portable console, is not an MP3 player and is not an ebook reader.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;We can only wait that the next generation will solve all these negative points.&amp;nbsp;But the iPad is also a bit of everything, and that&#39;s its strength.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;See you soon.&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/8936842214661273558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/01/ipad-what-can-we-do-with-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8936842214661273558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8936842214661273558'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/01/ipad-what-can-we-do-with-it.html' title='iPad: What can we do with it?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-6144920785773285053</id><published>2010-01-01T23:19:00.000+01:00</published><updated>2010-01-01T23:19:36.109+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Opinion"/><title type='text'>Is Desktop Development Dying?</title><content type='html'>After the Oracle/Sun issue and the poor Java 7 announcement, a lot of people has been talking about the &quot;Java is Dead&quot; issue. I completely&amp;nbsp;disagree&amp;nbsp;with this statement, but I really think that something is dying: desktop development.&lt;br /&gt;
&lt;br /&gt;
Last year&#39;s improvements in languages and frameworks related with desktop development can be easily reduced to &lt;a href=&quot;http://www.nvidia.com/object/cuda_home.html&quot;&gt;CUDA &lt;/a&gt;and &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenCL&quot;&gt;OpenCL &lt;/a&gt;(please tell me if I&#39;m missing something else). The improvements in frameworks for desktop applications was null (at least in the Java world). On the other hand, let&#39;s check other technologies and see the consolidation of the &quot;App Store&quot; and the whole iPhone OS world, how well Android is doing (maybe slower than expected), the quality jump in the Google WebToolkit, Google Chrome OS, the consolidation of Cloud Computing, ....&lt;br /&gt;
&lt;br /&gt;
All these&amp;nbsp;technologies&amp;nbsp;are related with mobile development, web development, ... but desktop development is not following. From my point of view, desktop development is stuck at the same place since some years ago.&amp;nbsp;Let&#39;s see what will bring the next year, but so far all the buzz seems to point to the same place, again mobile development.&lt;br /&gt;
&lt;br /&gt;
Not so many years ago a lot of people was looking the whole HTML/JavaScript&amp;nbsp;coding as &quot;second class development&quot; (well maybe was not that many), but nowadays it&#39;s an&amp;nbsp;essential&amp;nbsp;part of any developer work. Almost all the restrictions that we had 10 years ago to do &quot;web applications&quot; are gone. And the rest will&amp;nbsp;disappear&amp;nbsp;when HTML 5 finally arrives. So if there&#39;s any of you that&#39;s still not looking into this &lt;i&gt;new&lt;/i&gt; world, it&#39;s about time to jump into it ;)&lt;br /&gt;
&lt;br /&gt;
See you soon,</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/6144920785773285053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2010/01/is-desktop-development-dying.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/6144920785773285053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/6144920785773285053'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2010/01/is-desktop-development-dying.html' title='Is Desktop Development Dying?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-824258024055891393</id><published>2009-12-22T21:58:00.000+01:00</published><updated>2009-12-22T21:58:51.243+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HowTo"/><category scheme="http://www.blogger.com/atom/ns#" term="iphone"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>The iPhone/iPod As an IT Tool</title><content type='html'>It&#39;s not Christmas, but I&#39;ve already got my present :) Some days ago, my current employee, gave me an iPod Touch 2G. It was not a simple present, but also a tool to work with a new iPhone application that we&#39;re developing.&lt;br /&gt;
&lt;br /&gt;
As many of you, I&#39;m working in a small company. My main job is as developer, but I&#39;m also doing some IT and technical support work, so I was curious to see how could the iPod help me with these tasks.&lt;br /&gt;
&lt;br /&gt;
As I said, I have an iPod, but everything explained here is also applicable to the iPhone. In fact the iPhone is even more useful since you don&#39;t need to look for a WIFI connection ;)&lt;br /&gt;
&lt;br /&gt;
Let&#39;s start:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;u&gt;&lt;b&gt;A Communication Tool&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Here we will see how can we use the iPhone as a communication tool:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Mail: Configure your e-mail accounts (check here for the documentation to &lt;a href=&quot;http://support.apple.com/kb/HT1385&quot;&gt;setup your email accounts&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Skype: Even if you have an iPod, you can use Skype to stay in contact with your friends and colleagues. If you also want to talk, you&#39;ll need to buy a headphone+microphone kit.&lt;/li&gt;
&lt;li&gt;Social Networks: Almost all the social networks have an iPhone widget. In my case I installed Facebook, LinkedIn and Twitter (Twitterrific). But you can also find widgets for Xing, MySpaces, ...&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;An Administrator Tool&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Let&#39;s see what do we need to have control over our computers and network:&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.mochasoft.dk/iphone_ping.htm&quot;&gt;Network Ping Lite&lt;/a&gt;: It&#39;s a simple application that gives you the power of ping, traceroute and telnet commands&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.mochasoft.dk/iphone_vnc.htm&quot;&gt;Mocha VNC&lt;/a&gt;: With this tool we can control any computer with a VNC Server installed.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.zinger-soft.com/iSSH_features.html&quot;&gt;iSSH&lt;/a&gt;: Another great application. With this one I&#39;ve all the power of an SSH console, but I can also do remote X connections&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://support.apple.com/kb/HT1424&quot;&gt;VPN&lt;/a&gt;: Integrated in you iPhone is a cool VPN client, so you are never outside your network.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.bananaglue.de/inet/index_e.php&quot;&gt;iNet Pro&lt;/a&gt;: With this one you can ping, scan ports, scan network, ...&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;Other Useful Tools&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;That&#39;s the&amp;nbsp;miscellaneous&amp;nbsp;section where I list other tools that I feel are really useful&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.dropbox.com/&quot;&gt;DropBox&lt;/a&gt;: Does it even need a presentation?&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.goodiware.com/goodreader.html&quot;&gt;GoodReader&lt;/a&gt;: A really good PDF reader&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://e2ndesign.blogspot.com/&quot;&gt;AppBox Pro&lt;/a&gt;: It&#39;s a useful package with different applications.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I&#39;m still investigating what other cool things I can do, but what&#39;s your preferred iPhone application?&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/824258024055891393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/12/iphoneipod-as-it-tool.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/824258024055891393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/824258024055891393'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/12/iphoneipod-as-it-tool.html' title='The iPhone/iPod As an IT Tool'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-3733767321796553179</id><published>2009-11-08T14:59:00.000+01:00</published><updated>2009-11-08T14:59:53.012+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code"/><category scheme="http://www.blogger.com/atom/ns#" term="Comment"/><category scheme="http://www.blogger.com/atom/ns#" term="HowTo"/><category scheme="http://www.blogger.com/atom/ns#" term="programming language"/><title type='text'>How to Properly Comment Code? (Part II)</title><content type='html'>It took longer than expected to find the time to write the second part, but finally here it&#39;s&lt;br /&gt;
&lt;br /&gt;
For some reason, the last month has been full of articles about commenting code, like &lt;a href=&quot;http://codeutopia.net/blog/2009/10/15/is-commenting-your-code-useless/&quot;&gt;Is Commenting Your Code Useless?&lt;/a&gt;, &lt;a href=&quot;http://blog.james-carr.org/2009/10/15/code-comments-the-lowest-form-of-communication/&quot;&gt;Code Comments: The Lowest Form of Communication&lt;/a&gt;&amp;nbsp;or &lt;a href=&quot;http://www.turnleafdesign.com/?p=255&quot;&gt;Comments are a sign of bad code&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
You&#39;re free to visit those sites and see their arguments. I must say that I only agree with the first of them, in fact this article is almost a duplicate of his arguments.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;When should I comment my code?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
To properly answer this question you need to look at your code and think if your comment is improving in some way the understanding of what you&#39;re doing.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;// We&#39;re done
isDone = true;
&lt;/pre&gt;&lt;br /&gt;
Is not really helpful, is it? Your comments must&amp;nbsp;aggregate&amp;nbsp;some value to your code, otherwise are&amp;nbsp;worthless.&lt;br /&gt;
Also you must always keep in mind that your code should be clean enough that&#39;s self-descriptive. Keeping your code self-descriptive have 2 benefits. The first one is that you&#39;ll not need to add comments, the second, and most important, that will make things easier when arrives the time to maintain it &amp;nbsp;(and&amp;nbsp;believe&amp;nbsp;me, this time will come).&lt;br /&gt;
&lt;br /&gt;
Only in the case that your code is not descriptive enough, you&amp;nbsp;&lt;b&gt;must&lt;/b&gt;&amp;nbsp;add a comment. Is that bad? not at all.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;My code is self-descriptive, why should I comment it?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Some pieces of code can be quite complex, mainly when you work in real projects. You only need to thing about financial, graphic or simulation software. They require tons of complex coding to achieve their objectives and it&#39;s usually quite hard to get the mentioned self-descriptive code.&lt;br /&gt;
&lt;br /&gt;
Even when your code can be really clear, the purpose of this code may be not. I&#39;m going to copy a good example from Jani&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;//Calculate if two circles intersect
$xd = $c2-&amp;gt;x - $c1-&amp;gt;x;
$yd = $c2-&amp;gt;y - $c1-&amp;gt;y;
$diameter = $c1-&amp;gt;radius + $c2-&amp;gt;radius;
$intersection = ($xd*$xd + $yd*$yd) &amp;lt; ($diameter * $diameter);
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Simply reading this code would be a bit hard to known what&#39;s happening. The variable names could help, but the comment is giving us the final information</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/3733767321796553179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/11/how-to-properly-comment-code-part-ii.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/3733767321796553179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/3733767321796553179'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/11/how-to-properly-comment-code-part-ii.html' title='How to Properly Comment Code? (Part II)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-4569872360523887504</id><published>2009-09-28T22:41:00.000+02:00</published><updated>2009-09-28T22:07:31.333+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code"/><category scheme="http://www.blogger.com/atom/ns#" term="Comment"/><category scheme="http://www.blogger.com/atom/ns#" term="HowTo"/><category scheme="http://www.blogger.com/atom/ns#" term="programming language"/><title type='text'>How to Properly Comment Code? (Part I)</title><content type='html'>If you do a search in Google for &lt;a href=&quot;http://www.google.es/search?hl=en&amp;amp;q=%22code+comment%22&amp;amp;btnG=Search&quot;&gt;&quot;code comment&quot;&lt;/a&gt; you&#39;ll find 216,000 hits and if you do the search for &lt;a href=&quot;http://www.google.es/search?hl=en&amp;amp;q=%22comment+code%22&amp;amp;btnG=Search&quot;&gt;&quot;comment code&quot;&lt;/a&gt; you&#39;ll find 505,000 hits. Then, why is so difficult to find properly commented code?&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The first point that I want to clarify is that I&#39;m talking about &quot;commenting code&quot; not &quot;documenting code&quot; which is slightly different.&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The code documentation is used to generate the API documentation, to known which methods are available, what arguments are accepted and what&#39;s the result of the call. The documentation is destined to be used and understood by the users of your code (like users of you code library and/or classes).&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;On the other hand, the code comments are helpful to understand the internals of your methods. Usually these comments are only read by your colleagues.&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Now that the difference is clear we can continue.&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;As developers we usually ignore or forget the &quot;code comments&quot;, but we always try to write some information (even minimum) when is related with the &quot;code documentation&quot;, we even have tools to autogenerate the documentation or whine if it&#39;s not correct.&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Why do we keep forgetting and ignoring the &quot;code comments&quot;? From my point of view there are 2 main reasons:&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;&quot;It&#39;s not needed&quot;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;That&#39;s what we think when we&#39;re writing new code. At the moment the code is always so clear and beautiful that there&#39;s no need to document it. Why should we spend time? Who can be so dummy that needs extra info about our code?&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Well the dummy guy that will need this comment is usually ourselves. When we come back to this block of code in the future, things will not look so clear and obvious.&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;&quot;Laziness&quot;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;That&#39;s the other major reason. The typical &quot;&lt;i&gt;I&#39;m really busy right now, I&#39;ll do it later&lt;/i&gt;&quot;. You known what? If you leave it for later, is almost sure that never will happen.&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
The lack of proper comments in our code is always going to come back in the future and bite us.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The next day we&#39;ll see some tips about how to properly comment our code.&lt;br /&gt;
&lt;br /&gt;
See you.&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/4569872360523887504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/09/how-to-properly-comment-code.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/4569872360523887504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/4569872360523887504'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/09/how-to-properly-comment-code.html' title='How to Properly Comment Code? (Part I)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-1045195432972187011</id><published>2009-09-18T14:33:00.005+02:00</published><updated>2009-09-18T14:38:39.612+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code"/><category scheme="http://www.blogger.com/atom/ns#" term="Opinion"/><category scheme="http://www.blogger.com/atom/ns#" term="StackOverflow"/><title type='text'>StackOverflow and the Lazy Developers</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;Hi again,&lt;br /&gt;&lt;br /&gt;During the last days I&#39;ve been looking deeply into StackOverflow and I must confess that&#39;s a great source of information and knowledge. But I&#39;ve also found something that worries me a bit, lazy developers.&lt;br /&gt;&lt;br /&gt;Most of the questions in StackOverflow are really valid. Complex questions about special cases, people looking for the help of a more experience developer or even questions that can be due to a lack of knowledge in an specific subject or a part of a language or API. But I&#39;ve also found a big number of questions that can only be caused by pure laziness.&lt;br /&gt;&lt;br /&gt;Why am I saying that? Because simply putting the question keywords in google you can find the answer. I&#39;ve even seen cases where the first result in Google points to the valid answer (sometimes even inside StackOverflow).&lt;br /&gt;&lt;br /&gt;Why does it worry me? Because I&#39;ve always believed that a software developer &lt;b&gt;must &lt;/b&gt;be capable of reading documentation, creating test cases and find solutions by himself (doing trial and error if needed). If we just limit ourselves to ask the most simple questions, means that we don&#39;t care enough about what we&#39;re doing. If we just ask about stuff that can be easily in our language/API/SDK documentation, I don&#39;t want to think what we&#39;ll do with more complex problems.&lt;br /&gt;&lt;br /&gt;This behaviors will produce tons and tons of copy&amp;amp;pasted code in our programs and will create a generation of developers unable to think by themselves, solve the most easy problems or understand the real consequences of the pieces of code they write.&lt;br /&gt;&lt;br /&gt;See you soon.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;zemanta-pixie&quot;&gt;&lt;img src=&quot;http://img.zemanta.com/pixy.gif?x-id=4b08caef-a9cc-84e1-946e-49f882f0cba7&quot; alt=&quot;&quot; class=&quot;zemanta-pixie-img&quot; /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/1045195432972187011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/09/stackoverflow-and-lazy-developers.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/1045195432972187011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/1045195432972187011'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/09/stackoverflow-and-lazy-developers.html' title='StackOverflow and the Lazy Developers'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-668121799562383465</id><published>2009-09-07T21:25:00.009+02:00</published><updated>2009-09-08T09:40:23.365+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="NetBeans"/><category scheme="http://www.blogger.com/atom/ns#" term="Swing"/><category scheme="http://www.blogger.com/atom/ns#" term="SwingX"/><title type='text'>Howto Install SwingX in NetBeans 6.7</title><content type='html'>Today I feel like doing some graphic stuff in my pet application. Even when Swing is really nice, I usually miss a lot of more cool effects. Just thinking in all the needed code to create an usable JTable gives me a headache.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I&#39;ve decided to use &lt;a href=&quot;https://swingx.dev.java.net/&quot;&gt;SwingX&lt;/a&gt;. For those of you that doesn&#39;t know about SwingX, please check their &lt;a href=&quot;http://swinglabs.org/&quot;&gt;website&lt;/a&gt;, but as a resume I will simple say that are a collections of advanced Swing components and that some of them will become part of the default Swing set in JDK 7.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let&#39;s start the party:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Download SwingX to you computer&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;You can do it from here: &lt;a href=&quot;http://swinglabs.org/downloads.jsp&quot;&gt;SwingX Download&lt;/a&gt;. Now I would recommend you to unpack it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Add SwingX Library to NetBeans&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;In NetBeans go to Tools -&gt; Library Manager and click the &quot;New Library...&quot; button&lt;/li&gt;&lt;li&gt;Type a name: SwingX&lt;/li&gt;&lt;li&gt;Now in the ClassPath tab you need to add the jar files you will find the &lt;i&gt;&lt;path where=&quot;&quot; i=&quot;&quot; downloaded=&quot;&quot; swingx=&quot;&quot;&gt;/dist&lt;/path&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;(Optional) You can also add the SwingX sources and documentation (The SwingX 1.0 javadoc zip file is incomplete, but I used the &quot;&lt;a href=&quot;http://swinglabs.java.sun.com/hudson/job/SwingX%20Continuous%20Build/javadoc/&quot;&gt;Hudson Continuous Build Javadoc&lt;/a&gt;&quot; without problems)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;Add SwingX to your Project&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Right click on your project and choose &quot;Properties&quot;&lt;/li&gt;&lt;li&gt;Select the &quot;Libraries&quot; section in the left tree&lt;/li&gt;&lt;li&gt;Now click in &quot;Add Libraries...&quot; in the right panel&lt;/li&gt;&lt;li&gt;Select the Library you created in the previous step (&quot;SwingX&quot; if you followed my suggestion)&lt;/li&gt;&lt;li&gt;Finally hit the &quot;Add Library&quot; button&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;Add SwingX Components to the Palette&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Create or open a GUI class form. You&#39;ll then see the Palette on the right side (by default)&lt;/li&gt;&lt;li&gt;Right click on the Palette and choose &quot;Palette Manager...&quot;&lt;/li&gt;&lt;li&gt;Click &quot;New Category...&quot; and choose a name. I would suggest to type SwingX again.&lt;/li&gt;&lt;li&gt;Select the newly created category and choose &quot;Add from Library...&quot;&lt;/li&gt;&lt;li&gt;Now choose all the components you want to have available (use Ctrl+A to select all)&lt;/li&gt;&lt;li&gt;Finally choose again the &quot;SwingX&quot; category&lt;/li&gt;&lt;li&gt;Click &quot;Finish&quot;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;We&#39;re done. Now you can use the SwingX components in your NetBeans Projects.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Happy coding&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/668121799562383465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/09/howto-install-swingx-in-netbeans-67.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/668121799562383465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/668121799562383465'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/09/howto-install-swingx-in-netbeans-67.html' title='Howto Install SwingX in NetBeans 6.7'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-289937781208015928</id><published>2009-09-03T23:50:00.007+02:00</published><updated>2009-09-07T21:34:37.265+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="7zip"/><category scheme="http://www.blogger.com/atom/ns#" term="7zipjbind"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="zip"/><title type='text'>The Best Way of Working with Zip Files in Java</title><content type='html'>Finally I found the best way of working with zip files in Java :)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In one of my &lt;a href=&quot;http://ctasada.blogspot.com/2009/08/is-it-possible-to-finish-hobby-project.html&quot;&gt;hobby projects&lt;/a&gt; I need to work intensively with compressed files (mainly zip files). My first approach was to use the &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/util/zip/package-summary.html&quot;&gt;java.util.zip package&lt;/a&gt;, but was too slow. So I started looking for other options.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My second approach was to create a wrapper for the &lt;a href=&quot;http://www.7-zip.org/&quot;&gt;7zip&lt;/a&gt; executable (so I could have cross-platform support). This approach was much better, from a performance point of view, but to retrieve any info I needed to parse console output and solve a lot of problems with the &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html&quot;&gt;java.lang.Runtime&lt;/a&gt; class.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today I&#39;ve finally found the best solution .... but before some really simple comparations:&lt;/div&gt;&lt;br /&gt;&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;java.util.zip&lt;/th&gt;&lt;th&gt;Home Made&lt;br /&gt;7zip.exe Wrapper&lt;/th&gt;&lt;th&gt;&quot;Best Solution&quot;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Extract All&lt;/b&gt;&lt;/td&gt;      &lt;td style=&quot;text-align: right;&quot;&gt;12203&lt;/td&gt;&lt;td style=&quot;text-align: right;&quot;&gt;4109&lt;/td&gt;&lt;td style=&quot;text-align: right;&quot;&gt;4094&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Get Number of Elements&lt;/b&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right;&quot;&gt;4000&lt;/td&gt;&lt;td style=&quot;text-align: right;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;color:#FF0000;&quot;&gt;&lt;i&gt;4109&lt;/i&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;text-align: right;&quot;&gt;78&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;All the measurements are in milliseconds&lt;/li&gt;&lt;li&gt;The test was done with a 104MB zip file containing 110 jpg files.&lt;/li&gt;&lt;li&gt;The &quot;Get Number of Elements&quot; with the &quot;Home made Wrapper&quot; is also done extracting everything and counting the number of files (I&#39;m sorry I was a bit lazy here)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I don&#39;t think that I need to add too much to these numbers. The integrated Java zip package is nice, but painfully slow.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And finally is time to show the &quot;Best Solution&quot; and an example comparing it with the Java zip code ;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The winner is &quot;&lt;a href=&quot;http://sevenzipjbind.sourceforge.net/index.html&quot;&gt;7-Zip-JBinding&lt;/a&gt;&quot; and has they explain in their website:&lt;span class=&quot;Apple-style-span&quot;  style=&quot; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:Geneva, Arial, Helvetica, sans-serif;&quot;&gt;&lt;blockquote&gt;7-Zip-JBinding is a java wrapper for &lt;a href=&quot;http://www.7-zip.org/&quot;&gt;7-Zip&lt;/a&gt; C++ library. It allows extraction of many archive formats using a very fast native library directly from java through JNI.&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Get the Number of files using java.util.zip&lt;pre class=&quot;brush: java&quot;&gt;    static public int getSize(File file) {&lt;br /&gt;   ZipFile zf = null;&lt;br /&gt;   int total = -1;&lt;br /&gt;&lt;br /&gt;   try {&lt;br /&gt;       zf = new ZipFile(file);&lt;br /&gt;       total = 0;&lt;br /&gt;       for (Enumeration e = zf.entries(); e.hasMoreElements();) {&lt;br /&gt;           e.nextElement();&lt;br /&gt;           total++;&lt;br /&gt;       }&lt;br /&gt;       zf.close();&lt;br /&gt;   } catch (ZipException ex) {&lt;br /&gt;       Logger.getLogger(Zip.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;   } catch (IOException ex) {&lt;br /&gt;       Logger.getLogger(Zip.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return total;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And the same with 7-Zip-JBinding&lt;br /&gt;&lt;pre class=&quot;brush: java&quot;&gt;&lt;br /&gt;public int getSize (File file) {&lt;br /&gt;    RandomAccessFile randomAccessFile = null;&lt;br /&gt;    ISevenZipInArchive inArchive = null;&lt;br /&gt;    int total = -1;&lt;br /&gt;    try {&lt;br /&gt;        randomAccessFile = new RandomAccessFile(file.getAbsolutePath(), &quot;r&quot;);&lt;br /&gt;        inArchive = SevenZip.openInArchive(null, // autodetect archive type&lt;br /&gt;                new RandomAccessFileInStream(randomAccessFile));&lt;br /&gt;&lt;br /&gt;        total = inArchive.getNumberOfItems();&lt;br /&gt;&lt;br /&gt;    } catch (Exception e) {&lt;br /&gt;        System.err.println(&quot;Error occurs: &quot; + e);&lt;br /&gt;        System.exit(1);&lt;br /&gt;    } finally {&lt;br /&gt;        if (inArchive != null) {&lt;br /&gt;            try {&lt;br /&gt;                inArchive.close();&lt;br /&gt;            } catch (SevenZipException e) {&lt;br /&gt;                System.err.println(&quot;Error closing archive: &quot; + e);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        if (randomAccessFile != null) {&lt;br /&gt;            try {&lt;br /&gt;                randomAccessFile.close();&lt;br /&gt;            } catch (IOException e) {&lt;br /&gt;                System.err.println(&quot;Error closing file: &quot; + e);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return total;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As you can see the code is quite similar, but the performance is quite different.&lt;br /&gt;&lt;br /&gt;See you.</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/289937781208015928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/09/best-way-of-working-with-zip-files-in.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/289937781208015928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/289937781208015928'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/09/best-way-of-working-with-zip-files-in.html' title='The Best Way of Working with Zip Files in Java'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-3713197506716466879</id><published>2009-09-01T22:51:00.000+02:00</published><updated>2009-09-01T22:51:47.672+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blogging"/><title type='text'>Why do we blog? What do we learn?</title><content type='html'>&lt;div&gt;Blogging takes time and only in rare occasions the bloggers make any money, so why do we do it? &lt;a href=&quot;http://www.codinghorror.com/blog/archives/001298.html&quot;&gt;Jeff Atwood&lt;/a&gt; has a good theory. But I like to think that it is more than an &quot;&lt;b&gt;&lt;i&gt;egomaniac action&lt;/i&gt;&lt;/b&gt;&quot;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Blogging is, for sure, a good way of promoting yourself. In our blogs we put our opinions and also part of our work. A blog is a good way of showing future employers which kind of person you are.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A blog is also a way of networking, a way of sharing your knowledge, but also a way of learning from other people comments.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And the same can be said for the blog readers. I invest daily near 1 hour reading blogs and news. It is a great way of learning from other developers and stay updated. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our profession/hobby is always evolving really fast, and blogging is, so far, the best way I have found to be in the loop.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See you soon.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/3713197506716466879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/08/why-do-we-blog-what-do-we-learn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/3713197506716466879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/3713197506716466879'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/08/why-do-we-blog-what-do-we-learn.html' title='Why do we blog? What do we learn?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-3086800675843010797</id><published>2009-08-26T22:59:00.012+02:00</published><updated>2009-08-27T07:17:36.105+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="JUnit"/><title type='text'>JUnit: How to test your private methods</title><content type='html'>Some weeks ago I was creating some unit tests for a &lt;a href=&quot;http://ctasada.blogspot.com/2009/08/is-it-possible-to-finish-hobby-project.html&quot;&gt;hobby project&lt;/a&gt; I&#39;m working with. But I found myself stuck trying to test some private methods.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My first though was &quot;&lt;i&gt;Should I even need to test those methods?&lt;/i&gt;&quot; I invested some time looking for alternatives, but those methods must be private. What could I do?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One option was to modify those methods to be public, anyway this is a hobby project and I know I&#39;m not going to call them from outside. But since the main reason of this project is to learn I though I would best invest the needed time to find the correct solution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Being a fan of the Java &lt;a href=&quot;http://en.wikipedia.org/wiki/Reflection_(computer_science)&quot;&gt;reflection&lt;/a&gt; API, I decided to investigate this approach. This is the result:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class=&quot;brush: java&quot;&gt;/**&lt;br /&gt;* Convenient method to execute private methods from other classes.&lt;br /&gt;* @param test Instance of the class we want to test&lt;br /&gt;* @param methodName Name of the method we want to test&lt;br /&gt;* @param params Arguments we want to pass to the method&lt;br /&gt;* @return Object with the result of the executed method&lt;br /&gt;* @throws Exception&lt;br /&gt;*/&lt;br /&gt;private Object invokePrivateMethod (Object test, String methodName, Object params[]) throws Exception {&lt;br /&gt;   Object ret = null;&lt;br /&gt;&lt;br /&gt;   final Method[] methods =&lt;br /&gt;           test.getClass().getDeclaredMethods();&lt;br /&gt;   for (int i = 0; i &amp;lt; methods.length; ++i) {&lt;br /&gt;       if (methods[i].getName().equals(methodName)) {&lt;br /&gt;           methods[i].setAccessible(true);&lt;br /&gt;           ret = methods[i].invoke(test, params);&lt;br /&gt;           break;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return ret;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;As you can see the code is simply doing the next steps:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Retrieve an array of declared methods&lt;/li&gt;&lt;li&gt;Loop the array looking for the method we want to test&lt;/li&gt;&lt;li&gt;Once found, set the method as public&lt;/li&gt;&lt;li&gt;Execute the method and return the result&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;And we want to use it, we only need to do something like:&lt;/div&gt;&lt;pre class=&quot;brush: java&quot;&gt;MyClass instance = new MyClass();&lt;br /&gt;String expResult = &quot;Expected Result&quot;;&lt;br /&gt;Object[] params = {&quot;A String Value&quot;, &quot;Another Value&quot;};&lt;br /&gt;String result = (String) this.invokePrivateMethod(instance, &quot;myPrivateName&quot;, params);&lt;br /&gt;assertEquals(expResult, result);&lt;/pre&gt;&lt;div&gt;This is the best I could find. Fair enough but, do you know of a better or more elegant solution?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See you soon.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/3086800675843010797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/08/junit-how-to-test-your-private-methods.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/3086800675843010797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/3086800675843010797'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/08/junit-how-to-test-your-private-methods.html' title='JUnit: How to test your private methods'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-8820277746593482972</id><published>2009-08-24T23:14:00.000+02:00</published><updated>2009-08-27T00:38:07.973+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="programming language"/><title type='text'>Can I do &#39;this&#39; with my favorite language?</title><content type='html'>&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;When we need to start a new project we use our favorite language by default. Is it wrong? The short answer is &quot;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;No, it&#39;s not wrong&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;&quot;. But the correct answer is a bit more complex.&lt;br /&gt;&lt;br /&gt;Before starting a new project we should answer some basic questions.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul  style=&quot;font-family:times new roman;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Is our project a desktop or a web application?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Do we need a user interface?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Should it be cross-platform?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Do you need to integrate with some external service/platform?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Answer these points and now think for a couple of minutes if your favorite language is good enough.&lt;br /&gt;&lt;br /&gt;Almost all the &quot;&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Programming_paradigm&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;General Purpose Languages&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;&quot; (and &lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Multi-paradigm_programming_language&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;) are good enough to do any kind of application, but there are cases where it is much better to use some &quot;&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Domain-specific_language&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Domain Specific Language&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;&quot; or, at least, a different language that is better suited to do the specific kind of application we want to do.&lt;br /&gt;&lt;br /&gt;Let&#39;s see some extreme examples:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul  style=&quot;font-family:times new roman;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;If I need to create a program to automatize my connection to different SSH server, I could do it in Java, but that would be overkill, and too complex. A simple BASH script will be faster and easier.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;If I&#39;m a PHP developer and I need to create some simple desktop application. What should be my choice? Sure I can compile PHP code into an exe file, but probably I would get a much better and faster solution using Java, C# (or any other .NET language) or even Python.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;As I said, these are radical examples, but I think that shows my point. Don&#39;t be lazy when choosing the language you need. Even when a lot of languages would be OK to solve the problem, maybe your choice is not the best one.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;See you soon.&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/8820277746593482972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/08/can-i-do-this-with-my-favorite-language_26.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8820277746593482972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/8820277746593482972'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/08/can-i-do-this-with-my-favorite-language_26.html' title='Can I do &#39;this&#39; with my favorite language?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-5334860301657479951</id><published>2009-08-23T08:45:00.007+02:00</published><updated>2009-08-24T23:18:17.197+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="performance"/><title type='text'>Keep performance in mind</title><content type='html'>&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;Almost anywhere you will find that your first step when coding is making it to work and only later worry about performance. I only half agree.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;It&#39;s true that your code must work, otherwise you&#39;ll have nothing. But while you&#39;re coding you must always keep in mind the performance of this code. I don&#39;t mean that you should invest extra time trying to make your code faster, you just need to keep in mind some general recommendations about performance that will help you.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;For Java developers, this is a &lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://javaevangelist.blogspot.com/2006/11/coding-for-performance.html&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;good checklist&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;, but most of them are valid for almost any language:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 51, 51); line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;Do not recalculate constants inside a loop.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;color:#333333;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;Reduce the number of network operations by returning complete results rather than smaller intermediate results.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;color:#333333;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;Reduce the distance between objects during operation. It is better to perform complex operations locally.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;color:#333333;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;Avoid object creation and destruction except as necessary. Reuse existing objects.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;color:#333333;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;Use open source frameworks which are established and tested.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;;&quot;&gt;Find a list of performance check points for your favorite language and keep it in mind.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;, serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;times new roman&#39;, serif;&quot;&gt;See you soon.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;   style=&quot;font-size:100%;color:#333333;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 20px;font-size:13px;&quot; &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/5334860301657479951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/08/keep-performance-in-mind.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/5334860301657479951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/5334860301657479951'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/08/keep-performance-in-mind.html' title='Keep performance in mind'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5794802768211098530.post-3032838939178739435</id><published>2009-08-20T15:52:00.005+02:00</published><updated>2009-08-26T23:55:51.286+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>Don&#39;t understimate the need of tools</title><content type='html'>Hi again,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When we choose a language/framework/platform to start a new project we usually think that we&#39;ll have all the tools that we need. &lt;b&gt;False&lt;/b&gt;. Doesn&#39;t matter what we do, we&#39;ll always need a new tool that doesn&#39;t exist in the market to solve some problem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ten years ago I was working in a company using C/C++ in a cross-platform product (Windows, Solaris and Linux). I though that I would find absolutely anything I would need &lt;i&gt;&quot;I&#39;m working with C, everything is available&quot;&lt;/i&gt; And I was almost right, I found almost anything I needed, but almost none of them were cross-platform. At the end of the day I needed to create my own cross-platform API.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Six years ago I worked for another company where we worked mainly with Java. Then I though &lt;i&gt;&quot;Great, Java is cross-platform I will have no problems&quot;&lt;/i&gt; you know what? I was wrong. We were mainly working with code stored in an Oracle Database Server, together with thousand of string literals for the User Interface in multiple languages (Spanish, English, French, German, ....) And we also wanted to move from Java 1.3 to Java 1.4 (I know, but was an enterprise system) On top of that there was no way of compiling everything, since the code of every single operation was stored in the Database, so no real source files were available.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So at the end of the day I needed to create a data mining tool to spell check all the strings from the Database, also was capable of retrieving and compile the code of every operation to check if it could compile properly and detect deprecated code (so I could simulate the migration to Java 1.4) and also look for other potential problems merging my tool with &lt;a href=&quot;http://findbugs.sourceforge.net/&quot;&gt;FindBugs&lt;/a&gt; and &lt;a href=&quot;http://checkstyle.sourceforge.net/&quot;&gt;CheckStyle&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Four years ago I started to work for my actual company. There I was expecting anything. The main language was &lt;a href=&quot;http://tcl.sourceforge.net/&quot;&gt;Tcl/Tk&lt;/a&gt;. I was wrong again, now was a matter of creating almost any tool that I would need, since Tcl is one of the less used languages in the world and I&#39;m working in what&#39;s probably the biggest application wrote with it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What have I learned from all these cases? Doesn&#39;t matter which technology do you use, at the end of the day you&#39;ll need to write some tools to solve unexpected problems/situations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And don&#39;t be lazy about it. These tailored tools will always help you, so don&#39;t leave them for later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See you soon.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ctasada.blogspot.com/feeds/3032838939178739435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ctasada.blogspot.com/2009/08/dont-understimate-need-of-tools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/3032838939178739435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5794802768211098530/posts/default/3032838939178739435'/><link rel='alternate' type='text/html' href='http://ctasada.blogspot.com/2009/08/dont-understimate-need-of-tools.html' title='Don&#39;t understimate the need of tools'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01453456655661580489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>