Ika's Weblog XML
Architecting the Thought.

After a very painful data-migration process

The blog has moved to a new location: www.freshblurbs.com

Please, kindly update your RSS Reader with the new URL:
http://www.freshblurbs.com/rss.xml

I apologize for the temporary inconvenience but in the long run the new server is going to be much more featue-rich and comfortable, benefiting both me and my kind readers.

09/26/05

Stone Age in 21st Century

I keep being amazed how some fairly large and visible companies still operate as if they were in 19th century. Today's grand-prize winner is Corel corporation.

FACT: You can not buy any of Corel's software products online!

The whole world is selling software online. You can buy any Jack and Joe's program but - Corel? Naaah, they really need to produce these useless boxes and put some, even more useless, paper in it and make you wait for days while it gets delivered. What do we cut woods for? So that Corel can send us lousy boxes? I refuse to accept this nonsense! I mean, Corel executives must be real morons to be in such bad financial shape when they've had such amazing products for so many years, but the magnitude of their complete idiocy became apparent only today, to me.

Rock on, dudes! Why don't you get out of software business, altogether and begin selling toilet paper?

Un-freaking-believable.

posted by irakli, 20:57 | link | comments

Lucene Spell Checking

Java.net has published a great article about implementing Spell Checker in Lucene.

posted by irakli, 12:22 | link | comments

09/25/05

Skype Widget

Mac OS X user can now enjoy a Skype Dashboard widget along the Skype's new updated version: http://www.skype.com/products/skype/macosx/

posted by irakli, 09:37 | link | comments

09/20/05

.Mac Group

Apple launched .Mac Groups initiative. Now anybody can create pretty powerful online communities. AWESOME.

posted by irakli, 13:50 | link | comments

09/17/05

JGroups - Crime Against Humanity.

BileBlog is the worst blog about Java, ever :) Mean-spiritted, hardly serious spit-offs of anger of a man who does not hide his existential problems. If you are not already nuts, reading this nightmare, it can definitely make you one. Yet, sometimes it can be funny. I could not help ROFLMAOing when I read the following nomination:

Crimes against humanity

.. other nominees ...
Bela Ban: Spending years developing the coolest sounding yet worst performing Java multicast library in existence.
... the list continues ...

I guess Hani got ir right, this time :-)

posted by irakli, 21:12 | link | comments

Steve Jobs for Governor

Rumors that Steve Jobs may run for Governor of California are increasing. I, personally, do not think he would do it, even if he had better chances than others but it is an interesting theory.

Looking at the rating of the "Terminator Governor" it is obvious that he was a complete failure. No surprise there, for me, just a grin at people who were b..s..ing that Arnold is not as dumb as he may look (sounds familiar? Republicans "rock") and that he has some nice record of investment activities (kudos to his investment consultants, if so).

On the contrary, Steve Jobs is an outstandingly successful businessman and knows a thing or two about management, too. Controversial or not - show me how many people on this earth would mind having a record (and fortune) like him.

Cheers to Steve :)

posted by irakli, 20:00 | link | comments

09/14/05

Explaining java.lang.OutOfMemoryError: PermGen space

Most probably, a lot of Java developers have seen OutOfMemory error one time or other. However these errors come in different forms and shapes. The more common is: "Exception in thread "main" java.lang.OutOfMemoryError: Java heap space" and indicates that the Heap utilization has exceeded the value set by -Xmx. This is not the only error message, of this type, however.

One more interesting flavor of the same error message, less common but hence even more troublesome is: "java.lang.OutOfMemoryError: PermGen space". Most of the memory profiler tools are unable to detect this problem, so it is even more troublesome and therefor - interesting.

To understand this error message and fix it, we have to remember that, for optimized, more efficient garbage-collecting Java Heap is managed in generations - memory segments holding objects of different ages.

Garbage collection algorithms in each generation are different. Objects are allocated in a generation for younger objects - the Young Generation, and because of infant mortality most objects die there. When the young generation fills up it causes a Minor Collection. Assuming high infant mortality, minor collections are garbage-collected frequently.

Some surviving objects are moved to a Tenured Generation. When the Tenured Generation needs to be collected there is a Major Collection that is often much slower because it involves all live objects. Each generation contains variables of different length of life and different GC policies are applied to them.

There is a third generation too - Permanent Generation. The permanent generation is special because it holds meta-data describing user classes (classes that are not part of the Java language). Examples of such meta-data are objects describing classes and methods and they are stored in the Permanent Generation.

Applications with large code-base can quickly fill up this segment of the heap which will cause java.lang.OutOfMemoryError: PermGen no matter how high your -Xmx and how much memory you have on the machine.

Sun JVMs allow you to resize the different generations of the heap, including the permanent generation. On a Sun JVM (1.3.1 and above) you can configure the initial permanent generation size and the maximum permanent generation size.

To set a new initial size on Sun JVM use the -XX:PermSize=64m option when starting the virtual machine. To set the maximum permanent generation size use -XX:MaxPermSize=128m option. If you set the initial size and maximum size to equal values you may be able to avoid some full garbage collections that may occur if/when the permanent generation needs to be resized. The default values differ from among different versions but for Sun JVMs upper limit is typically 64MB.

