<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-18273211</id><updated>2009-11-11T21:11:47.966+02:00</updated><title type='text'>Witty Javangelist</title><subtitle type='html'>Clustering, P2P and general distributed programming gotchas</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://java.akraievoy.org/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default?start-index=26&amp;max-results=25'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>66</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18273211.post-5472585557967029820</id><published>2009-11-11T17:27:00.000+02:00</published><updated>2009-11-11T17:27:10.656+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='folklore'/><title type='text'>Use the brain, not Google</title><content type='html'>&lt;blockquote&gt;&amp;gt;&amp;gt; I searched whole web and nothing seem to give me &lt;br /&gt;
&amp;gt;&amp;gt; at least a pointer so any help will be greatly&lt;br /&gt;
&amp;gt;&amp;gt; appreciated.&lt;br /&gt;
&lt;br /&gt;
&amp;gt; For some tasks it is much more efficient to use the brain&lt;br /&gt;
&amp;gt; than Google.&lt;br /&gt;
&lt;br /&gt;
Say, have you got a URL? thebrain.com's search engine didn't match "Newton" at all. What am I missing here?&lt;/blockquote&gt;&lt;div style="text-align: right"&gt;&amp;copy; Dave Rusin; &lt;a href="http://sci.tech-archive.net/Archive/sci.math.num-analysis/2004-12/0555.html"&gt;Re: Nonlinear equations system&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-5472585557967029820?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/5472585557967029820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=5472585557967029820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/5472585557967029820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/5472585557967029820'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/11/use-brain-not-google.html' title='Use the brain, not Google'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-7920040726313710493</id><published>2009-11-11T16:07:00.003+02:00</published><updated>2009-11-11T16:11:58.180+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='7z'/><category scheme='http://www.blogger.com/atom/ns#' term='cmd'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Mercurial backup script</title><content type='html'>A simple cmd batch to clone and pack a mercurial repo. I used to run that just before logging off.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;rmdir /S /Q repo-snap&lt;br /&gt;
hg clone -U repo-work repo-snap&lt;br /&gt;
&lt;br /&gt;
7z a -t7z -mx=9 repo-snap-@stamp.7z repo-snap&lt;br /&gt;
&lt;br /&gt;
rmdir /S /Q repo-snap&lt;br /&gt;
java -jar jstamper.jar repo-snap-@stamp.7z&lt;br /&gt;
&lt;br /&gt;
shutdown -s -t 120&lt;br /&gt;
&lt;br /&gt;
pause&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
PS: jstamper.jar was a simple class which renamed file so @stamp was substed with current datestamp. Bash does that in a blink, but there's no simple way to do that in cmd.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-7920040726313710493?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/7920040726313710493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=7920040726313710493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7920040726313710493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7920040726313710493'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/11/mercurial-backup-script.html' title='Mercurial backup script'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-7558189894471855784</id><published>2009-10-03T14:46:00.002+03:00</published><updated>2009-10-03T14:49:45.071+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='streaming'/><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='middleware'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><title type='text'>Metaprotocol Taxonomy</title><content type='html'>&lt;blockquote style="text-align: justify"&gt;Because each application has different communication requirements, there is no simple "best" metaprotocol. Still, some general conclusions are possible. Object-oriented communication, i.e. sending an object model from one machine to another, needs an object-oriented specification (and API where appropriate). The typed metaprotocols (Hessian, RMI, CORBA, JSON) best fit this requirement since they are designed around language types. The syntactic metaprotocols (SOAP, POX) are better suited for document-based applications, i.e. applications which retrieve data through syntactic queries like XPath or XQuery.&lt;br/&gt;&lt;br/&gt;The common communication patterns: REST, RPC, Messaging and Streaming also influence the choice of metaprotocol. Since RPC is a typed and API-based pattern, the typed metaprotocols fit better. Messaging applications can use the syntactic metaprotocols if they are document or query based, and can use the typed metaprotocols if they are object model based. Like Messaging, REST can use either typed or syntactic metaprotocols, depending on the applications. Streaming applications like AJAX/Comet fit dynamic typed protocols best.&lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;&amp;copy; Caucho Technology, Inc.; &lt;a href="http://hessian.caucho.com/doc/metaprotocol-taxonomy.xtp"&gt;Metaprotocol Taxonomy&lt;/a&gt;;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-7558189894471855784?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/7558189894471855784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=7558189894471855784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7558189894471855784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7558189894471855784'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/10/metaprotocol-taxonomy.html' title='Metaprotocol Taxonomy'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-7374178350396356972</id><published>2009-09-13T16:44:00.005+03:00</published><updated>2009-09-13T16:56:00.711+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='wow'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='magic'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>CDMA Ukraine Setup</title><content type='html'>&lt;div style="text-align: center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4_lFDIwyphI/Sqz3uINngYI/AAAAAAAAAOg/VRy_vUHOjXI/s1600-h/internet.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 98px;" src="http://2.bp.blogspot.com/_4_lFDIwyphI/Sqz3uINngYI/AAAAAAAAAOg/VRy_vUHOjXI/s400/internet.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5380948026651541890" alt="CDMA Ukraine setup"/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="text-align: justify"&gt;Немного в некотором роде смешных ремарок в самом скриншоте. Вывод у меня такой - если вы в черте города, то район и близость соты играют примерно такое же значение, как и высота.  Еще замечу, что EDGE у меня в этом же месте выдавал под 16 КБайт в секунду, в то время как CDMA показывал около трех. Задержка канала вроде бы уменьшилась раза в два - хотя сказать что скорость стабильная все равно пока не могу.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-7374178350396356972?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/7374178350396356972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=7374178350396356972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7374178350396356972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7374178350396356972'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/09/cdma-ukraine-setup.html' title='CDMA Ukraine Setup'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4_lFDIwyphI/Sqz3uINngYI/AAAAAAAAAOg/VRy_vUHOjXI/s72-c/internet.PNG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-2896853834605415383</id><published>2009-09-05T22:16:00.006+03:00</published><updated>2009-11-11T16:14:24.710+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='7z'/><category scheme='http://www.blogger.com/atom/ns#' term='cmd'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='magic'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>7zip cmd goodies</title><content type='html'>Some simple magic spells to ease file management under windows. Here goes... &lt;ul&gt;&lt;li&gt;compressing all the dirs in the CWD to respectively named 7z archives somewhere else:&lt;br /&gt;
&lt;span style="font-family: monospace"&gt;set DEST=C:\some\where\else\note\the\trailing\slash\&lt;br /&gt;
for /D %%i in (./*) do @7z a -mx=9 %DEST%%%i.7z %%i&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;UPD&lt;/b&gt;: more goodies are posted separately with the label &lt;a href="http://java.akraievoy.org/search/label/7z"&gt;7z&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-2896853834605415383?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/2896853834605415383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=2896853834605415383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/2896853834605415383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/2896853834605415383'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/09/7zip-cmd-goodies.html' title='7zip cmd goodies'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-3550253789345777862</id><published>2009-08-19T12:41:00.007+03:00</published><updated>2009-08-19T13:33:00.064+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='persistence'/><category scheme='http://www.blogger.com/atom/ns#' term='middleware'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><title type='text'>Open Source Bigtable Analogs</title><content type='html'>&lt;div style="text-align: justify"&gt;Actually, there's no fully comparable analog to Google's Bigtable - all opensource projects are weaker from performance and stability standpoints. But apparently they are already feasible for managing some  unstructured datasets, provided no mission-critical data is involved.&lt;br/&gt;&lt;br/&gt;Bellow follows the best 3-minute introduction to the whole concept I've seen online, and then you see some brief product descriptions.&lt;/div&gt;
&lt;blockquote style="text-align: justify"&gt;The hardest part about learning HBase (the open source implementation of Google's BigTable), is just wrapping your mind around the concept of what it actually is.&lt;br/&gt;&lt;br/&gt;I find it rather unfortunate that these two great systems contain the words table and base in their names, which tend to cause confusion among RDBMS indoctrinated individuals (like myself).&lt;br/&gt;&lt;br/&gt;This article aims to describe these distributed data storage systems from a conceptual standpoint. After reading it, you should be better able to make an educated decision regarding when you might want to use HBase vs when you'd be better off with a "traditional" database.&lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;(c) Jim R. Wilson, 
&lt;a target="_new" href="http://jimbojw.com/wiki/index.php?title=Understanding_Hbase_and_BigTable"&gt;Understanding HBase and BigTable&lt;/a&gt;;&lt;/div&gt;
&lt;br/&gt;&lt;br/&gt;&lt;a href="http://labs.google.com/papers/bigtable.html" target="_new"/&gt;&lt;h3&gt;Bigtable&lt;/h3&gt;&lt;/a&gt;
&lt;div style="text-align: justify"&gt;Bigtable is a distributed storage system for managing structured data that is designed to scale to a very large size: petabytes of data across thousands of commodity servers. Many projects at Google store data in Bigtable, including web indexing, Google Earth, and Google Finance. These applications place very different demands on Bigtable, both in terms of data size (from URLs to web pages to satellite imagery) and latency requirements (from backend bulk processing to real-time data serving).&lt;br/&gt;&lt;br/&gt;Despite these varied demands, Bigtable has successfully provided a flexible, high-performance solution for all of these Google products. In this paper we describe the simple data model provided by Bigtable, which gives clients dynamic control over data layout and format, and we describe the design and implementation of Bigtable.&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt;&lt;a href="http://wiki.apache.org/hadoop/Hbase/HbaseArchitecture" target="_new"/&gt;&lt;h3&gt;HBase&lt;/h3&gt;&lt;/a&gt;
&lt;div style="text-align: justify"&gt;HBase uses a data model very similar to that of Bigtable. Applications store data rows in labeled tables. A data row has a sortable row key and an arbitrary number of columns. The table is stored sparsely, so that rows in the same table can have widely varying numbers of columns.&lt;br/&gt;&lt;br/&gt;A column name has the form "&amp;lt;family&amp;gt;:&amp;lt;label&amp;gt;" where &amp;lt;family&amp;gt; and &amp;lt;label&amp;gt; can be arbitrary byte arrays. A table enforces its set of &amp;lt;family&amp;gt;s (called "column families"). Adjusting the set of families is done by performing administrative operations on the table. However, new &amp;lt;label&amp;gt;s can be used in any write operation without pre-announcing it. HBase stores column families physically close on disk, so the items in a given column family should have roughly the same read/write characteristics and contain similar data.&lt;br/&gt;&lt;br/&gt;
Only a single row at a time may be locked by default. Row writes are always atomic, but it is also possible to lock a single row and perform both read and write operations on that row atomically.&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt;&lt;a href="http://code.google.com/p/hypertable/wiki/ArchitecturalOverview" target="_new"/&gt;&lt;h3&gt;Hypertable&lt;/h3&gt;&lt;/a&gt;
&lt;div style="text-align: justify"&gt;The Hypertable data model consists of a multi-dimensional table of information that can be queried using a single primary key. The first dimension of the table is the row key. The row key is the primary key and defines the order in which the table data is physically stored. The second dimension is the column family. This dimension is somewhat analogous to a traditional database column. The third dimension is the column qualifier. Within each column family, there can be a theoretically infinite number of qualified instances.&lt;br/&gt;&lt;br/&gt;For example if we were building a URL tagging service, we might define column families content, url, and tag. Within the "tag" column family there could be an infinite number of qualified instances, such as tag:science, tag:theater, tag:good, etc. The fourth and final dimension is the time dimension. This dimension consists of a timestamp that is usually auto assigned by the system and represents the insertion time of the cell in nanoseconds since the epoch. Conceptually, a table in Hypertable can be thought of as a three dimensional Excel spreadsheet with timestamped versions of each cell.&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt;&lt;a href="http://incubator.apache.org/cassandra/" target="_new"/&gt;&lt;h3&gt;Cassandra&lt;/h3&gt;&lt;/a&gt;
&lt;div style="text-align: justify"&gt;Cassandra is a highly scalable, eventually consistent, distributed, structured key-value store. Cassandra brings together the distributed systems technologies from Dynamo and the data model from Google's BigTable. Like Dynamo, Cassandra is eventually consistent. Like BigTable, Cassandra provides a ColumnFamily-based data model richer than typical key/value systems.&lt;br/&gt;&lt;br/&gt;Cassandra was open sourced by Facebook in 2008, where it was designed by one of the authors of Amazon's Dynamo. In a lot of ways you can think of Cassandra as Dynamo 2.0. Cassandra is in production use at Facebook but is still under heavy development.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-3550253789345777862?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/3550253789345777862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=3550253789345777862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/3550253789345777862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/3550253789345777862'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/08/open-source-bigtable-analogs.html' title='Open Source Bigtable Analogs'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-3114980647350277905</id><published>2009-08-13T14:13:00.006+03:00</published><updated>2009-08-13T23:23:53.767+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphs'/><category scheme='http://www.blogger.com/atom/ns#' term='wow'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>DLA model parameter space</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4_lFDIwyphI/SoP8QqKZ3bI/AAAAAAAAAOU/Bo4R9lyIju8/s1600-h/dlaModel.GIF" target="_new"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 400px;" src="http://1.bp.blogspot.com/_4_lFDIwyphI/SoP8QqKZ3bI/AAAAAAAAAOU/Bo4R9lyIju8/s400/dlaModel.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5369412543881797042" /&gt;&lt;/a&gt;
&lt;div style="text-align: justify"&gt;&lt;a href="http://www.akraievoy.org/dlaModel.GIF"&gt;Here&lt;/a&gt; is an image showing how DLA-based fractal model changes when couple of density parameters are slightly tilted. The whole thing is here to generate a fractal probability distribution for geographical &lt;a target="_new" href="http://www.barabasilab.com/pubs/CCNR-ALB_Publications/200210-15_PNAS-Internet%27sLargeTopology/200210-15_PNAS-Internet%27sLargeTopology.pdf"&gt;Yook/Jeong/Barabasi&lt;/a&gt; network model.&lt;/div&gt;

&lt;div style="text-align: justify"&gt;Maybe IFS-based fractal would be better here - as it might allow for more control of fractal dimension than DLA does. But then I would not get an obvious way to control exponential density fall-off, and IFS seems to be less natural than this DLA.&lt;/div&gt;

&lt;div style="text-align: justify"&gt;Also, here're some resources on fractal generation I'd stumbled upon recently:&lt;ul&gt;&lt;li&gt;Larry Riddle's &lt;a target="_new" href="http://ecademy.agnesscott.edu/~lriddle/ifs/ifs.htm"&gt;Classic Iterated Function Systems&lt;/a&gt; - quite thorough in-depth survey of several well-known fractals;&lt;/li&gt;&lt;li&gt;E. Garcia's &lt;a target="_new" href="http://www.miislita.com/fractals/fractal-clusters-fractal-networks.html"&gt;Fractal Clusters/Networks&lt;/a&gt; page - featuring side-by-side comparison of different fractal network formations;&lt;/li&gt;&lt;li&gt;&lt;a target="_new" href="http://archives.math.utk.edu/topics/fractals.html"&gt;Fractals Page &lt;/a&gt; at Math Archives Project - lots of related resources;&lt;/li&gt;&lt;li&gt;Andy Lomas's &lt;a target="_new" href="http://www.andylomas.com/aggregationImages.html"&gt;Pictures of Aggregation&lt;/a&gt; - quite remarkable 3-dimensional fractal art;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-3114980647350277905?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/3114980647350277905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=3114980647350277905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/3114980647350277905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/3114980647350277905'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/08/dla-model-parameter-space.html' title='DLA model parameter space'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4_lFDIwyphI/SoP8QqKZ3bI/AAAAAAAAAOU/Bo4R9lyIju8/s72-c/dlaModel.GIF' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-8513484986040491443</id><published>2009-07-31T21:13:00.012+03:00</published><updated>2009-08-13T23:43:05.278+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>The Maven Way</title><content type='html'>&lt;div style="text-align: justify"&gt;Doh... maven is a big bunch of hacks. How do I do this, how do I do that. On the first bit of creativity you're slapped with pile of bizarre arguments and/or unpredictable/unexplainable behaviour. Do it the maven way or don't do it at all.&lt;/div&gt;
&lt;br/&gt;
&lt;div style="text-align: justify"&gt;Here I would like to dump occasional memos on magic maven spells.&lt;/div&gt;
&lt;br/&gt;
&lt;div style="text-align: justify"&gt;&lt;span style="font-weight:bold;"&gt;Dump project dependencies / list dependency tree&lt;/span&gt;:&lt;br/&gt;
&lt;code&gt;mvn clean install dependency:tree &lt;/code&gt;&lt;br/&gt;
BTW, why maven needs to &lt;span style="font-weight:bold;"&gt;build&lt;/span&gt; the project to list the dependencies (I guess downloading poms should suffice)? &lt;span style="font-weight:bold;"&gt;UPD&lt;/span&gt;: When you are left with a sandbox which broke due to some library versioning clash it's quite cool: to know which lib is pulling the wrong version you need to fix the problem blindly first. Yeah, that's The Maven Way to do things, you know...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-8513484986040491443?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/8513484986040491443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=8513484986040491443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8513484986040491443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8513484986040491443'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/07/maven-way.html' title='The Maven Way'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-7626888198841577779</id><published>2009-06-28T10:41:00.002+03:00</published><updated>2009-06-28T10:42:48.621+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><title type='text'>Virtual Hosts and HTTPs</title><content type='html'>&lt;blockquote style="text-align: justify"&gt;Using name-based virtual hosts on a secured connection can be problematic. This is a design limitation of the SSL protocol itself. The SSL handshake, where the client browser accepts the server certificate, must occur before the HTTP request is accessed. As a result, the request information containing the virtual host name cannot be determined prior to authentication, and it is therefore not possible to assign multiple certificates to a single IP address. If all virtual hosts on a single IP address need to authenticate against the same certificate, the addition of multiple virtual hosts should not interfere with normal SSL operations on the server. Be aware, however, that most client browsers will compare the server's domain name against the domain name listed in the certificate, if any (applicable primarily to official, CA-signed certificates). If the domain names do not match, these browsers will display a warning to the client user. In general, only address-based virtual hosts are commonly used with SSL in a production environment.&lt;/blockquote&gt;&lt;div style="text-align: right"&gt;&amp;copy; &lt;a href="http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html" target="_blank"&gt;Tomcat 6 SSL howto&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-7626888198841577779?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/7626888198841577779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=7626888198841577779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7626888198841577779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7626888198841577779'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/06/virtual-hosts-and-https.html' title='Virtual Hosts and HTTPs'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-2613020323681392378</id><published>2009-06-12T13:11:00.004+03:00</published><updated>2009-06-12T13:15:01.031+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='wow'/><category scheme='http://www.blogger.com/atom/ns#' term='interview'/><category scheme='http://www.blogger.com/atom/ns#' term='cv'/><title type='text'>Programmer Flavors</title><content type='html'>&lt;blockquote style="text-align: justify"&gt;My father built custom homes, and in my youth I would occasionally work for him, mostly doing grunt labor and sometimes hanging sheet rock. He and his lead carpenter would tell me that they gave me these jobs for my own good -- so that I wouldn't go into the business. It worked.&lt;br/&gt;So I can also use the analogy that building software is like building a house. We don't refer to everyone who works on a house as if they were exactly the same. There are concrete masons, roofers, plumbers, electricians, sheet rockers, plasterers, tile setters, laborers, rough carpenters, finish carpenters, and of course, general contractors. Each of these requires a different set of skills, which requires a different amount of time and effort to acquire. House-building is also subject to boom and bust cycles, like programming. If you want to get in quick, you might take a job as a laborer or a sheet rocker, where you can start getting paid without much of a learning curve. As long as demand is strong, you have steady work, and your pay might even go up if there aren't enough people to do the work. But as soon as there's a downturn, carpenters and even the general contractor can hang the sheet rock themselves.&lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;&amp;copy; Bruce Eckel; &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=259358"&gt;A Career in Computing&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-2613020323681392378?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/2613020323681392378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=2613020323681392378' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/2613020323681392378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/2613020323681392378'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/06/programmer-flavors.html' title='Programmer Flavors'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-8313599398970563961</id><published>2009-03-07T13:19:00.007+02:00</published><updated>2009-03-07T13:46:51.013+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='web.development'/><category scheme='http://www.blogger.com/atom/ns#' term='folklore'/><title type='text'>J2SE applets stability</title><content type='html'>Not so long time ago I was doing some research into spurious firefox hangs occuring on applet loading. Looks like sometimes SUN tries to sweep a problem under the carpet. Or even worse - they attempt to patch their way out.

&lt;p/&gt;None of these approaches work - as you get either "slightly dysfunctional" components or nasty quantum regressions.

&lt;p/&gt;As for the carpet - some of the tickets below are "not reproducible", despite the fact that people are reproducing that massively across multiple bugzillas. See comments for the mojebanka.cz ticket and the last ubuntu ticket too. Also - there're couple of tough tickets with massive votes which once disappeared from public bugzilla - I had a bookmark on that somewhere.

&lt;p/&gt;So, for those who firmly believe applets are stable and well-established piece of technology, here goes some plain data (somewhat biased - as this is a bugzilla anyway). Second line is version with delivered fix:&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6668033"&gt;New plugin applet freezes the browser occasionally&lt;/a&gt;
6u10(b21)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6680558  "&gt;FF3 browser hangs while loading atomica and rocketmania applets from popcap.com&lt;/a&gt;
11-Closed, Not Reproducible, bug&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6674757"&gt;Firefox hang upon first applet launch with Windows OEM builds of Java&lt;/a&gt;
6u7(b01)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6540719"&gt;Firefox with JDK 6 will cause the browser to hang&lt;/a&gt;
6u10(b02)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6671138 "&gt;Plugin2: Applet from www.mojebanka.cz causes FF3 to hang&lt;/a&gt;
11-Closed, Not Reproducible, bug&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6768136"&gt;Malformed 404s cause breakage of Java/JavaScript bridge and browser hangs&lt;/a&gt;
6u11(b03)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6698636"&gt;Java Plugin in Firefox hangs since 6u4 when remote policy file is present in java.security
&lt;/a&gt;6u10(b26), 6u7-rev(b07)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6604926 "&gt;If &amp;lt;object&amp;gt; tag is malformed, FF browser either crashes or hangs.&lt;/a&gt;
6u10(b07)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bugs.launchpad.net/sun-java/+bug/288397"&gt;The old plugin hangs firefox 3 when loading java applets&lt;/a&gt;
That's quite recent Ubuntu bug, not fixed still, affects 8.10 users, 8.04 works fine
&lt;/li&gt;&lt;/ul&gt;
&lt;p/&gt;Well, actually, I don't think that applets are completely not feasible, but the browser/applet bridging seems to be somewhat shaky. My opinion is that applets are the most pluggable, secure and functional approach, at least for some of possible usage scenarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-8313599398970563961?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/8313599398970563961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=8313599398970563961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8313599398970563961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8313599398970563961'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/03/j2se-applets-stability.html' title='J2SE applets stability'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-3820167102527815095</id><published>2009-03-06T18:49:00.002+02:00</published><updated>2009-03-06T19:10:37.922+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='middleware'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='folklore'/><title type='text'>SUN : Cloudy times</title><content type='html'>&lt;blockquote style="text-align: center"&gt;Use the cloud, build the cloud, &lt;span style="font-style:italic;"&gt;be&lt;/span&gt; the cloud.&lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;via &lt;a href="http://www.sun.com/emrkt/innercircle/newsletter/1108/feature-itm.html?cid=e7341f"&gt;Cloud Computing Demystified&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-3820167102527815095?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/3820167102527815095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=3820167102527815095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/3820167102527815095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/3820167102527815095'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/03/sun-cloudy-times.html' title='SUN : Cloudy times'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-6436045643859141427</id><published>2009-03-05T19:46:00.003+02:00</published><updated>2009-03-05T19:50:28.983+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='folklore'/><title type='text'>Open/Closed Principle : Strategic Closure</title><content type='html'>&lt;blockquote style="text-align: justify"&gt;It should be clear that no significant program can be 100% closed. For example, consider what would happen to the DrawAllShapes function from Listing 2 if we decided that all Circles should be drawn before any Squares. The DrawAllShapes function is not closed against a change like this. &lt;span style="font-weight:bold;"&gt;In general, no matter how “closed” a module is, there will always be some kind of change against which it is not closed.&lt;/span&gt;
Since closure cannot be complete, it must be strategic. That is, the designer must choose the kinds of changes against which to close his design. This takes a certain amount of prescience derived from experience. &lt;span style="font-weight:bold;"&gt;The experienced designer knows the users and the industry well enough to judge the probability of different kinds of changes.&lt;/span&gt; He then makes sure that the open-closed principle is invoked for the most probable changes.&lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;&amp;copy; Robert Martin; &lt;a href="http://www.objectmentor.com/resources/articles/ocp.pdf"&gt;The Open-Closed Principle&lt;/a&gt;;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-6436045643859141427?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/6436045643859141427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=6436045643859141427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/6436045643859141427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/6436045643859141427'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/03/openclosed-principle-strategic-closure.html' title='Open/Closed Principle : Strategic Closure'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-8855802856101803554</id><published>2009-02-28T10:21:00.004+02:00</published><updated>2009-02-28T10:54:36.132+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='interview'/><category scheme='http://www.blogger.com/atom/ns#' term='threading'/><title type='text'>ScheduledThreadPoolExecutor : gotcha</title><content type='html'>This code
&lt;blockquote&gt;&lt;pre style="font-size: small"&gt;final int period = 1000 /*millis*/;
final int delay = 10 /*millis*/;
final int num = 20;

ScheduledExecutorService ses = 
    Executors.newScheduledThreadPool(4);

for (int i = 0; i &lt; num; i++) {
  ses.scheduleWithFixedDelay(

    new Runnable() {
      public void run() {
        try {
          Thread.sleep(num * 1000 - 10);
        } catch (InterruptedException ie) {
          throw new RuntimeException(ie);
        }
        System.out.println("tick: " + System.currentTimeMillis());
      }
    },

    i * period, delay, TimeUnit.MILLISECONDS
  );
}

Thread.sleep(Integer.MAX_VALUE);&lt;/pre&gt;&lt;/blockquote&gt;
should produce 20 tasks which in total would tick once a second.

But nope. You would get only 4 tasks, as corePoolSize does not expand if pool is unable to handle all scheduled tasks. The actual output would be something like:
&lt;blockquote&gt;&lt;pre&gt;tick: 12358104&lt;span style="font-weight:bold;"&gt;68&lt;/span&gt;265
tick: 12358104&lt;span style="font-weight:bold;"&gt;69&lt;/span&gt;237
tick: 12358104&lt;span style="font-weight:bold;"&gt;70&lt;/span&gt;278
tick: 12358104&lt;span style="font-weight:bold;"&gt;71&lt;/span&gt;280
tick: 12358104&lt;span style="font-weight:bold;"&gt;88&lt;/span&gt;274
tick: 12358104&lt;span style="font-weight:bold;"&gt;89&lt;/span&gt;236
tick: 12358104&lt;span style="font-weight:bold;"&gt;90&lt;/span&gt;277
tick: 12358104&lt;span style="font-weight:bold;"&gt;91&lt;/span&gt;299&lt;/pre&gt;&lt;/blockquote&gt;
The only hint for this is left in the &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html"&gt;javadocs for the ScheduledThreadPoolExecutor&lt;/a&gt;:
&lt;blockquote style="text-align: justify"&gt;While this class inherits from ThreadPoolExecutor, a few of the inherited tuning methods are not useful for it. In
particular, because it acts as a fixed-sized pool using &lt;tt&gt;corePoolSize&lt;/tt&gt; threads and an unbounded queue, adjustments to &lt;tt&gt;maximumPoolSize&lt;/tt&gt; have no useful effect.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-8855802856101803554?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/8855802856101803554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=8855802856101803554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8855802856101803554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8855802856101803554'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/02/scheduledthreadpoolexecutor-gotcha.html' title='ScheduledThreadPoolExecutor : gotcha'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-2758742875570728152</id><published>2009-01-22T19:53:00.002+02:00</published><updated>2009-01-22T19:58:44.731+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='teamwork'/><category scheme='http://www.blogger.com/atom/ns#' term='unit-testing'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='folklore'/><title type='text'>Design Pattern : Good Citizen</title><content type='html'>&lt;blockquote style="text-align: justify"&gt;Imagine a software system where there is no need for you to spend your time programming defensively; your objects will be used responsibly, and your methods will always be passed sensible arguments.

This low-friction utopia can be approached by establishing some simple programming rules so that every class acts as a 'good citizen' in the society of classes collaborating at runtime.

This page outlines some rules that we, and others, believe lead to good citizenship. All are aimed at improving clarity, reducing surprise, and promoting basic consistency.

As a good citizen, I...
&lt;ul&gt;&lt;li&gt;Keep a consistent state at all times - init() or populate() is a code smell.&lt;/li&gt;&lt;li&gt;Have no static fields or methods&lt;/li&gt;&lt;li&gt;Never expect or return null.&lt;/li&gt;&lt;li&gt;Fail fast - even when constructing.&lt;/li&gt;&lt;li&gt;Am Easy to test- all dependent object I use can be passed to me, often in my constructor (typically as Mock Objects).&lt;/li&gt;&lt;li&gt;Accept dependent object that can easily be substituted with Mock Objects (I don't use Concrete Class Dependency).&lt;/li&gt;&lt;li&gt;Chain multiple constructors to a common place (using this(...)).&lt;/li&gt;&lt;li&gt;Always define hashCode() alongside equals()&lt;/li&gt;&lt;li&gt;Prefer immutable value objects that I can easily throw away.&lt;/li&gt;&lt;li&gt;Have a special value for 'nothing' - e.g. Collections.EMPTY_SET.&lt;/li&gt;&lt;li&gt;Raise checked exceptions when the caller asked for something unreasonable - e.g. open a non-existant file.&lt;/li&gt;&lt;li&gt;Raise unchecked exceptions when I can't do something reasonable that the caller asked of me - e.g. disk error when reading from an opened file.&lt;/li&gt;&lt;li&gt;Only catch exceptions that can be handled fully.&lt;/li&gt;&lt;li&gt;Only log information that someone needs to see.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;&amp;copy; Dan North, Aslak Hellesoy; found at &lt;a href="http://www.picocontainer.org/patterns.html"&gt;PicoContainer Design Patterns&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-2758742875570728152?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/2758742875570728152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=2758742875570728152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/2758742875570728152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/2758742875570728152'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/01/design-pattern-good-citizen.html' title='Design Pattern : Good Citizen'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-4092253606600685423</id><published>2009-01-19T15:36:00.003+02:00</published><updated>2009-01-19T15:40:42.685+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='os'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>Changing Windows XP HAL</title><content type='html'>&lt;blockquote style="text-align: justify"&gt;If you perform a Windows installation with default settings in VirtualBox, Halacpi.dll will be chosen as VirtualBox enables ACPI by default but disables the IO APIC by default. A standard installation on a modern physical PC or VMware will usually result in Halaacpi.dll being chosen as most systems nowadays have an IO APIC and VMware chose to virtualize it by default (VirtualBox disables the IO APIC because it is more expensive to virtualize than a standard PIC). So as a first step, you either have to enable IO APIC support in VirtualBox or replace the HAL. &lt;span style="font-weight:bold;"&gt;Replacing the HAL can be done by booting the VM from the Windows CD and performing a repair installation.&lt;/span&gt; &lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;&amp;copy; VirtualBox Wiki; &lt;a href="http://www.virtualbox.org/wiki/Migrate_Windows"&gt;Migrate Windows&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-4092253606600685423?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/4092253606600685423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=4092253606600685423' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/4092253606600685423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/4092253606600685423'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/01/changing-windows-xp-hal.html' title='Changing Windows XP HAL'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-1982710816205189346</id><published>2009-01-09T20:33:00.004+02:00</published><updated>2009-01-09T20:41:00.259+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='profiling'/><title type='text'>Java Performance Benchmarks</title><content type='html'>&lt;blockquote style="text-align: justify;"&gt;Several benchmarks comparing C++ and Java exist on the web. The results are mixed: some show that Java is actually faster than C++, while most show that C++ is still faster than Java but by a small margin. The purpose of this post is to talk about the theory behind the Java optimization techniques, so I didn't set out to create my own benchmarks myself, but nothing like hard data to prove a point. So here are the links to some benchmarks found on the web:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.kano.net/javabench/"&gt;The Java is Faster than C++ and C++ Sucks Unbiased Benchmark&lt;/a&gt;: despite the name, this benchmark shows very similar results between Java and C++, with the occasional scenario where C++ beats Java hands down.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.freewebs.com/godaves/javabench_revisited/"&gt;The Java Faster than C++' Benchmark Revisited&lt;/a&gt;: someone who didn't like the benchmark above and found different results, where C++ has a clearer lead. Even so, Java is still close, wins some benchmarks, and is clearly slow only in a handful of tests.&lt;/li&gt;&lt;li&gt;&lt;a href="http://shootout.alioth.debian.org/"&gt;The Computer Language Benchmarks Game&lt;/a&gt;: compares a number of programming languages using different algorithms. Gnu C++ and Java 6 are compared, and C++ wins most of the comparisons, but in most of the cases by a very close margin, and Java is the occasional winner in some of the tests.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;div style="text-align: right"&gt;&amp;copy; Domingos Neto; &lt;a href="http://www.codeinstructions.com/2008/11/java-performance.html"&gt;Java Performance&lt;/a&gt;&lt;/div&gt;
...and one more update: Stefan Krause; &lt;a href="http://www.stefankrause.net/wp/?p=9"&gt;Update for Java Benchmark&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-1982710816205189346?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/1982710816205189346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=1982710816205189346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/1982710816205189346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/1982710816205189346'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2009/01/java-performance-benchmarks.html' title='Java Performance Benchmarks'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-8464574401008718447</id><published>2008-12-08T13:13:00.000+02:00</published><updated>2008-12-08T13:13:00.783+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='folklore'/><title type='text'>Maven breaks binary resources</title><content type='html'>&lt;blockquote&gt;The fun thing is that after checking in the change the Bamboo build was also correct. My colleagues, who were still trying to resolve the font error, were quite amazed, as was I. For some reason Maven had messed up the files while filtering and copying. Quite bizarre if you think of the fact that the XSD file which caused my error didn’t have a keyword in it that should be substituted and the font file that caused the Bamboo error was binary…&lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;(c) Boudewijn van Klingeren, &lt;a href="http://blog.xebia.com/2008/11/02/watch-out-when-filtering-resources-with-maven/"&gt;Watch out when filtering resources with Maven&lt;/a&gt;&lt;/div&gt;

I'd be plainer than that developer: &lt;span style="font-weight:bold;"&gt;Maven breaks your binary resources&lt;/span&gt; once you turn resource filtering on. I've spotted this twice: with an attached dll, and with a license file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-8464574401008718447?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/8464574401008718447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=8464574401008718447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8464574401008718447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8464574401008718447'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2008/12/maven-breaks-binary-resources.html' title='Maven breaks binary resources'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-4970609349045816609</id><published>2008-12-06T17:31:00.003+02:00</published><updated>2008-12-06T17:34:45.090+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphs'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='peering'/><title type='text'>Self-stabilizing protocol design</title><content type='html'>&lt;blockquote style="text-align: justify"&gt;The number of processors and the sometimes noisy communication media in a distributed system impose the need for a fault tolerant design. One strong notion of fault tolerance is self-stabilization. Roughly speaking, a self-stabilizing protocol can cope with any kind of faults in the history. A distributed system is self-stabilizing if it can be started in any possible global state. Once started, the system runs for a while until it reaches a legitimate global state in which the system is consistent. The self-stabilization property makes the system tolerant to faults in which processors exhibit a faulty behavior for a while and then recover spontaneously in an arbitrary state. When the intermediate period between one recovery and the next faulty period is long enough, the system stabilizes.&lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;(c) Shlomi Dolev, Amos Israeli, and Shlomo Moran; &lt;a href="http://www.cs.technion.ac.il/~moran/r/PS/dim97.pdf"&gt;Uniform Dynamic Self-Stabilizing Leader Election&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-4970609349045816609?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/4970609349045816609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=4970609349045816609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/4970609349045816609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/4970609349045816609'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2008/12/self-stabilizing-design.html' title='Self-stabilizing protocol design'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-4651910111268341783</id><published>2008-12-02T17:47:00.003+02:00</published><updated>2008-12-02T17:52:26.458+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='continuous.integration'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='folklore'/><title type='text'>Maven rake field</title><content type='html'>&lt;blockquote style="text-align: justify"&gt;When you first experience Maven, it's like the cinematic cliché of two lovers running across a grassy field to embrace: It takes care of getting the right JARs for you, keeps test and build dependencies separate, and generates configuration artifacts for your favorite IDE, too. Even though it's XML, it's still a sweet five-minute user experience, but then you start stepping on the rakes in the grass.&lt;br/&gt;&lt;span style="font-weight:bold;"&gt;&amp;lt;snip&amp;gt;&lt;/span&gt;&lt;br/&gt;I do like where Matthieu is headed with raven or Russel Winder is headed with gant, but I'd really like the two together: non-XML syntax, dependency management, fully-stocked and up-to-date repositories, well-supported by continuous integration systems, and works with everything that Ant works with. Maybe gant plus the Maven2 Ant tasks or Ivy is the most silver-ish bullet for the time being, but seeing as I don't need to shoot any werewolves, Maven fits the bill for the moment&lt;/blockquote&gt;&lt;div style="text-align: right"&gt;(c) Paul Brown, &lt;a href="http://mult.ifario.us/p/maven-and-rakes-in-the-grass"&gt;Maven and Rakes in the Grass&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-4651910111268341783?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/4651910111268341783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=4651910111268341783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/4651910111268341783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/4651910111268341783'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2008/12/maven-rake-field.html' title='Maven rake field'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-8423834779869533294</id><published>2008-12-01T13:15:00.005+02:00</published><updated>2008-12-01T13:33:22.518+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='web.development'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Web Frameworks</title><content type='html'>&lt;blockquote&gt;jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;&lt;a href="http://jquery.com/"&gt;jQuery home&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;Lift is an expressive and elegant framework for writing web applications. Lift stresses the importance of security, maintainability, scalability and performance, while allowing for high levels of developer productivity. Lift open source software licensed under an Apache 2.0 license.
Lift borrows from the best of existing frameworks, providing
&lt;ul&gt;&lt;li&gt;Seaside's highly granular sessions and security&lt;/li&gt;&lt;li&gt;Rails fast flash-to-bang&lt;/li&gt;&lt;li&gt;Django's "more than just CRUD is included"&lt;/li&gt;&lt;li&gt;Wicket's designer-friendly templating style&lt;/li&gt;&lt;/ul&gt;And because Lift applications are written in Scala, an elegant new JVM language, you can still use your favorite Java libraries and deploy to your favorite Servlet Container. Use the code you've already written and deploy to the container you've already configured!&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;&lt;a href="http://liftweb.net/index.php/Main_Page"&gt;lift homepage&lt;/a&gt;&lt;/div&gt;&lt;blockquote&gt;Spring Web MVC allows you to use any object as a command or form object - there is no need to implement a framework-specific interface or base class. Spring's data binding is highly flexible: for example, it treats type mismatches as validation errors that can be evaluated by the application, not as system errors. All this means that you don't need to duplicate your business objects' properties as simple, untyped strings in your form objects just to be able to handle invalid submissions, or to convert the Strings properly. Instead, it is often preferable to bind directly to your business objects.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;&lt;a href="http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html"&gt;spring framework manual :: web mvc chapter&lt;/a&gt;&lt;/div&gt;
&lt;blockquote&gt;Grails aims to bring the "coding by convention" paradigm to Groovy. It's an open-source web application framework that leverages the Groovy language and complements Java Web development. You can use Grails as a standalone development environment that hides all configuration details or integrate your Java business logic.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;&lt;a href="http://grails.org/"&gt;Grails home&lt;/a&gt;&lt;/div&gt;
See also: &lt;a href="http://appcelerator.org/about"&gt;appcelerator&lt;/a&gt;, &lt;a href="http://developers.facebook.com/thrift/"&gt;thrift&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-8423834779869533294?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/8423834779869533294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=8423834779869533294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8423834779869533294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8423834779869533294'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2008/12/web-frameworks.html' title='Web Frameworks'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-8345019588770514578</id><published>2008-12-01T12:58:00.002+02:00</published><updated>2008-12-01T13:10:32.531+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teamwork'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous.integration'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><title type='text'>Project build and dependency management tools</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;Gant is a tool for scripting Ant tasks using Groovy instead of XML to specify the logic. A Gant specification is a Groovy script and so can bring all the power of Groovy to bear directly, something not possible with Ant scripts. Whilst it might be seen as a competitor to Ant, Gant uses Ant tasks for many of the actions, so Gant is really an alternative way of doing things using Ant, but using a programming language rather than XML to specify the rules.&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;a href="http://gant.codehaus.org/"&gt;Gant home&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;Ivy is a very powerful dependency manager oriented toward Java dependency management, even though it could be used to manage dependencies of any kind. Of course, Ivy is integrated with the most popular build management system for Java projects. But the integration goes way beyond common Ant integration. Indeed Ivy has been designed with Ant integration and design principles in mind. If you have Ant skills, you already have Ivy skills! The plugin mechanism in Ivy follows the same design as Ant, you will find macrodef and files import in Ivy configuration, many things Ant users are already familiar with.&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;a href="http://ant.apache.org/ivy/features.html"&gt;Ivy features&lt;/a&gt;&lt;/div&gt;
&lt;blockquote&gt;Gradle is a build system which provides:
&lt;ul&gt;&lt;li&gt;    A very flexible general purpose build tool like Ant.&lt;/li&gt;&lt;li&gt;    Switchable, build-by-convention frameworks a la Maven (for Java and Groovy projects). But we never lock you in!&lt;/li&gt;&lt;li&gt;    Powerful support for multi-project builds.&lt;/li&gt;&lt;li&gt;    Powerful dependency management (based on Apache Ivy).&lt;/li&gt;&lt;li&gt;    Full support for your existing Maven or Ivy repository infrastructure.&lt;/li&gt;&lt;li&gt;    Support for transitive dependency management without the need for remote repositories and pom.xml or ivy.xml files (optional).&lt;/li&gt;&lt;li&gt;    Ant tasks as first class citizens.&lt;/li&gt;&lt;li&gt;    Groovy build scripts.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;&lt;a href="http://www.gradle.org/"&gt;Gradle home&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-8345019588770514578?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/8345019588770514578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=8345019588770514578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8345019588770514578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/8345019588770514578'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2008/12/project-build-and-dependency-management.html' title='Project build and dependency management tools'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-1778085981610061981</id><published>2008-11-20T22:53:00.003+02:00</published><updated>2008-11-20T22:57:14.761+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jls'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='wow'/><category scheme='http://www.blogger.com/atom/ns#' term='profiling'/><title type='text'>Garbage First</title><content type='html'>&lt;blockquote&gt;The new garbage collector that we're currently developing called Garbage First or G1 for short. G1 straddles the young generation - tenured generation boundary because it is a generational collector only in the logical sense. G1 divides the heap into regions and during a GC can collect a subset of the regions. It is logically generational because it dynamically selects a set of regions to act as a young generation which will then be collected at the next GC (as the young generation would be). G1 can choose the regions with the most garbage to collect first (Garbage First, get it?) so gets the biggest bang for the collection buck.&lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;(c) Jon Masamitsu, &lt;a href="http://blogs.sun.com/jonthecollector/entry/our_collectors"&gt;Our Collectors&lt;/a&gt;&lt;/div&gt;
That G1 is now a part of JDK 7.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-1778085981610061981?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/1778085981610061981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=1778085981610061981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/1778085981610061981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/1778085981610061981'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2008/11/garbage-first.html' title='Garbage First'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-3199564160974435913</id><published>2008-11-04T22:46:00.001+02:00</published><updated>2008-11-04T22:49:05.301+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='profiling'/><title type='text'>Object emission matters</title><content type='html'>&lt;blockquote&gt;When we go looking at java performance, there are really 2 areas of the runtime that matter: the JIT and the GC. The job of the JIT is to make the code that is running execute as fast as possible. The GC is designed to take as little time away from the executing of code as possible (while still managing memory). Thus java performance is all about making the JIT generate more optimal code (more registers helps), and reducing the time the GC has to use to mange memory (bigger pointers makes this harder).&lt;/blockquote&gt;
&lt;div style="text-align: right"&gt;(c) Roo's view, &lt;a href="http://www.lowtek.ca/roo/2008/java-performance-in-64bit-land/"&gt;Java Performance in 64bit land&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-3199564160974435913?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/3199564160974435913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=3199564160974435913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/3199564160974435913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/3199564160974435913'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2008/11/object-emission-matters.html' title='Object emission matters'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18273211.post-7663748823542657874</id><published>2008-10-30T22:00:00.002+02:00</published><updated>2008-10-30T22:12:50.723+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphs'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><title type='text'>caida.org</title><content type='html'>Wow again. Cooperative Association for Internet Data Analysis. Found lots of free internet topology data available.
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4_lFDIwyphI/SQoSv9e3-qI/AAAAAAAAAKw/zS5g2klGVi4/s1600-h/a-root-rtt-05-key.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 400px;" src="http://3.bp.blogspot.com/_4_lFDIwyphI/SQoSv9e3-qI/AAAAAAAAAKw/zS5g2klGVi4/s400/a-root-rtt-05-key.png" border="0" alt="Network round trip times measurement and visualization, 65k nodes" id="BLOGGER_PHOTO_ID_5263039729703058082" /&gt;&lt;/a&gt;

Some links:
&lt;div style="text-align: center"&gt;&lt;a href="http://www.caida.org/tools/visualization/mapnet/"&gt;Mapnet: Macroscopic Internet Visualization and Measurement&lt;/a&gt;
&lt;a href="http://www.caida.org/tools/visualization/walrus/gallery2/"&gt;Walrus - Gallery: Abstract Art&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18273211-7663748823542657874?l=java.akraievoy.org'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java.akraievoy.org/feeds/7663748823542657874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18273211&amp;postID=7663748823542657874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7663748823542657874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18273211/posts/default/7663748823542657874'/><link rel='alternate' type='text/html' href='http://java.akraievoy.org/2008/10/caidaorg.html' title='caida.org'/><author><name>Anton S. Kraievoy</name><uri>http://www.blogger.com/profile/06894480595275252394</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02741194721003380525'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4_lFDIwyphI/SQoSv9e3-qI/AAAAAAAAAKw/zS5g2klGVi4/s72-c/a-root-rtt-05-key.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>