<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkQAR3c4fSp7ImA9WhRUFks.&quot;"><id>tag:blogger.com,1999:blog-20366715</id><updated>2012-01-27T05:32:26.935-05:00</updated><category term="code reuse" /><category term="Gradle" /><category term="build" /><category term="IDE" /><category term="Maven" /><category term="DSL" /><category term="Ant" /><title>Java Things</title><subtitle type="html">Things about Java and related technologies.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://javathings.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/JavaThings" /><feedburner:info uri="javathings" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUUASH05eSp7ImA9WhRUEkQ.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-4242324910710407153</id><published>2012-01-22T23:34:00.001-05:00</published><updated>2012-01-22T23:34:09.321-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-22T23:34:09.321-05:00</app:edited><title>Mobile Carriers Don't Like Me</title><content type="html">I'm so&amp;nbsp;frustrated&amp;nbsp;with US mobile carriers right now.&lt;br /&gt;
Each of the big 4 carriers has serious issues.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-iRbYRqdG6T8/TxzienLeiAI/AAAAAAAAD1I/fleyKTJBByY/s1600/big-four-carriers-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-iRbYRqdG6T8/TxzienLeiAI/AAAAAAAAD1I/fleyKTJBByY/s200/big-four-carriers-1.jpg" width="116" /&gt;&lt;/a&gt;I use T-Mobile. I like their 4G (HSPA+) network&amp;nbsp;inspite&amp;nbsp;the popular opinion that they have the worst network.&lt;br /&gt;
I live outside of Boston (not too close and not too far)... Out of the 4 carriers, Verizon and Sprint don't have any 4G data outside of Boston. They only cover bits of highway for a short portion of my way out of Boston.&lt;br /&gt;
T-Mobile covers most of the way from Boston to my house with HSPA+. I think I have been getting between 2 and 4 Mbps in 2011. This is good enough for me.&lt;br /&gt;
&lt;br /&gt;
Not sure about AT&amp;amp;T 4G coverage. My wife's iPhone can only see their slow 3G (HSPA as opposing to HSPA+) and I know their LTE network has a long way to go reach my area.&lt;br /&gt;
AT&amp;amp;T has generally been ignoring Android devices up until very recently, so it's pretty much dead to me. :)&lt;br /&gt;
More importantly, they attempted to purchase T-Mobile. If that would go through, it wouldn't have been good for customers, so they are dead to me...&lt;br /&gt;
&lt;br /&gt;
So, for me personally T-Mobile is not perfect, but has been working out better than other carriers.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-0NPGHuzPkCs/TxzgGzI2x7I/AAAAAAAAD1A/vZ-DWwJ-hU0/s1600/TMO.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="188" src="http://1.bp.blogspot.com/-0NPGHuzPkCs/TxzgGzI2x7I/AAAAAAAAD1A/vZ-DWwJ-hU0/s200/TMO.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
That is not to say that T-Mobile has no issues.&lt;br /&gt;
Recently I discovered that I have an old rate plan, and now T-Mobile customer support insists that:&lt;br /&gt;
If I want to change number of minutes on my plan or anything at all about my plan for that matter, I have to switch to another rate plan that they currently support and extend my contract by 2 years!&lt;br /&gt;
&lt;br /&gt;
This is&amp;nbsp;ridicules! Let's say I don't have enough minutes in my plan - then I want to add minutes and T-Mobile should want me to add minutes to my plan... &amp;nbsp;But no, they create this random barrier to stop me from doing that!&lt;br /&gt;
&lt;br /&gt;
I probably wouldn't be so upset about this if I wouldn't need to remove one line from my family plan soon. I need the contract to expire for this line to be removed without early termination fees.&lt;br /&gt;
But that shouldn't really matter - I should be able to change number of minutes or services on my plan without having to extend commitment!&lt;br /&gt;
&lt;br /&gt;
It's just common sense - don't screw the customer, when there is no financial gain from that.&lt;br /&gt;
I can't commit to another 2 years at this point - don't put me into position where I start hating you!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-4242324910710407153?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Oy6AkVtt8Jbm0W9bLGlI1yEYYEY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Oy6AkVtt8Jbm0W9bLGlI1yEYYEY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Oy6AkVtt8Jbm0W9bLGlI1yEYYEY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Oy6AkVtt8Jbm0W9bLGlI1yEYYEY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/ZOcYA0Rugss" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/4242324910710407153?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/4242324910710407153?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/ZOcYA0Rugss/mobile-carriers-dont-like-me.html" title="Mobile Carriers Don't Like Me" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-iRbYRqdG6T8/TxzienLeiAI/AAAAAAAAD1I/fleyKTJBByY/s72-c/big-four-carriers-1.jpg" height="72" width="72" /><feedburner:origLink>http://javathings.blogspot.com/2012/01/mobile-carriers-dont-like-me.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8NRXs7eyp7ImA9WhdaGU8.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-2186606752697288315</id><published>2011-10-29T17:14:00.000-04:00</published><updated>2011-10-29T17:14:54.503-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-29T17:14:54.503-04:00</app:edited><title>Next Big Idea</title><content type="html">It actually should be quite easy to predict what would be the kind of idea that comes along once in a decade and changes the world so drastically that it affects everybody.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;div&gt;For one, science fiction always predicts this stuff many years in advance, you just have be able to see what's important behind everything else that it tells you.&lt;/div&gt;&lt;div&gt;Another sign is - shortly before next big thing's arrival, you can see smaller things from the same family of things appearing with rapidly increasing frequency.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;To me, those smaller things that are pointing out to the next big thing are:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://translate.google.com/"&gt;Google translate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www-03.ibm.com/innovation/us/watson/"&gt;Watson supercomputer that can answer any question&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.apple.com/iphone/features/siri.html"&gt;Siri the electronic assistant&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Those are the ones that come to mind right now, but there are others.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I am pretty sure that the next big thing will be about artificial intelligence. And somehow I feel that the breakthrough lays on the intersection of neuron network computers and genetic programming.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Those two technologies, when done right, should create a machine that learns and evolves exactly like living things do.&lt;/div&gt;&lt;div&gt;You feed tons of data in, you get output, there is a feedback loop, reinforcing connections that caused correct answers and induce changes in what caused incorrect answers. This goes on for enough cycles until it stops improving itself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Genetic programming aspect of this is that the system described above is restarted with different "low level" parameters like number of neurons in a layer and in general topology of the network. To start each new round, best performing topologies are taken as a basis for the new generation.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-2186606752697288315?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fjBEjjddWIwc94JB-BTmH6HYI4E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fjBEjjddWIwc94JB-BTmH6HYI4E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fjBEjjddWIwc94JB-BTmH6HYI4E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fjBEjjddWIwc94JB-BTmH6HYI4E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/NaZs2O-n2jA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/2186606752697288315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/2186606752697288315?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/NaZs2O-n2jA/next-big-idea.html" title="Next Big Idea" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2011/10/next-big-idea.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYNSXo6eip7ImA9WhdaF0s.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-3267474051230841350</id><published>2011-10-27T22:16:00.000-04:00</published><updated>2011-10-27T22:16:38.412-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-27T22:16:38.412-04:00</app:edited><title>Instant in Chrome</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;Google recently released Instant for Omnibox in Chrome. This is interesting from a web application developer point of view. Here is why.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;You can now enable it in Chrome's basic preferences screen. Checkbox is called "&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-serif; font-size: 15px;"&gt;Instant for faster searching and browsing&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;". Read more about it here:&amp;nbsp;&lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=177873"&gt;http://www.google.com/support/chrome/bin/answer.py?answer=177873&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;When you start typing into Omnibox (URL text field in Chrome), it is generating suggestions trying to guess what you are typing. If you started typing a URL, it will suggest URLs from your browsing history and from search engine results.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;When suggestion is a URL, it will actually make a GET request on that URL. And when you are typing up a URL that it doesn't know how to finish - it will hit the URL you typed up so far.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;Useful feature - it makes your page come up a little faster and when you do this dozens times a day - chrome feels more pleasant to use compared to other browsers.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;Depending on how fast and accurate you are typing, it can make from a few to hundreds of GET requests.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;And here I started thinking about how many examples I know when web application developers "break HTTP protocol agreement" by implementing some action to be triggered by a GET request.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;Just at work, I have a few processes that get started by a GET request on certain URL. That processor gets triggered multiple times before I am done typing the URL into Omnibox!&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;I am sure any web application developer can think of a few examples where undesired things would happen in similar scenario.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;When this happens, you can't blame Google for relying on HTTP protocol specification. Developer is to blame :)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: xx-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-3267474051230841350?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OpbX5G6MdXwzdOHD0xGxsC86nwE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OpbX5G6MdXwzdOHD0xGxsC86nwE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OpbX5G6MdXwzdOHD0xGxsC86nwE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OpbX5G6MdXwzdOHD0xGxsC86nwE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/mPovRN24tQM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/3267474051230841350?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/3267474051230841350?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/mPovRN24tQM/instant-in-chrome.html" title="Instant in Chrome" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2011/10/instant-in-chrome.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8FRHY6eCp7ImA9WhZVEU8.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-6304435476290563295</id><published>2011-05-23T01:33:00.000-04:00</published><updated>2011-05-23T01:33:35.810-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T01:33:35.810-04:00</app:edited><title>Solr/Lucene Conference</title><content type="html">I am at &lt;a href="http://lucenerevolution.com/"&gt;Lucene Revolution&lt;/a&gt; conference in San Francisco this week: May 23rd-26th, 2011.&lt;br /&gt;
For me this is all about Solr, best practices and the questions that I have for Solr developers.&lt;br /&gt;
&lt;a href="http://lucene.apache.org/solr/"&gt;Solr&lt;/a&gt; is the most popular open source search engine implementation.&lt;br /&gt;
&lt;br /&gt;
I work for NameMedia, Inc. and we sell Internet domain names. There is a decent size inventory of domains available for sale and quite a number of partners who sell domains from our inventory.&lt;br /&gt;
Lots of interesting challenges that I have to get involved with: relevancy, performance, high availability, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-6304435476290563295?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-S2xGp2YROOGSVaqdnlnSDtkoH4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-S2xGp2YROOGSVaqdnlnSDtkoH4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-S2xGp2YROOGSVaqdnlnSDtkoH4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-S2xGp2YROOGSVaqdnlnSDtkoH4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/Tj08qRi7lgY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/6304435476290563295?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/6304435476290563295?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/Tj08qRi7lgY/solrlucene-conference.html" title="Solr/Lucene Conference" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2011/05/solrlucene-conference.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEARX07cSp7ImA9Wx9bFE8.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-795832079701264533</id><published>2011-02-22T21:20:00.000-05:00</published><updated>2011-02-22T21:20:44.309-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-22T21:20:44.309-05:00</app:edited><title>adb startup script for Ubuntu</title><content type="html">&lt;div&gt;This is for Android developers, who use Ubuntu as their development environment.&lt;/div&gt;I got tired of starting &lt;b&gt;adb&lt;/b&gt; daemon several times a day. To fix that I just stored the following script at /etc/init/adb.conf&lt;div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;div&gt;# atbd - android debug bridge daemon&lt;/div&gt;&lt;div&gt;#&lt;/div&gt;&lt;div&gt;# adb is versatile tool lets you manage the state of an emulator instance or Android-powered device.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;description &amp;nbsp; &amp;nbsp; "android debug bridge"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;start on runlevel [2345]&lt;/div&gt;&lt;div&gt;stop on runlevel [!2345]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;expect fork&lt;/div&gt;&lt;div&gt;respawn&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;exec adb start-server&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Now &lt;b&gt;adb&lt;/b&gt; service is always ready for me when I need it. I can connect my Android phone and run this to verify:&lt;/div&gt;&lt;blockquote&gt;adb devices&amp;nbsp;&lt;/blockquote&gt;&lt;div&gt;You can also create a symlink for compatibility with service command:&lt;/div&gt;&lt;blockquote&gt;ln -s&amp;nbsp;/lib/init/upstart-job /etc/init.d/adb&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-795832079701264533?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GnaPs6KVDRLb9sETrWR3Qaj-BnU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GnaPs6KVDRLb9sETrWR3Qaj-BnU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GnaPs6KVDRLb9sETrWR3Qaj-BnU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GnaPs6KVDRLb9sETrWR3Qaj-BnU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/J6fZJxoft5c" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/795832079701264533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/795832079701264533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/J6fZJxoft5c/adb-startup-script-for-ubuntu.html" title="adb startup script for Ubuntu" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2011/02/adb-startup-script-for-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QCQ3w_cCp7ImA9Wx9UF0U.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-1902972948494035617</id><published>2011-02-15T12:02:00.000-05:00</published><updated>2011-02-15T12:02:42.248-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-15T12:02:42.248-05:00</app:edited><title>Tethering</title><content type="html">Tethering with mobile phone is when you connect some computer or mobile device to your phone in order to use your phone's data connectivity and access Internet. See more detailed definition of &lt;a href="http://en.wikipedia.org/wiki/Tethering"&gt;Tethering here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Not everybody realizes that tethering usually costs additional $15-25 per month on top of your mobile data plan, even if your mobile data plan is unlimited! It is true for most Android devices and it is always true for Apple iPhone.&lt;br /&gt;
&lt;br /&gt;
So essentially if you purchase a phone from your cellular carrier and use tethering, it will cost you extra money each month. You pay for your Internet connectivity once and then you pay one more time for the same data that you just paid for, if you want to be able to use it on another device.&lt;br /&gt;
&lt;br /&gt;
It is also very interesting that when you purchase a &lt;a href="http://www.google.com/phone/detail/nexus-s"&gt;Nexus S&lt;/a&gt; device, it's operating system has not been customized/damaged by the carrier and thus there is no need to pay for your data the second time! And this is perfectly legal actually!&lt;br /&gt;
While using the same exact voice and data plans, on one phone tethering will cost you money and on another phone it is free!&lt;br /&gt;
&lt;br /&gt;
Another way to avoid this racket is to root your device and install custom ROM on it.&lt;br /&gt;
A very popular custom ROM is called &lt;a href="http://www.cyanogenmod.com/"&gt;CyanogenMod&lt;/a&gt;. I recommend it if they support your Android device. Just be careful about using nightly builds and otherwise untested versions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-1902972948494035617?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m9l-qvM-SHJo3L6-svZMLOzmiWI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m9l-qvM-SHJo3L6-svZMLOzmiWI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/m9l-qvM-SHJo3L6-svZMLOzmiWI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m9l-qvM-SHJo3L6-svZMLOzmiWI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/goj2ARoBO2w" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1902972948494035617?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1902972948494035617?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/goj2ARoBO2w/tethering.html" title="Tethering" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2011/02/tethering.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MQng-cSp7ImA9Wx9UEEk.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-5196169695869944332</id><published>2011-02-06T21:46:00.003-05:00</published><updated>2011-02-06T22:23:03.659-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-06T22:23:03.659-05:00</app:edited><title>Skype is Terrible</title><content type="html">&lt;div&gt;Here goes another rant of mine.&lt;br /&gt;
&lt;br /&gt;
Skype uses proprietory protocol and don't allow for easy integration with their network. I imagine one has to pay alot of money to be able to integrate.&lt;br /&gt;
&lt;br /&gt;
Skype cuts stupid deals with american cell phone carriers, such as the one with Verizon Wireless, which prohibited ability to make calls over 3G when you are in USA. I am talking about Skype Android application.&lt;br /&gt;
&lt;br /&gt;
They have terrible support. I once was overcharged by them while buying call out credit years ego, could't reach any support whatsoever, had to dispute transaction through the bank and Skype ended up blocking my account from using paid services.&lt;br /&gt;
I recently asked them to unblock me. During 3 messages back and forth - they wouldn't even read my messages. I was getting standard respose for the case of blocked account asking for credit card information from the last transaction. After several messages they still would not realize that it is stupid to ask for credit card that I used to have 5 years ago, because I don't have it any more.&lt;br /&gt;
The only solution they had for me was to abandon account and create a new one!&lt;br /&gt;
&lt;br /&gt;
There is no logical explation for these stupid policies regarding blocking and unblocking accounts.&lt;br /&gt;
&lt;br /&gt;
One more evidence of how screwed up of a company Skype is - their recent global network down time for about 2 days:&amp;nbsp;&lt;a href="http://blogs.wsj.com/digits/2010/12/22/skype-down-for-millions-of-users/"&gt;http://blogs.wsj.com/digits/2010/12/22/skype-down-for-millions-of-users/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I am really looking for SIP based alternatives now. There is actually quite a few out there. Looking for one with decent features and support.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-5196169695869944332?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1h1QUC1KL7KwA3X-OIYrbE18fa8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1h1QUC1KL7KwA3X-OIYrbE18fa8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1h1QUC1KL7KwA3X-OIYrbE18fa8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1h1QUC1KL7KwA3X-OIYrbE18fa8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/lGFEchLHQG8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/5196169695869944332?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/5196169695869944332?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/lGFEchLHQG8/skype-is-terrible.html" title="Skype is Terrible" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2011/02/skype-is-terrible.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYCQH0zcSp7ImA9Wx9VGE4.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-8126887567493784931</id><published>2011-02-04T10:26:00.000-05:00</published><updated>2011-02-04T10:26:01.389-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-04T10:26:01.389-05:00</app:edited><title>Google Talk Question</title><content type="html">Why don't we already have mobile applications that allow us to use GTalk to do voice and video calls?&lt;br /&gt;
Protocol is open and there are libraries that implement it: &lt;a href="http://code.google.com/apis/talk/call_signaling.html"&gt;http://code.google.com/apis/talk/call_signaling.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
So what's the problem?&lt;br /&gt;
&lt;br /&gt;
Not sure if Apple will ever allow this as iPhone application, but Google would definitely allow it on Android.&lt;br /&gt;
There is definitely a great need for voice and video communication. Existing applications are either proprietary or don't integrate into a popular network. People want a cross-platform alternative to &lt;a href="http://en.wikipedia.org/wiki/Facetime"&gt;FaceTime&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Does anybody know why we don't have such alternative that would integrate into GTalk network?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-8126887567493784931?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Lo_8BvZ6kzBt5UvLAoreQHSHDCg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Lo_8BvZ6kzBt5UvLAoreQHSHDCg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Lo_8BvZ6kzBt5UvLAoreQHSHDCg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Lo_8BvZ6kzBt5UvLAoreQHSHDCg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/XNT-cvgt-OM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/8126887567493784931?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/8126887567493784931?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/XNT-cvgt-OM/google-talk-question.html" title="Google Talk Question" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2011/02/google-talk-question.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IGQ3c6fyp7ImA9Wx9VEUQ.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-1393809516586550480</id><published>2011-01-28T01:18:00.000-05:00</published><updated>2011-01-28T01:18:42.917-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-28T01:18:42.917-05:00</app:edited><title>Social Networks</title><content type="html">I look at popular social networks right now and can't help but wonder how after quite a few years of development they are still in their infancy...&lt;br /&gt;
&lt;br /&gt;
The main characteristics of any popular social network today are:&lt;br /&gt;
- privacy issues &lt;br /&gt;
- pain in the neck or sometimes impossible to close your account&lt;br /&gt;
- overwhelming with commercials&lt;br /&gt;
- every one of them creates yet another messaging and instant messaging systems, as if we don't have enough alternatives for email and chat&lt;br /&gt;
- all your data is locked in their proprietary system, not even searchable by a search engine&lt;br /&gt;
&lt;br /&gt;
Hopefully some day social networks will need to be competitive. I would like them to focus on user experience much better.&lt;br /&gt;
I only want to see things that I care about and not necessary what each of my connections ate tonight.&lt;br /&gt;
Doesn't everybody feel the same?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-1393809516586550480?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/drl15bfedFTfhnEBPJmOZfR1MBs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/drl15bfedFTfhnEBPJmOZfR1MBs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/drl15bfedFTfhnEBPJmOZfR1MBs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/drl15bfedFTfhnEBPJmOZfR1MBs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/X4xSFyxsjgo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1393809516586550480?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1393809516586550480?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/X4xSFyxsjgo/social-networks.html" title="Social Networks" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2011/01/social-networks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEABRHwyeyp7ImA9Wx9RGEw.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-1922219988258148046</id><published>2010-12-19T21:36:00.001-05:00</published><updated>2010-12-19T21:39:15.293-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-19T21:39:15.293-05:00</app:edited><title>Nexus S on AT&amp;T</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="144" src="http://1.bp.blogspot.com/_5e-eQD2dOPk/TQ7A4nsS_pI/AAAAAAAABUs/5qf4R-_qXIw/s400/front.jpg" width="75" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"/&gt;&lt;/div&gt;One dumb BestBuy employee was trying to convince me that Nexus S will work on AT&amp;amp;T network just as well as on T-Mobile.&lt;br /&gt;
He kept insisting that 3G will work on AT&amp;amp;T with Nexus S.&lt;br /&gt;
&lt;br /&gt;
AT&amp;amp;T uses 850 MHz and 1900 MHz frequency bands, which this phone doesn't support.&lt;br /&gt;
It will only be able to use 3G on T-Mobile in US.&lt;br /&gt;
There probably are carriers in Europe that talk on the same frequencies as this phone does.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-1922219988258148046?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7Mm3mvuTvHPRZaMe15T8HznwCBE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7Mm3mvuTvHPRZaMe15T8HznwCBE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7Mm3mvuTvHPRZaMe15T8HznwCBE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7Mm3mvuTvHPRZaMe15T8HznwCBE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/xEwCG-N5tBo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1922219988258148046?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1922219988258148046?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/xEwCG-N5tBo/nexus-s-on-at.html" title="Nexus S on AT&amp;T" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_5e-eQD2dOPk/TQ7A4nsS_pI/AAAAAAAABUs/5qf4R-_qXIw/s72-c/front.jpg" height="72" width="72" /><feedburner:origLink>http://javathings.blogspot.com/2010/12/nexus-s-on-at.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EAR3Y5eip7ImA9Wx5WFUw.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-5175120764342359475</id><published>2010-09-26T11:40:00.000-04:00</published><updated>2010-09-26T11:40:46.822-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-26T11:40:46.822-04:00</app:edited><title>Pre-ordered T-Mobile G2</title><content type="html">The time has come to swap my old G1 for the new G2.&lt;br /&gt;
Pre-orders for G2 started a couple of days ago, so I rushed to order one for myself.&lt;br /&gt;
&lt;br /&gt;
The specs look very &amp;nbsp;nice:&amp;nbsp;&lt;a href="http://g2.t-mobile.com/"&gt;http://g2.t-mobile.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The only thing that might be a concern is the fact that the processor runs at 800Mhz rather than 1000Mhz. But since this phone has a dedicated graphical processor, unlike other phones people compare it to, difference in clock frequency should not be noticeable in most applications. In fact benchmarks show that&amp;nbsp;&lt;a href="http://www.fonearena.com/blog/23442/t-mobile-g2-benchmark-result-leave-nexus-one-behind.html"&gt;G2 is faster than Nexus One&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I really hope G2 lives to my expectations.&lt;br /&gt;
Will send a review after I get my hands on it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-5175120764342359475?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ca4TY9mhtU449YsO8eSIvlkr9oI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ca4TY9mhtU449YsO8eSIvlkr9oI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ca4TY9mhtU449YsO8eSIvlkr9oI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ca4TY9mhtU449YsO8eSIvlkr9oI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/zgN0Xo9qrWg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/5175120764342359475?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/5175120764342359475?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/zgN0Xo9qrWg/pre-ordered-t-mobile-g2.html" title="Pre-ordered T-Mobile G2" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2010/09/pre-ordered-t-mobile-g2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ECQ387fSp7ImA9Wx5XFEQ.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-1962661765285503663</id><published>2010-09-14T15:13:00.002-04:00</published><updated>2010-09-14T15:14:22.105-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-14T15:14:22.105-04:00</app:edited><title>Linux: update-alternatives vs path environment variable</title><content type="html">More often then not, when you install some new application, instructions would suggest you should add something to path environment variable so that you could run the newly installed application from anywhere. Instructions would tell you to edit &lt;b&gt;.bashrc&lt;/b&gt;, &lt;b&gt;.profile&lt;/b&gt; file or something similar to that.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;There is a better way to add new application to path. In many cases it makes much more sense to use Linux alternatives system instead.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;E.g. I installed Gradle from &lt;a href="http://gradle.org/"&gt;gradle.org&lt;/a&gt; and I unpacked it under /home/alexei/tools/gradle/&lt;/div&gt;&lt;div&gt;Instead of adding /home/alexei/tools/gradle/bin to PATH, try this:&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;blockquote&gt;sudo update-alternatives --install /usr/bin/gradle gradle /home/alexei/tools/gradle/bin/gradle 10&lt;/blockquote&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;Just use the actual path where it is installed in your environment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;What this does is creates a symbolic link under /usr/bin, which is already in PATH.&amp;nbsp;It can be create in another location if you want, you just want it to already be in PATH.&lt;/div&gt;&lt;div&gt;The link points at the command or script that you like to be runnable without specifying the path.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;If there is more than 1 script/command in this application, use --slave option and specify all of them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;If there is ever a new version of that application or a completely new application performing the same functions, you have an option of linking with the same name (second parameter, "gradle" in my example) and you will be able to switch between those with ease and if you have more than one script/command in that application, they will all switch synchronously. This way anything that relies on this application and knows it by some name will keep working as before.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-1962661765285503663?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B_AuGbXVlyf82EOPNFzmArlwNbM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B_AuGbXVlyf82EOPNFzmArlwNbM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B_AuGbXVlyf82EOPNFzmArlwNbM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B_AuGbXVlyf82EOPNFzmArlwNbM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/OfgESeAX8zk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1962661765285503663?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1962661765285503663?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/OfgESeAX8zk/linux-update-alternatives-vs-path.html" title="Linux: update-alternatives vs path environment variable" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2010/09/linux-update-alternatives-vs-path.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8NQn47eCp7ImA9Wx5RFUU.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-6332780225274241377</id><published>2010-08-23T00:50:00.004-04:00</published><updated>2010-08-23T14:41:33.000-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-23T14:41:33.000-04:00</app:edited><title>Driver Patch for Touchpad</title><content type="html">I am running Ubuntu 10.04 Lucid on Dell Precision M4500.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;While setting it up, I discovered that Touchpad is missing scrolling. Googling the issue revealed that this laptop has new Alps touchpad device and it is incorrectly handled by the old driver.&lt;/div&gt;&lt;div&gt;There is also a patch to make it work. I tried to apply the patch, but I guess it wasn't exactly the same source version that I was trying to patch, so I had to tweak it just a little bit.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I currently use Linux kernel 2.6.32-24. Not sure how this would work on another version of the kernel.&lt;/div&gt;&lt;div&gt;Assuming you download and put the &lt;a href="http://upload.vidmich.com/alps.patch"&gt;patch&lt;/a&gt; to /tmp/alps.patch:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;apt-get install build-essential linux-source-2.6.32&lt;br /&gt;
cd /usr/src/linux-source-2.6.32&lt;br /&gt;
patch -p2 &amp;lt; /tmp/alps.patch&lt;br /&gt;
cd drivers/input/mouse/&lt;br /&gt;
sudo make -C /lib/modules/`uname -r`/build M=`pwd`&lt;br /&gt;
cd /lib/modules/`uname -r`/kernel/drivers/input/mouse/&lt;br /&gt;
&lt;i&gt;&lt;b&gt;backup and remove all files from that directory.&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
cp /usr/src/linux-source-2.6.32/drivers/input/mouse/*.ko .&lt;br /&gt;
depmod -a&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Reboot.&lt;/b&gt;&lt;/i&gt;&lt;/blockquote&gt;Scrolling started to work after reboot.&amp;nbsp;&lt;/div&gt;&lt;div&gt;This touchpad device also supports multi-touch, but that would need a lot more drastic changes to the driver. As of time of this writing the new protocol has not been decoded completely.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;Credit goes to:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Original article with explanation of the issue and the patch:&lt;a href="https://bugzilla.kernel.org/show_bug.cgi?id=14660"&gt; https://bugzilla.kernel.org/show_bug.cgi?id=14660&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Original patch that I slightly modified:&amp;nbsp;&lt;a href="https://patchwork.kernel.org/patch/118834/"&gt;https://patchwork.kernel.org/patch/118834/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Another article about a similar issue, helped me understand how to build and install drivers: &lt;a href="http://mitchtowner.net/?p=840"&gt;http://mitchtowner.net/?p=840&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-6332780225274241377?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z_3m9_3K0AEmGodRWtS8vaTUJpc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z_3m9_3K0AEmGodRWtS8vaTUJpc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z_3m9_3K0AEmGodRWtS8vaTUJpc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z_3m9_3K0AEmGodRWtS8vaTUJpc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/82QFKYB7y6I" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/6332780225274241377?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/6332780225274241377?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/82QFKYB7y6I/driver-patch-for-touchpad.html" title="Driver Patch for Touchpad" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2010/08/driver-patch-for-touchpad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IMQ384fSp7ImA9WxNbFUs.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-517662294157054257</id><published>2009-11-18T11:26:00.000-05:00</published><updated>2009-11-18T11:26:22.135-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-18T11:26:22.135-05:00</app:edited><title>Too many open files in IntelliJ IDEA</title><content type="html">&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;IntelliJ IDEA 9 beta wasn't usable on my Ubuntu 9.10 laptop. Loading any decent size project would blow up with a number of errors caused by "Too many open files" exception.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;The problem is that default Ubuntu system limits the number of simultaneously open files by any application to 1024. And apparently IDEA wants to open more than that.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;Not sure if that's a bug in their code or if they need to keep them open.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;I did two things to resolve this issue:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Arial; font-size: 13px;"&gt;Opened [idea]&lt;idea&gt;&lt;i&gt;/bin/idea.properties&lt;/i&gt; file and switched&amp;nbsp;&lt;b&gt;idea.jars.nocopy&lt;/b&gt; to &lt;b&gt;true&lt;/b&gt;.&lt;br /&gt;
This actually might not be necessary to fix the issue, but it definitely lowers the number of open files. It does work with this setting after all, so I thought, why don't I leave it like this.&lt;/idea&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial; font-size: 13px;"&gt;What actually helped is increasing the maximum number of open files limitation in Ubuntu.&lt;br /&gt;
Open&amp;nbsp;&lt;i&gt;/etc/security/limits.conf&lt;/i&gt; for editing as a root user and add the following line:&lt;br /&gt;
&lt;b&gt;* - nofile 4096&lt;br /&gt;
&lt;span style="font-weight: normal;"&gt;Then you have to restart Ubuntu for those changes to take effect. Logout would probably do the trick too.&lt;br /&gt;
A little more info about this here:&amp;nbsp;&lt;a href="http://tech-torch.blogspot.com/2009/07/linux-ubuntu-tomcat-too-many-open-files.html" target="_blank"&gt;http://tech-torch.blogspot.com/2009/07/linux-ubuntu-tomcat-too-many-open-files.html&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;Now the maximum number of open files is 4096 and IDEA is happy with that limit.&lt;br /&gt;
&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-517662294157054257?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kaP4NOe1R8JeXVe2gllBaoIQ8ys/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kaP4NOe1R8JeXVe2gllBaoIQ8ys/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kaP4NOe1R8JeXVe2gllBaoIQ8ys/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kaP4NOe1R8JeXVe2gllBaoIQ8ys/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/PQrAPGhkCKA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/517662294157054257?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/517662294157054257?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/PQrAPGhkCKA/too-many-open-files-in-intellij-idea.html" title="Too many open files in IntelliJ IDEA" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcGQX88cSp7ImA9WxNbE00.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-7790421770871914216</id><published>2009-11-15T11:20:00.000-05:00</published><updated>2009-11-15T11:20:20.179-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-15T11:20:20.179-05:00</app:edited><title>Deactivating Compromise</title><content type="html">Have you been to &lt;a href="http://phones.verizonwireless.com/motorola/droid/" target="_blank"&gt;Droid's site&lt;/a&gt; at Verizon Wireless?&lt;br /&gt;
I think it's one of the best introductions for a new phone. I love the "Deactivating compromise" slogan that they use.&lt;br /&gt;
&lt;br /&gt;
Droid is an awesome phone based on the feature list and what people are saying. It's definitely the best Android phone yet. The first phone with Android 2.0, turn-by-turn navigation, etc. - make this phone stand out from the crowd right now.&lt;br /&gt;
&lt;br /&gt;
I'd like to get one of those for myself, but I am not going to, until Droid, or something better, will come to a different wireless carrier.&lt;br /&gt;
&lt;br /&gt;
I used to have a Verizon Wireless phone not so long ago and I hated the fact that they crippled the phone in order to make customers use their paid applications and services. They would even limit your ability to open arbitrary web pages, so that you would have to stay within their portal site and bring them a few more bucks in advertisement revenue. I am so pissed at them, that even if they don't do the same kind of things with Droid, I still won't switch to them.&lt;br /&gt;
&lt;br /&gt;
Coverage was almost absent where I live, although it's quite close to a major city.&lt;br /&gt;
&lt;br /&gt;
One more reason not to switch is that their network is using CDMA technology as opposing to GSM and if I travel anywhere outside of USA, I will likely to be stranded without coverage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-7790421770871914216?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sc4A_Q1UmvZVTi-ROIxDMazFWAQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sc4A_Q1UmvZVTi-ROIxDMazFWAQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sc4A_Q1UmvZVTi-ROIxDMazFWAQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sc4A_Q1UmvZVTi-ROIxDMazFWAQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/geP1FxD4YN8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/7790421770871914216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/7790421770871914216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/geP1FxD4YN8/deactivating-compromise.html" title="Deactivating Compromise" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2009/11/deactivating-compromise.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ECR3c-eSp7ImA9WxNUFk8.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-1479561496462382591</id><published>2009-11-07T16:34:00.000-05:00</published><updated>2009-11-07T16:34:26.951-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T16:34:26.951-05:00</app:edited><title>Tunneling via SSH</title><content type="html">If you have a service running on a remote server, which you don't want to expose through the firewall, but you have SSH access to the same server (or may be a different server, but inside the same firewall)...&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
- mysql server is running on port 3306 on mysql.example.com&lt;br /&gt;
- and you can SSH into that server with username 'joe'.&lt;br /&gt;
&lt;br /&gt;
Here is what you can do to securely access your mysql server&lt;br /&gt;
&lt;blockquote&gt;&lt;b&gt;ssh -fqN -L 3306:localhost:3306 joe@mysql.example.com&lt;/b&gt;&lt;br /&gt;
&lt;/blockquote&gt;This will start background process, listening on port 3306 and proxying all requests to SSH server where you logged in and sending them to specified host - localhost in my example.&lt;br /&gt;
&lt;br /&gt;
On Windows, you can either use ssh client from &lt;a href="http://cygwin.com/" target="_blank"&gt;CygWin&lt;/a&gt; the same way as if you were on Linux or figure out how to specify similar options using another SSH client, available on Windows.&lt;br /&gt;
&lt;br /&gt;
When your SSH server (ssh.example.com) - is not the same host as where your service is running (mysql.example.com), then you would do like this:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;ssh -fqN -L 3306:mysql.example.com:3306 joe@ssh.example.com&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/blockquote&gt;&amp;nbsp;In this case you need to be sure that mysql.example.com is reachable from ssh.example.com and MySQL server is configured to accept such connections.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-1479561496462382591?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/s_KWpBLQSezAeAgR4VRgNaJZqzM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s_KWpBLQSezAeAgR4VRgNaJZqzM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/s_KWpBLQSezAeAgR4VRgNaJZqzM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s_KWpBLQSezAeAgR4VRgNaJZqzM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/9XLLoJeXWts" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1479561496462382591?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1479561496462382591?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/9XLLoJeXWts/tunneling-via-ssh.html" title="Tunneling via SSH" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><feedburner:origLink>http://javathings.blogspot.com/2009/11/tunneling-via-ssh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AAR3g5fip7ImA9WxNVGEo.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-4498046283004896586</id><published>2009-10-29T22:54:00.003-04:00</published><updated>2009-10-30T00:09:06.626-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-30T00:09:06.626-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IDE" /><category scheme="http://www.blogger.com/atom/ns#" term="code reuse" /><title>Missing Code Reuse</title><content type="html">The tools for software developers, IDEs and such, have come a long way from being a text editor!&lt;div&gt;Except for PHP support... most of PHP developers are still using notepad. But that's a different story.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Modern IDEs have great refactoring features, integration with application servers and various development kits, awesome error highlighting and completion suggestions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I like &lt;a href="http://www.jetbrains.com/idea/" target="_blank"&gt;IntelliJ IDEA&lt;/a&gt; - it's most feature reach and intuitive to me. But I am sure there are other great IDEs. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More to the point - &lt;b&gt;I haven't noticed much progress in the way of code reuse!&lt;/b&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It seems that everything else is getting better, but not our ability to take advantage of the code that you have written once, while working on another project, in another company, etc.&lt;/div&gt;&lt;div&gt;Furthermore, I would expect if one developer is willing to share his code with you, it should be super easy for you to use it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some types of code make sense as a library, so it gets packaged, published and reused by other people. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Other types of code fall out of the first category for various reasons: &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;too small to be a library, &lt;/li&gt;&lt;li&gt;not enough demand to justify spending type maintaining a library, &lt;/li&gt;&lt;li&gt;your use case is just enough different from what other people need for the library to become unusable for you, etc. &lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Developers end up writing &lt;b&gt;the same code over and over again&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I imagine it would be great to have your IDE look at what you are working on, search through some&lt;b&gt; shared index for code, matching what you are working on&lt;/b&gt; and suggest ways to finish implementation for you. It would definitely solve some of the reuse issues that we have.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A requirement would be for many developers to have their IDE &lt;b&gt;submitting the code to the same shared index&lt;/b&gt;, after stripping private information out.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's not obvious how hard it would be to build algorithm that can come up with relevant suggestions, but the benefits are great! I sure hope someone is working on this already!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-4498046283004896586?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_3kjE3YWNwQved6I8P2EqZ16510/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_3kjE3YWNwQved6I8P2EqZ16510/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_3kjE3YWNwQved6I8P2EqZ16510/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_3kjE3YWNwQved6I8P2EqZ16510/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/J4XLWAAGHyg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/4498046283004896586/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://javathings.blogspot.com/2009/10/missing-code-reuse.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/4498046283004896586?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/4498046283004896586?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/J4XLWAAGHyg/missing-code-reuse.html" title="Missing Code Reuse" /><author><name>Alexei Vidmich</name><uri>http://www.blogger.com/profile/01901027448137844382</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="27" height="32" src="http://2.bp.blogspot.com/_5e-eQD2dOPk/SupUHxmybSI/AAAAAAAAA3A/ZdYiJyYX3ok/S220/Alexei-2.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://javathings.blogspot.com/2009/10/missing-code-reuse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QDSX4-eSp7ImA9WxNVEUU.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-429631343704286960</id><published>2009-10-22T00:07:00.002-04:00</published><updated>2009-10-22T01:29:38.051-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-22T01:29:38.051-04:00</app:edited><title>Google App Engine Issues</title><content type="html">I tried &lt;a href="http://appengine.google.com/"&gt;App Engine&lt;/a&gt; for a while.&lt;br /&gt;&lt;br /&gt;Before I began, I knew about most of the constrains it imposes: no thread spanning, no disk access, JDO for persistence (instead of Hibernate), limited network access, no access to root classloader, etc.&lt;br /&gt;&lt;br /&gt;Later I found more.&lt;br /&gt;The way application works in local development environment (provided by App Engine SDK) is not even close to the way it works in the App Engine cloud. There are far more exceptions being thrown when running in the cloud. &lt;br /&gt;Local environment doesn't have same classloader limitations as in the cloud.&lt;br /&gt;Cloud fails to do certain persistence transactions that are working fine in local environment. That might have been a bug in that particular version of App Engine SDK.&lt;br /&gt;&lt;br /&gt;If request processing takes too long, it times out and exception is thrown. Timeout is at about 20 seconds.&lt;br /&gt;Normally persistence API is not too fast. E.g. 400 look ups by primary key take about 15 seconds or more. But then it would slow down from time to time and the same request processing would timeout.&lt;br /&gt;&lt;br /&gt;Overall it doesn't seem to be ready for anything like production server.&lt;br /&gt;&lt;br /&gt;Having said that, I still like the design and how easy it is to deploy into cloud. &lt;br /&gt;Also I like the fact that it is completely free when used within reasonable limits. And those limits are pretty high. They estimate that an average site hosted there would handle 5 million page views.&lt;br /&gt;&lt;br /&gt;I think &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt; cloud provides superior reliability. &lt;br /&gt;But in order to be able to scale automatically or deploy as easy as to App Engine, it needs to be coupled with some cloud management software. I tried &lt;a href="http://www.cloudfoundry.com/"&gt;Cloud Foundry&lt;/a&gt;, but it would keep crashing without explaining the reasons. I guess Cloud Foundry is not ready for prime time yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-429631343704286960?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KESMFWFl2BDsMhceCyobL7xF3M0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KESMFWFl2BDsMhceCyobL7xF3M0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KESMFWFl2BDsMhceCyobL7xF3M0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KESMFWFl2BDsMhceCyobL7xF3M0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/cUYLAQBb6Ao" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/429631343704286960/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://javathings.blogspot.com/2009/10/google-app-engine-issues.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/429631343704286960?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/429631343704286960?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/cUYLAQBb6Ao/google-app-engine-issues.html" title="Google App Engine Issues" /><author><name>Alexei Vidmich</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://alexei.vidmich.googlepages.com/P8310012-large.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://javathings.blogspot.com/2009/10/google-app-engine-issues.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4CQXw9fip7ImA9WxNVEEs.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-2483594719703785149</id><published>2009-10-20T15:20:00.002-04:00</published><updated>2009-10-20T15:29:20.266-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-20T15:29:20.266-04:00</app:edited><title>IntelliJ IDEA Went Open Source</title><content type="html">My favourite Java IDE &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt; just spun a community (open source) version.&lt;br /&gt;&lt;br /&gt;Just judging by the feature set, it actually has almost everything that was important in IDEA. Check comparison matrix for yourself &lt;a href="http://www.jetbrains.com/idea/nextversion/editions_comparison_matrix.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I believe JetBrains has done a great move - beneficiary for themselves and for community.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-2483594719703785149?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/woKlTlWBvjYjNs3CnNwk6IQYFyE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/woKlTlWBvjYjNs3CnNwk6IQYFyE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/woKlTlWBvjYjNs3CnNwk6IQYFyE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/woKlTlWBvjYjNs3CnNwk6IQYFyE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/a6Nw-r_2avk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/2483594719703785149/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://javathings.blogspot.com/2009/10/intellij-idea-went-open-source.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/2483594719703785149?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/2483594719703785149?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/a6Nw-r_2avk/intellij-idea-went-open-source.html" title="IntelliJ IDEA Went Open Source" /><author><name>Alexei Vidmich</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://alexei.vidmich.googlepages.com/P8310012-large.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://javathings.blogspot.com/2009/10/intellij-idea-went-open-source.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04DRXo-fip7ImA9WxNRFkQ.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-2712813894064555311</id><published>2009-09-11T14:25:00.003-04:00</published><updated>2009-09-11T15:06:14.456-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-11T15:06:14.456-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ant" /><category scheme="http://www.blogger.com/atom/ns#" term="build" /><category scheme="http://www.blogger.com/atom/ns#" term="DSL" /><category scheme="http://www.blogger.com/atom/ns#" term="Maven" /><category scheme="http://www.blogger.com/atom/ns#" term="Gradle" /><title>Gradle Review</title><content type="html">I have been using Gradle for a week now and wanted to share my impressions about it.&lt;br /&gt;If I got something wrong, let me know and I'll update the post.&lt;br /&gt;&lt;br /&gt;Gradle [&lt;a href="http://www.gradle.org"&gt;www.gradle.org&lt;/a&gt;] is a fairly new build scripting language. It is written in Groovy and Java. &lt;br /&gt;&lt;br /&gt;Java is used to implement some heavy lifting under the hood as well as create tight integration with &lt;a href="http://ant.apache.org/"&gt;Ant&lt;/a&gt; and &lt;a href="http://ant.apache.org/ivy/"&gt;Ivy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Groovy is one of the languages that allows you to define so called &lt;a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html"&gt;Domain Specific Language&lt;/a&gt; so that you could use it to define dependencies, properties and algorithms for building your projects. Idea behind a DSL is to hide unnecessary complexity of the platform and provide you just what you need so that your configuration/script files would be as condensed and precise as possible.&lt;br /&gt;&lt;br /&gt;The result is interesting, they managed to deliver the same flexibility and power that you get from Ant, but Gradle also provides you some features that Maven has - declarative dependencies for external libraries and between your modules.&lt;br /&gt;&lt;br /&gt;So basically it's like bringing the good stuff from Ant and Maven as one build system.&lt;br /&gt;But that is not all. In addition to this, Gradle is more flexible than Maven when it comes to dependencies. You have better control over which dependencies are transitive and which are not, you can fix POM.xml issues such as if someone declared a runtime dependency instead of compile time dependency in one of the libraries that you are trying to use. I think you also can have libraries that consist of multiple artifacts.&lt;br /&gt;&lt;br /&gt;Some people don't like Ant because it's not a scripting language, but it's trying to function like one because of the nature of things that are expected from a build system. Those people will definitely like Gradle.&lt;br /&gt;&lt;br /&gt;Some people don't like Maven because it's too restrictive and you have to spend a lot of time fighting with it if your needs are a little different than what the most standard build is. This is definitely not a problem with Gradle.&lt;br /&gt;&lt;br /&gt;Gradle's week moments for me were:&lt;br /&gt;- Gradle is not as mature as Ant or Maven. These guys have been around for many years. Hopefully Gradle will get there soon. I am talking about level of logging it gives - I don't think the dials to control that doesn't give you enough flexibility - I often needed to restart my build with different parameters to see what went wrong during the build.&lt;br /&gt;- Lack of integration with IDEs. E.g. IntelliJ IDEA supports Maven POM files and Ant build files almost as well as native project descriptors (allows importing them and can generate some of them, also syntax highlighting and suggestions) - I understand that this is just because Gradle hasn't been around long enough, but I'd like to see that improving soon.&lt;br /&gt;- I'd like to see more documentation and examples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-2712813894064555311?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_Dqp3IM65_vGFDIgZ4g2kRQlfKQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Dqp3IM65_vGFDIgZ4g2kRQlfKQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_Dqp3IM65_vGFDIgZ4g2kRQlfKQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Dqp3IM65_vGFDIgZ4g2kRQlfKQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/E71ae2sFBIU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/2712813894064555311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://javathings.blogspot.com/2009/09/gradle-review.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/2712813894064555311?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/2712813894064555311?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/E71ae2sFBIU/gradle-review.html" title="Gradle Review" /><author><name>Alexei Vidmich</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://alexei.vidmich.googlepages.com/P8310012-large.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://javathings.blogspot.com/2009/09/gradle-review.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEMQXw5fCp7ImA9WxNTE0Q.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-6814101483008889879</id><published>2009-08-15T23:16:00.002-04:00</published><updated>2009-08-15T23:34:40.224-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-15T23:34:40.224-04:00</app:edited><title>Email Re-invented - Google Wave</title><content type="html">It would be a huge understatement to say that the next big thing from Google (called Google Wave) is just re-invented E-mail, re-designed and done better this time. &lt;br /&gt;&lt;br /&gt;Google Wave is much more than that. It seem to cover functionality of &lt;span style="font-weight:bold;"&gt;chat, e-mail, blogs, twitter, wiki, photo sharing tool&lt;/span&gt; and other things. It's basically all-in-one communication and collaboration platform.&lt;br /&gt;Really huge number of features, helping communicate in many different ways - all working together seamlessly.&lt;br /&gt;&lt;br /&gt;And even if they wouldn't spend the time to design and build all of those features, I would be very excited still, because of the extend to which they opened this platform up to developers.&lt;br /&gt;The code is going open source and anybody can compile and run his/her own version of this platform and have it communicate with all the other instances of this product running in the Internet forming federation between each other.&lt;br /&gt;&lt;br /&gt;Developers can also build robots, which can participate in conversations hosted on the Google Wave platform.&lt;br /&gt;&lt;br /&gt;Check Google Wave presentation and sign up for an account here: &lt;a href="http://wave.google.com/"&gt;http://wave.google.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-6814101483008889879?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gSRsjwkD8lPiB9IBrfBATYYhQY0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gSRsjwkD8lPiB9IBrfBATYYhQY0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gSRsjwkD8lPiB9IBrfBATYYhQY0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gSRsjwkD8lPiB9IBrfBATYYhQY0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/HPl56BGDP8w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/6814101483008889879/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://javathings.blogspot.com/2009/08/email-re-invented-google-wave.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/6814101483008889879?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/6814101483008889879?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/HPl56BGDP8w/email-re-invented-google-wave.html" title="Email Re-invented - Google Wave" /><author><name>Alexei Vidmich</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://alexei.vidmich.googlepages.com/P8310012-large.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://javathings.blogspot.com/2009/08/email-re-invented-google-wave.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04CRH0-eyp7ImA9WxJaEE0.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-329418310029207114</id><published>2009-07-30T21:40:00.003-04:00</published><updated>2009-07-30T22:06:05.353-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-30T22:06:05.353-04:00</app:edited><title>Cache Expiration in Google App Engine Memcache</title><content type="html">Google App Engine has a nice feature called Memcache. Real easy to use it, but I found one strange thing about it. One could call it a bug, but I am not sure yet.&lt;br /&gt;Memcache can be accessed via 2 APIs: JCache Api  and  Low-level API.&lt;br /&gt;&lt;br /&gt;If you are using high-level (JCache) API and you need to set expiration time for the objects you put into cache, you would do something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  Map config = new HashMap();&lt;br /&gt;  config.put(com.google.appengine.api.memcache.stdimpl.GCacheFactory.EXPIRATION_DELTA, 60);&lt;br /&gt;  cache = cacheFactory.createCache(config);&lt;br /&gt;&lt;br /&gt;  ...&lt;br /&gt;&lt;br /&gt;  String xml = (String) cache.get(feedId);&lt;br /&gt;  if (xml == null) {&lt;br /&gt;     xml = ...;&lt;br /&gt;     cache.put(feedId, xml);&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The problem is in how Memcache behaves in this case. It works fine until expiration time after you created the cache. But after that all objects expire from the cache and you cannot add any more objects there.&lt;br /&gt;&lt;br /&gt;The way I understand it, is that configuration property EXPIRATION_DELTA which you provided when creating the cache instance, is treated as number of seconds after which the entire cache instance is expired.&lt;br /&gt;Originally I thought that expiration time for any cached object would be calculated as the time between when you add the object to cache and the time it expires.&lt;br /&gt;The way it behaves is not intuitive and frankly not very useful.&lt;br /&gt;&lt;br /&gt;The workaround is to use Low-level API for Memcache and it even supports different expiration time for different objects that you put in cache - you can optionally specify expiration time when you add objects to cache.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-329418310029207114?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QkcHV4uovK7KLJrxOK3p5jUnVFg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QkcHV4uovK7KLJrxOK3p5jUnVFg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QkcHV4uovK7KLJrxOK3p5jUnVFg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QkcHV4uovK7KLJrxOK3p5jUnVFg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/seTsTODN3Ic" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/329418310029207114/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://javathings.blogspot.com/2009/07/cache-expiration-in-google-app-engine.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/329418310029207114?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/329418310029207114?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/seTsTODN3Ic/cache-expiration-in-google-app-engine.html" title="Cache Expiration in Google App Engine Memcache" /><author><name>Alexei Vidmich</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://alexei.vidmich.googlepages.com/P8310012-large.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://javathings.blogspot.com/2009/07/cache-expiration-in-google-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04NQHYycCp7ImA9WxVaFE0.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-1758866023039832890</id><published>2009-04-10T18:03:00.003-04:00</published><updated>2009-04-10T18:19:51.898-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-10T18:19:51.898-04:00</app:edited><title>Fix for timeout on DBCP connections</title><content type="html">Depending on idle connection timeout settings of database server, idle connections in connection pool sometimes timeout.&lt;br /&gt;&lt;br /&gt;You can see exception like this if you are using DBCP for your connection pool:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure&lt;br /&gt;&lt;br /&gt;Last packet sent to the server was 7 ms ago.&lt;br /&gt; at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&lt;br /&gt; at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)&lt;br /&gt; at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)&lt;br /&gt; at java.lang.reflect.Constructor.newInstance(Constructor.java:513)&lt;br /&gt; at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)&lt;br /&gt; at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2985)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2871)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3414)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)&lt;br /&gt; at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)&lt;br /&gt; at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4874)&lt;br /&gt; at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:331)&lt;br /&gt; at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:317)&lt;br /&gt; at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:63)&lt;br /&gt; at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)&lt;br /&gt; at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:558)&lt;br /&gt; at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:374)&lt;br /&gt; at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:263)&lt;br /&gt; at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)&lt;br /&gt; at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)&lt;br /&gt; at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)&lt;br /&gt; at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)&lt;br /&gt; at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)&lt;br /&gt;Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.&lt;br /&gt; at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2431)&lt;br /&gt; at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2882)&lt;br /&gt; ... 52 more&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Simple solution is to make DBCP verify connections before giving them to the caller.&lt;br /&gt;Add the following properties to your BasicDataSource configuration:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;       &amp;lt;property name="testOnBorrow" value="true"/&amp;gt;&lt;br /&gt;       &amp;lt;property name="validationQuery" value="SELECT 1"/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-1758866023039832890?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lqGcpniPLnvuvWIJH8xHl-SYUEo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lqGcpniPLnvuvWIJH8xHl-SYUEo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lqGcpniPLnvuvWIJH8xHl-SYUEo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lqGcpniPLnvuvWIJH8xHl-SYUEo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/eGfTmDafJLE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/1758866023039832890/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://javathings.blogspot.com/2009/04/fix-for-timeout-on-dbcp-connections.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1758866023039832890?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/1758866023039832890?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/eGfTmDafJLE/fix-for-timeout-on-dbcp-connections.html" title="Fix for timeout on DBCP connections" /><author><name>Alexei Vidmich</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://alexei.vidmich.googlepages.com/P8310012-large.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://javathings.blogspot.com/2009/04/fix-for-timeout-on-dbcp-connections.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIMSX0zeip7ImA9WxVbGUw.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-837473597842453664</id><published>2009-04-05T01:09:00.002-04:00</published><updated>2009-04-05T01:49:48.382-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-05T01:49:48.382-04:00</app:edited><title>Yahoo Pipes</title><content type="html">I just discovered &lt;a href="http://pipes.yahoo.com/pipes/" target="_blank"&gt;Yahoo Pipes&lt;/a&gt; for myself.&lt;br /&gt;They basically allow users to visually create programs, which manipulate RSS data: fetch it from somewhere, merge it with something, filter it based on something... this type of things.&lt;br /&gt;&lt;br /&gt;The highlights are:&lt;br /&gt;- Visual editor for your program graph. Nodes are modules that input, transform or output RSS feeds. By connecting the nodes together and configuring declared parameters you do your programming.&lt;br /&gt;- Editor is a web application with a lot of graphics, since you need to be able to build a graph...  But it doesn't use Flash. I think it's cool.&lt;br /&gt;&lt;br /&gt;It would be a much more complete "visual programming" platform, if they could generify it and support arbitrary XML data, not just RSS.&lt;br /&gt;I want to be able to throw a bunch of modules on the screen, saying: take data here, process it like this, save it here and output data like this.&lt;br /&gt;In addition to obvious I/O modules, I would also have: XSL transformation module, rules engine, state machine, scheduler, etc.&lt;br /&gt;&lt;br /&gt;Conventional programming requires in-depth knowledge of too many things these days. Visual programming approaches could simplify it a lot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-837473597842453664?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U6IcfVUpx2HFsbTlOVUpZWfSvz0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U6IcfVUpx2HFsbTlOVUpZWfSvz0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U6IcfVUpx2HFsbTlOVUpZWfSvz0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U6IcfVUpx2HFsbTlOVUpZWfSvz0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/Gqkvap9uYog" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/837473597842453664/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://javathings.blogspot.com/2009/04/yahoo-pipes.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/837473597842453664?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/837473597842453664?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/Gqkvap9uYog/yahoo-pipes.html" title="Yahoo Pipes" /><author><name>Alexei Vidmich</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://alexei.vidmich.googlepages.com/P8310012-large.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://javathings.blogspot.com/2009/04/yahoo-pipes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4HSXwyfCp7ImA9WxVbFUg.&quot;"><id>tag:blogger.com,1999:blog-20366715.post-8874374118460751816</id><published>2009-03-31T22:17:00.002-04:00</published><updated>2009-03-31T22:28:58.294-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-31T22:28:58.294-04:00</app:edited><title>New Project Structure in GWT</title><content type="html">&lt;blockquote style="font-style: italic;"&gt;GWT 1.6 introduces a new project structure based on the standard J2EE web archive (war) format.&lt;/blockquote&gt;I am sure many developers were looking forward to the more standard and more natural project structure in GWT. We finally got it.&lt;br /&gt;&lt;br /&gt;Thank you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20366715-8874374118460751816?l=javathings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HXgnAteRwjFaQ1LRm9_wBMLzC9g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HXgnAteRwjFaQ1LRm9_wBMLzC9g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HXgnAteRwjFaQ1LRm9_wBMLzC9g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HXgnAteRwjFaQ1LRm9_wBMLzC9g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/JavaThings/~4/3zVuUk0m3kM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://javathings.blogspot.com/feeds/8874374118460751816/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://javathings.blogspot.com/2009/03/new-project-structure-in-gwt.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/8874374118460751816?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/20366715/posts/default/8874374118460751816?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/JavaThings/~3/3zVuUk0m3kM/new-project-structure-in-gwt.html" title="New Project Structure in GWT" /><author><name>Alexei Vidmich</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://alexei.vidmich.googlepages.com/P8310012-large.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://javathings.blogspot.com/2009/03/new-project-structure-in-gwt.html</feedburner:origLink></entry></feed>