Some of the default values for Sun JVMs are listed below.
JDK 1.3.1_06 Initial Size Maximum Size
Client JVM 1MB 32MB
Server JVM 1MB 64MB

JDK 1.4.1_01 Initial Size Maximum Size
Client JVM 4MB 64MB
Server JVM 4MB 64MB

JDK 1.4.2 Initial Size Maximum Size
Client JVM 4MB 64MB
Server JVM 16MB 64MB

JDK 1.5.0 Initial Size Maximum Size
Client JVM 8MB 64MB
Server JVM 16MB 64MB


Following is a JSP code you can use to monitor memory utilization in different generations (including PermGen):

<%@ page import="java.lang.management.*" %>
<%@ page import="java.util.*" %>
<html>
<head>
  <title>JVM Memory Monitor</title>
</head>

<%
        Iterator iter = ManagementFactory.getMemoryPoolMXBeans().iterator();
        while (iter.hasNext()) {
            MemoryPoolMXBean item = (MemoryPoolMXBean) iter.next();
%>

<table border="0" width="100%">
<tr><td colspan="2" align="center"><h3>Memory MXBean</h3></td></tr>
<tr><td width="200">Heap Memory Usage</td><td><%= ManagementFactory.getMemoryMXBean().getHeapMemoryUsage() %></td></tr>
<tr><td>Non-Heap Memory Usage</td><td><%= ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage() %></td></tr></body>
<tr><td colspan="2">&nbsp;</td></tr>
<tr><td colspan="2" align="center"><h3>Memory Pool MXBeans</h3></td></tr>
<%
        Iterator iter = ManagementFactory.getMemoryPoolMXBeans().iterator();
        while (iter.hasNext()) {
            MemoryPoolMXBean item = (MemoryPoolMXBean) iter.next();
%>
<tr><td colspan="2">
<table border="0" width="100%" style="border: 1px #98AAB1 solid;">
<tr><td colspan="2" align="center"><b><%= item.getName() %></b></td></tr>
<tr><td width="200">Type</td><td><%= item.getType() %></td></tr>
<tr><td>Usage</td><td><%= item.getUsage() %></td></tr>
<tr><td>Peak Usage</td><td><%= item.getPeakUsage() %></td></tr>
<tr><td>Collection Usage</td><td><%= item.getCollectionUsage() %></td></tr>
</table>
</td></tr>
<tr><td colspan="2">&nbsp;</td></tr>
<%
}
%>

</table>


As of JBoss v3.2.8/4.0.2, the ServerInfo MBean registered under the name jboss.system:type=ServerInfo has been enhanced with a new operation listMemoryPools(boolean fancy) that presents information about the memory pools managed by the JVM.

posted by irakli, 23:35 | link | comments

API Differences between JDK 1.5 and 1.4.2

Ever wondered about details of differences between JDK5 and JDK1.4? Wonder no more, and use JDiff.

One word - AWESOME.

posted by irakli, 15:20 | link | comments

09/11/05

Breakthrough Keyboard for Geeks

Lebedev Studio, the leading Russian design studio, has come up with a very innovative approach to keyboards: http://www.artlebedev.com/portfolio/optimus/

posted by irakli, 12:45 | link | comments

09/08/05

Mambo Splits.

Mambo is one of the most distinguished OSS CMS systems. Seems like lead developers left the project and started a new venture. Find more about this in a Cnet article: http://news.com.com/Open-source+split+of+Mambo+software+begins/2100-7344_3-5846006.html

posted by irakli, 15:41 | link | comments

09/07/05

The first and only Java podcast - Javacast

This is so cool! Wonderful casts and yea, it is podcast, baby :)
http://javacast.thepostmodern.net/
Awesome

posted by irakli, 20:38 | link | comments

09/06/05

Joda Time - Worth Paying Attention

Joda Time is an interesting and important class library. It tries/claims to improve on Java's Calendar and Date support.

posted by irakli, 08:48 | link | comments

09/02/05

Gas Prices Going Up.

Are you driving a hybrid car? Maybe you should?
http://toccionline.kizash.com/films/1001/178/

posted by irakli, 09:51 | link | comments

GMail Notifier

Google seems to have developed Mac OS X version of Gmail Notifier, too. That's nice and good but I do not see it having any additional features compared to the GMail Status that I have been using for a long time, now. Actually it looks so similiar, I would get pissed off, if I was the developer of GMail Status (unless Google paid him, which I do not know if they did).

However, one thing that both of this apps are lacking is the ability to indicate the browser they will open GMail in. Now, why do I need it? Because my browser if choice is Safari, without any doubt but, alas, it has issues (yea, even after last update :-( ) with GMail. So I would like GMail to open in Firefox, but I have no desire to make Firefox my default browser.

Something very simple but is not present in either of those nice tools. I wonder if people use programs they wrote, themselves and if they do - how come they do not experience the same problems? :P

posted by irakli, 08:41 | link | comments

09/01/05

Amazon.com Phone Number

Amazon is one of the companies that actually has a customer service phone number but tries to hide it well. Following is the number I use to look up at Google repeatedly, so I thought storing it in my blog would be more convenient.

Enjoy 1-800-201-7575

posted by irakli, 14:01 | link | comments


Copyright (C). Irakli Nadareishvili. Picktek Ltd.