<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Jack Shirazi&apos;s Blog</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/" />
<modified>2007-01-03T13:04:53Z</modified>
<tagline></tagline>
<id>tag:weblogs.java.net,2008:/blog/jacksjpt/63</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2007, jacksjpt</copyright>
<entry>
<title>Java Support! Well done, Sun ARE responding</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2007/01/java_support_we.html" />
<modified>2007-01-03T13:04:53Z</modified>
<issued>2007-01-03T13:04:46Z</issued>
<id>tag:weblogs.java.net,2007:/blog/jacksjpt/63.6241</id>
<created>2007-01-03T13:04:46Z</created>
<summary type="text/plain">I suggested a couple of years ago that Sun should figure out what their customers want - and give it to them. And with the Java support available from the &quot;Sun Developer Expert Assistance&quot;, I think they have done just that.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[I 
<a href="http://weblogs.java.net/blog/jacksjpt/archive/2005/04/sun_dont_you_wa.html" target='_blank'>blogged a couple of years ago</a> that Sun just didn't understand what their customers want, with the specific example of looking for Java support that I was expecting to pay for.
<p>
Well, now that support is available at <a href="http://developers.sun.com/services/expertassistance/" target='_blank'>http://developers.sun.com/services/expertassistance/</a> . It's resonably priced - well actually its dead cheap if you do any decent amount of Java development. And I wasn't even looking for that, it was highlighted somewhere or other and I clicked through. So Sun, well done. Somehow your marketing found me, and your offering is great value. Here's one more suggestion. Stick a link on the front page menu of Java pages where you have "Popular Downloads" etc - it would fit really well in that "Resources" section.
<p>
Well done, Sun, looking better than you have for a long time.]]>

</content>
</entry>
<entry>
<title>Joel complains that Java is too easy</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2005/12/joel_complains.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-12-30T10:37:19Z</issued>
<id>tag:weblogs.java.net,2005:/blog/jacksjpt/63.3865</id>
<created>2005-12-30T10:37:19Z</created>
<summary type="text/plain">Joel Spolsky has written an article essentially complaning that Java is too easy.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[Apparently, Java is so easy to do that lots of Uni's now teach it as the main language - or even as the sole one. And because its so easy, lots more students can learn it and manage to work in it successfully enough to pass the course. This is BAD (according to Joel). Java doesn't core dump. More BAD. The consequence for poor Joel, is that he can't tell the better students from the not so great ones. And consequently, of course, Java is rubbish. What is needed, according to Joel, is for universities to teach "hard" languages. Machine code would be a good option, and programming in punched cards would weed out the those programmers who can't get it right first time - Joel doesn't quite say that but taking his silly arguments to extreme would lead you down that path.
<p>
There is a natural inclination, <strong>especially</strong> for very competent people, to blame something else when they can't do something or find something hard. In this case, Joel can't seem to ask the right questions that tells him which grad programmers are better, so it's Java's fault, not his.
<p>
I suggest he updates his interview procedures and drags himself into the 21st century. 
<p>
Joel's article can be found at http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html for those of you who like to read this kind of drivel.
]]>

</content>
</entry>
<entry>
<title>An incredibly useful JVM change suggestion</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2005/05/an_incredibly_u.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-05-25T12:36:51Z</issued>
<id>tag:weblogs.java.net,2005:/blog/jacksjpt/63.2494</id>
<created>2005-05-25T12:36:51Z</created>
<summary type="text/plain">Ever wanted to know what objects are in your JVM? A simple suggested change would allow you to.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Performance</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[<p>
I spend half my time trying to identify what performance systems are doing by reproducing their behaviour in a performance testbed. It isn't always successful - I'd like to get profile information directly from the production systems, but even low overhead profilers can't get certain types of information in a low enough overhead way (I've tried, believe me I've tried).
<p>
One piece of info that is really useful to know is how many of each type of object has been created and has been GC'ed by the JVM. That information isn't available from the JVM, except if you use a profiler (with the honorable exception of JRockit which I think will give you this info in a low overhead way).
<p>
But all it takes is two instance variables added to each class object: countCreated and countGCed. And then the JVM just needs to increment each counter for each class when an object is created or GCed. That must surely be a neglible overhead added to the cost of object creation and garbage collection.
<p>
This is really the biggest bang for your buck I can think of to add to the JVM for improved monitoring of the system. With that information, so many things become possible, including automatic detection of memory leaks, identification of what may be causing high GC loads, etc.
<p>
Another in the would be nice to have category.
]]>

</content>
</entry>
<entry>
<title>Sun - don&apos;t you WANT to make money?</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2005/04/sun_dont_you_wa.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-04-08T14:22:06Z</issued>
<id>tag:weblogs.java.net,2005:/blog/jacksjpt/63.2271</id>
<created>2005-04-08T14:22:06Z</created>
<summary type="text/plain">A tip for Sun to make more money from people like me</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[I was looking for Sun Java support - paid support, not the freebie "stick your bug in the db, vote for it and if enough people vote we might do something about it" support. I was looking for something serious - "I pay you, you fix the damn problem or tell me a valid workaround that you support" type of support. And the sort of bugs my customer's get aren't "whoops we didn't define hashcode() when we overrode equals()" (they get those but fix them internally fairly rapidly). The kind of bugs my customers get are "why is the scavenge collector doing some kind of funky cyclic activity that is impacting my server when one patch version ago it was fine - and how do I fix it", or "why is my JVM crashing because of 'growableArray.cpp' and is there a workaround?" That means I need support from engineering who know about the JVM. And that usually means Sun.
<p>
So I did a web search for "sun java support". Of the first twenty results in the 47 million possible ones, there was nothing resembling developer support. But the sun site was in there so I went there and typed "Java support".
<p>
Of the 10 thousand results from that I didn't see anything in the top ten - but I figured at that point I wanted "developer" support. That reduced the result set to 6 thousand, and for one vaguely promising link, down near the bottom of the page, under a sub-sub-heading, was a link to <a href="http://developers.sun.com/prodtech/support/">http://developers.sun.com/prodtech/support/</a>. Out of interest I decided to check back on google for "sun java developer support", but nothing relevant there.
<p>
Well, no matter, I've got a URL, let's look at it. A single support incident for $1600. Well that's not too bad, about the same as you'd pay for one day consulting. A couple of other more extensive plans which you need to negotiate a price for. Looks reasonable (though I don't know yet what the plans cost so who knows). Email, phone web or fax communication - looks good. 
<p>
So you have support plans. WHY ISN'T IT IN MY FACE? Sun - don't you want to make money? Support is a major component of income for many product vendors - and an even bigger component of income for the open source market. If you don't push it, no one is even going to know about it! It should be on your Java home page, your documentation home page, the API page. A small link, no one will care about it if they aren't looking for it, anyone wanting support will see it quickly.
<p>
It's been obvious for years now that Sun just don't know how to make money out of Java. Well duh, everyone from Mr. CEO down, it is really simple. Find out what your customers want. Then make it easy for them to get it from you.
<p>]]>

</content>
</entry>
<entry>
<title>Java and coolness, a discussion</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2004/09/java_and_coolne_1.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-09-22T21:04:17Z</issued>
<id>tag:weblogs.java.net,2004:/blog/jacksjpt/63.1526</id>
<created>2004-09-22T21:04:17Z</created>
<summary type="text/plain">My discussion with an experienced but disillusioned Java programmer</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[In my <a href="http://www.javaperformancetuning.com/news/news045.shtml" target='_blank'>last newsletter</a>, I laid into those who criticise Java for what I see as simple jealousy.  That lead to the following discussion with one of my readers, who I call "B" (I'm the "J" correspondent in the following discussion). 
<p>
B. I've been a J2EE programmer for 3 years now, and a Java programmer for 6. But, I only use them to pay the bills. Never under any circumstances have I written a personal application in Java. I feel I fall into the category of one who thinks Java is woefully uncool, and knows intimately why.
<p>
J. Okay, I've been one for 9 years, and written dozens of personal Java apps. And enjoy it all the time. But let's hear what you have to say.
<p>
B Firstly, you said 'In I.T. it seems, only new or unsuccessful niche things are cool'. Well UNIX is still cool... as is C... and they are both older and more popular and more successful than Java. You can't hop online at all these days without using both of those technologies... the same cannot be said about Java.
<p>
J. I'd hardly call Thompson and Ritchie's Unix cool. Or BSD. Maybe you mean Linux? Or do you throw in those early ones and the whole of HP/UX, Solaris, RS/UX, to mention but a few? Linux isn't so much cool as a stand against M$.
<p>
J. And C is cool? I think you are living in the past. C is a workhorse, but cool? To say that a 35 year old language that is still going is more successful than a 10 year old language that is still going is a truism. And Fortran is even more successful than both on that basis - there is still more scientific computing using Fortran than C or Java. Though my experience is that Java is finally weaning them off Fortran. But I don't understand your point about hopping online. Mosaic and IE were written before Java was released, and all commercial browsers are derivatives of these, so that is hardly surprising. Are you suggesting that if Java is a better language, then everyone should quickly move onto a Java based browser? Why? Technology that works should be used until it no longer works - our industry has a woeful inability to eliminate bugs rapidly, so the older the product the less buggy.
<p>
B. Most of the folks I talk to think C is 'cool' (along with BSD), mainly because coding it gives you the bare-metal feel demanded by hard-core programmers. Its not great for consultants, because of the learning curve, and you have to reinvent the wheel sometimes. But Perl and Python can save you there, with even less code than Java.
<p>
J. Okay, I guess we'll have to disagree on this one. I just cannot see C or BSD as cool. For "bare-metal" feel, Perl is way nicer, you can hit any sys call in a very flexible way, and it is way more dynamic. I used to do that kind of thing. But nowadays that's real boring. The action for me is a "bare-web" feel. And if you want to hack around the web, Java is perfect.
<p>
B. Okay, we'll agree to disagree. Let's move on to your 'J2EE is in a thousand successful commercial applications and cannot be considered acedemic'. But you didn't really address the question there. J2EE is woefully academic - they focus far too much on what is RIGHT, as opposed to what makes sense from a practical standpoint. Alas, the most popular piece of the J2EE framework is JSPs, and almost didn't make it into the spec. Its popular in large part because it is INCORRECT. There is no MVC, barely any seperation of components, its all one big mess. Its the most popular piece of J2EE because its least academic, and most like those horrible ASP/PHP frameworks... and nobody at Sun has bothered to understand why.
<p>
J. But JSP is J2EE. And so is JDBC. And JMS. And Servlets. I suspect you mean EJBs when you are talking about academic. But EJB shortcomings are well known in the Java community. Personally I normally recommend not to use them unless you know why you need them. Why tarnish the whole of J2EE because of EJB? You might as well say Linux is a failure because it has fragmented into multiple versions. You can always find things to pick at in anything.
<p>
B. Okay, I'll make this point: if J2EE worked as well as other frameworks did, then what would be the purpose of your site? Why on earth would so many people be begging you for performance tuning advice, or tips and tricks for avoiding J2EE pitfalls?
<p>
J. You've got this backwards. Java made my site possible because there are so many tools for Java and capabilities in the JVM. Kirk and I made the site a success by working damn hard. There are plenty of other tuning sites for different things - like linux, just about every database, C, C++, and much more. When I was researching for my book, I gathered together a whole list of C tuning stuff - and found half a dozen books with one or more chapters on tuning C programs. And I found many C programmers bemoaning that lack of tuning information available for C. I just wasn't interested in writing a 'C tuning' book. There isn't a language that doesn't need tuning, because of human programmer inefficiencies, and because of the number of possible contention points in any complex program - especially concurrent request handling distributed applications.
<p>
B. Let's move back to the core gripe. I like Java... I just dont like the direction its been heading for the past 3 years, and I dont think it has much of a future. And I'm not alone. Half the Java programmers I know feel the same way... the rest either dont know any other languages better, or have faith that eventually Sun will make things work well.
<p>
J. Chuckle. Well I guess I'm betting my career that you are wrong. I'm sure there are better things than Java. But not at the moment, at least nothing mainstream is in my opinion - not C, C++, C#, VB, Perl, PHP, Delphi, Python, SQL, Javascript. Which are the next 10 most popular languages nowadays. Of these, Perl is nice, and I still use it for lots of things. But back when I was a full time Perl programmer, we tried to build large scale projects with Perl and found it impossible, the stuff was just unmaintainable no matter how rigorously you tried to follow a set of coding standards. A 7,000 class project in Perl would never be feasible. A 7,000 class project in Java is commonplace.
<p>

B. My main gripe is that Java peaked in 'coolness' around about Java 1.1.  Since then very little work has been done on the 'guts' of Java, and instead they kept focusing on bigger, more academic, and more bloated features. Java 1.2 added 'Swing', the academically correct yet ultimately useless GUI toolkit. J2EE brought us lots of things very few people need (like EJBs, JNDI, and RMI in general), as well as old concepts from people outside the J2EE group entirely (Servlets, JSPs, JDBC, JMS, etc.)  Even today, some of the 'coolest' Java work these days is being done by IBM, not Sun.
<p>
J. I think this is called "making it a success".
<p>
B. In the minds of hard-core developers, allowing the branching of Java is the only way to ensure it can evolve into a better language. In the minds of consultants and project managers, branching is ALWAYS a nightmare, so it should be stopped. Problem.
<p>
J. Again, I guess we'll disagree. I see Linux fracturing as one of its really big problems. It would be significantly more successful if there was one guaranteed version rather than a free for all. And that's exactly the reason Windows beat out the other Unix's - MS guaranteed a single reference point compared to the Unix vendors who fought each other into a lose-lose situation. Saying you support Java branching is the same to me as you saying you want .NET to become the monopoly developer environment.
<p>
B. The most insightful comment I saw on this subject was on Slashdot, where somebody said with all sincerity, that Java will be the next COBOL. Not that Java isn't a better language, but it will be what a lot of overly complex business apps will be written in, for better or worse... and they'll always need to be maintained. Good news - you'll probably always be able to find work if your speciality is J2EE.
<p>
J. LOL. Everything is the next COBOL. I didn't find that insightful the first time I saw it in the 90's, and you probably saw the millionth incarnation of "X is the next COBOL".
<p>
B. When the hard-core programmers stop thinking Java is 'cool', they stop making those so-called niche programs that extend it. And where would you be today without those crazy guys? Without Servlets, without JMS, without JDBC, without JBOSS, without STRUTS, without OSCache, and without Log4J. You should be VERY worried that they are leaving Java in droves, while Sun is tightening its grip... because now you have to rely on Sun alone to save Java.
<p>
J. Except there seem to be more and more projects in Java every day. And no, I'm not in the least worried, because I don't see people leaving Java in droves, I see them coming all the time. I guess we just move in very different circles. When Perl was becoming popular and CPAN was being set up in the mid-90's, I was in there helping do some (a very tiny bit mind you) of the core. The excitement was fantastic, and the result was a set of supporting modules which surpassed anything I ever believed possible. More comprehensive and extensive than anything any other language had. And Java has surpassed that as far as I'm concerned. Only recently mind you. But that's not surprising, its only just beginning to mature.
<p>
B. "I guess we just move in very different circles.". Bingo... the people you know and trust think Java is 'cool,' whereas the people I know and trust think its 'uncool.'  Therefore, I see people leaving in droves, whereas you see people coming. So the question boils down to, which group is more reliable in making that judgement? Probably neither... but I'm still going to rant a bit more.
<p>
B. I generally attend O'Reilly conferences, since all the other ones are too full of marketing fluff for my tastes. 5 years ago, people were all excited about Java. I talked with a lot of the guys making Tomcat, and the guys who literally 'wrote the book' on a lot of the killer Java technologies, and J2EE. But recently, the people excited about doing work in Java are few and far between. Most of those guys have moved on to new projects, many of which do not use Java. And even those who do still work with Java criticise Sun and Java regularly because they are too focused on bloat, and not on functionality. A lot of them are closet Python or Objective-C bigots. Its really really rare for me to find somebody excited about using Java. And I also see no 'converts' anymore. Nobody who was using Perl or PHP or C who finds Java and says 'now THATS the way to do it!' It used to happen, but not in the past few years. How about you?
<p>
B. Without those crazy hackers (O'Reilly lamely dubbed them 'alpha geeks') thinking Java is cool and extending it... well... I'm concerned that Java will cease being innovative. Because Sun certainly doesn't get it. Maybe being closer to the Java pulse you know about some cool projects that I dont... but Ive been looking... and everything at java-source.net and sourceforge.com is just the same thing over and over. Extensions of old ideas, or ports of applications from other languages. Nothing new...
<p>
J. It's those different circles. I see lots of great creative projects hitting exactly the sweet spot for me. Standardized APIs to expert systems, fuzzy logic additions, internet spidering, better data structures, CRM projects, Java games, all the stuff I can use to do the things I want. Again, I guess we'll agree to disagree.
<p>]]>

</content>
</entry>
<entry>
<title>Java IDE comparison</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2004/08/java_ide_compar.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-08-27T10:48:39Z</issued>
<id>tag:weblogs.java.net,2004:/blog/jacksjpt/63.1515</id>
<created>2004-08-27T10:48:39Z</created>
<summary type="text/plain">There is a &quot;Java IDE shootout&quot; from JavaOne comparing IntelliJ, Eclipse, NetBeans, Emacs and JDeveloper</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[<p>
There is a "Java IDE shootout" from JavaOne 2004 at <a href="http://javaoneonline.mentorware.net/servlet/mware.servlets.StudentServlet?mt=1093594567372&mwaction=showDescr&class_id=27985&from=business&fromtopic=By%20Topic&subsysid=2000&topic=business&avail_frames=true">here (the pdf is available free and fairly detailed)</a>. It presents an overview comparison of IntelliJ, Eclipse, NetBeans, Emacs and JDeveloper
</p>
<p>
Please understand, this is for your information not to start any IDE wars. I'm sure you each have your own favorite IDE, and some of you will prefer to die defending it rather than admit there is any viable alternative.
</p>
<p>
Personally I have to be IDE agnostic because I have to use whatever my customers are using - though surprisingly often now there is a choice. It used to be that when I went consulting, a site would have mandated one IDE, and there was a big process which they went through to select that IDE (you could tell because it left visible scars on some developers). Nowadays, almost every site I get to has no mandated Java IDE, instead you
can choose one from a list - or whatever you want in some cases - as long as you can 
integrate it into the existing development process.
</p>
<p>
I went to a lot of different sites over the years. It used to be the emacs IDE guys who were the loudest about how great their IDE was. Nowadays it is the IntelliJ guys. And I do mean <em>guys</em>, none of the female developers I met used to spout on about her IDE being the best.
</p>]]>

</content>
</entry>
<entry>
<title>Integrating HTML validation to my site building process</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2004/07/integrating_htm.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-07-14T12:46:21Z</issued>
<id>tag:weblogs.java.net,2004:/blog/jacksjpt/63.1460</id>
<created>2004-07-14T12:46:21Z</created>
<summary type="text/plain">I decided it was time to validate the HTML on my site, but wanted an integrated solution that would flag problems during the build process.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[I generate my website using a local servlet container and JSP pages converting text source to html pages, then I upload all the pages to the server. Inspired by reading 
<a href="http://www.informit.com/articles/article.asp?p=175172" target='_blank'>Cleaning Your Web Pages with HTML Tidy</a>, I decided it was about time I had my HTML validated. But I wanted to do it as an integral part of the build process, not as an afterthought. That way, if HTML errors crept in to the pages for whatever reason, they would be flagged immediately. It turned extremely easy to do so.
<br><br>
First off, I am already building my pages locally using a Java program which connects to my local servlet container and asks for each page then stores it locally. This allows me to have a dynamic page display process for building my pages, giving me all the power and flexibility of servlets and JSPs. The result is a set of static pages which I can upload to my internet site, providing extremely fast downloads of pages from my internet site <a href="http://www.javaperformancetuning.com" target='_blank'>JavaPerformanceTuning.com</a>.
<br><br>
So all I had to do to add HTML validation was add one method to my build process. Once each page is complete and loaded into a local file, I simply added a call to a new validateHTML(File destinationfile) method.
<br><br>
My validateHTML method basically calls the "Tidy" executable on the newly created HTML file, (Tidy validates and corrects HTML, and <a href="http://tidy.sourceforge.net/"  target='_blank'>is available here</a>). Then I check Tidy's output for anything I'm interested in. If there is a problem, I throw an exception.
<br><br>
I use Process to execute Tidy as an external process. I could process Tidy's stdout and stderr directly from the program, but there is no need, it is much simpler to use Tidy to dump these to files and check those files. I don't actually use Tidy's HTML output for my web pages, I'm really using it only as a validator. It is worth noting that the W3 organization has a validator at <a href="http://validator.w3.org/" target='_blank'>http://validator.w3.org/</a> if you only need to check some pages, but in my case I wanted to have all my pages checked each time I re-built the site.
<br><br>
I am only interested in the line notifcation warnings and errors that Tidy emits, so I use a regular expression to detect and parse those lines. In addition, there are some warnings that I don't really care to fix at the moment, so I have added the ability to ignore those, either on a per file basis or globally (see the two entries in the TidyNoficationsToIgnore HashMap for examples).
<br><br>
Finally, if I do find a problem, I like to print the error and relevant line from the HTML file so that I can see where it is and what to fix
<br><br>
Here's the code in case anyone else needs to resolve this problem in a similar way. If you have problems getting Tidy to execute, it's probably a path issue so you might try using the path to the executable in the command, e.g. .\Tidy or ./Tidy
<br>
<pre>
  //Note I am putting this code fragment in the public domain
  public static final Pattern TidyHTMLLineNotification = Pattern.compile("^line\\s+(\\d+)\\s+column\\s+(\\d+)\\s+\\-\\s+(.*)$");
  static HashMap TidyNoficationsToIgnore = new HashMap();
  static
  {
    TidyNoficationsToIgnore.put("newsletter013.shtml+Warning: discarding unexpected &lt;/p>", Boolean.TRUE); 
    TidyNoficationsToIgnore.put("Warning: trimming empty &lt;p>", Boolean.TRUE); //always ignore
  }
  public static void validateHTML(File destinationfile)
    throws IOException, InterruptedException
  {
    //Stdout to tt.txt, stderr to t2.txt.
    //tt.txt contains fixed HTML if you want it.
    //t2.txt contains Tidy's warnings and errors
    String command = "Tidy -o tt.txt -f t2.txt " + destinationfile;
    Runtime.getRuntime().exec(command).waitFor();
    BufferedReader rdr = new BufferedReader(new FileReader("t2.txt"));
    String line;
    while( (line = rdr.readLine()) != null)
    {
      //Only interested in lines beginning with "line"
      if (line.startsWith("line "))
      {
        Matcher m = TidyHTMLLineNotification.matcher(line);
        if (m.matches())
        {
          String linenumstr = m.group(1);
          String colnum = m.group(2);
          String message = m.group(3);
          if ( (TidyNoficationsToIgnore.get(message) != Boolean.TRUE) &&
               (TidyNoficationsToIgnore.get(destinationfile.toString()+'+'+message) != Boolean.TRUE) )
          {
            //line number in destinationfile of problem. Read the file
            //and get that line and the line before
            int linenum = Integer.parseInt(linenumstr);
            BufferedReader rdr2 = new BufferedReader(new FileReader(destinationfile));
            String l2 = null, l1 = null;
            for (int i = 0; i < linenum; i++)
            {
              l1 = l2;
              l2 = rdr2.readLine();
            }
            rdr2.close();
            rdr.close();
            throw new IOException("HTML Validation Problem Identified by Tidy in file " + destinationfile + ": line " + 
		linenum + " / " + message + System.getProperty("line.separator") + l1 +System.getProperty("line.separator") + l2);
          }
        }
      }
    }
    rdr.close();
  }
}
</pre>
]]>

</content>
</entry>
<entry>
<title>Experiences On Running A Website For Profit, Part 2: Keep &apos;Em Coming</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2004/05/experiences_on_1.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-05-19T21:16:06Z</issued>
<id>tag:weblogs.java.net,2004:/blog/jacksjpt/63.358</id>
<created>2004-05-19T21:16:06Z</created>
<summary type="text/plain">Continuing my series about my mistakes and successes on running a profitable website. This time, I talk about content.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[<p>
This series is about how I turned my site from a hobby site to one that is a business. I hope to distill a series of practical suggestions that will help you get your website profitable. You may find everything I have to say completely obvious, certainly I do now having done it all! But maybe some of you will find this series helpful. In the <a href="http://today.java.net/pub/wlg/1171"> first part, "The Beginning"</a> I explained why I started my site. I guess the summary point from that article was: 
</p><p>
<em>If you have an interest, go ahead and start a site about it. It may or may not pay off, but you can't win if you don't try.</em>
</p><p>
To make your reading experience more efficient, I have decided to put the summary points at the top of this and future articles. I guess that the summary points from this article would be:
</p><ul>
<li>The greater the legitimate traffic to your site, the more you can make from your site.
<li>Make sure you have interesting focused information on your site.
<li>Keep adding interesting information to your site and notify your readership when you add content. The content is the most important part of your site, and is the real reason why legitimate traffic will continue to grow.
<li>When you first open the site, make a big splash by announcing your site to your community: post once wherever it is acceptable to do so.
<li>Promote your site. Look for publicity how you can, e.g. write articles for popular magazines. If you can figure out how to get one of your own website articles referred to around the web or at popular locations, this is often a good boost.
<li>Community websites tend draw more traffic (discussion groups and blogs), so consider adding support for one to your site.
</ul><p>

There, you don't need to read the rest of this now. If you do, please note that I add a list of hyperlinks detailing this month's JavaPerformanceTuning.com newsletter contents at the end. 
</p>

<strong>Content</strong>

<p>
A couple of weeks after I opened my site, I already had more Java performance tips for the site, and I realized that if I just tagged them on to the tips page they would not even be noticed. At the same time, I had been reading up on websites and found out a few things. Primarily, there were two aspects to getting people to view a website. One was getting them to the site, the other was keeping them there. Or more specifically getting them to come back. All these sources of information were pointing out that "content is king". Of course content provision is only one type of service, there are other services like search engines, discussion sites, webmail providers, auction sites, blogsites and so on. The vast majority of sites are content provision, because they are the easiest to get running. They also have a big advantage for individuals: most niche subjects are not catered for by any commercial sites. That's because it is not worth their doing so unless the subject has enough people interested and enough capable writers to make the readership significant. In this niche area, you can thrive. And who knows, maybe you are at the begining of something about to take off!
</p><p>

I'd better take a step back and explain something: Why do I want people to come to my site at all? Well, initially, I was hoping that the more people that come to my site, the more likely it was that one of them would want to use my services (at the time consulting services). And ultimately, that hasn't changed - though the services I can provide have extended. But this is the crux, the most important point about making money from a website. The more people you have coming to the site, the more money you can make from it. Indeed, some ways of making money from your site only start to kick on when you have enough people already coming to your site. Note, that there are devious and unethical ways to get people to come to your site. I do not advocate any of these, and have never used any. I think that ultimately these techniques would backfire, and those extra users that are inappropriately directed to your site will not benefit you. So when I talk about getting people to come to your site, I'm talking about them coming legitimately, because your site provides something they are looking for. 
</p><p>

For a site that provides content, the more interesting information you put on the site, the more likely it is that people looking for that information will come to your site.
In my case I knew that people are interested in Java performance tuning. And I looked around the web for information about Java performance, but I knew that I already had way more content than anyone else, since I had summarized all the existing content as well as adding my own. And this thinking was validated by Google - within three weeks of opening the site, Google had me listed in the top twenty results for searches on "Java performance". A few weeks later I was in the top ten.
</p><p>

So aspect 1, content, was taken care of me. What about getting people to come back? Well, I had new tips to list, and I wanted to point out they were new, and not have them lost amongst the thousand already listed. So it was an easy step to decide on having a monthly newsletter listing the new tips. Hardly a new idea, but important nevertheless. And by December 2000, two months after opening the site, I had a fabulous total of 48 subscribers to send my first newsletter to. I had extracted the tips from five new articles (and some older ones), a couple written by me. In fact, I had started writing articles at O'Reilly's instigation. They asked me for two to help publicize my book, one to come out a couple of weeks before book launch, and the second a couple of weeks after. I enjoyed writing, so I had carried on and also submitted an article to JavaWorld ("Optimizing Queries on Maps"), and they had published that together with Brian Goetz's article "Optimizing I/O Performance" in the same week. Looking at the sad spectacle that was JavaWorld until recently, that just shows you how much they have changed. They paid money for articles in those days. Good money. And such was the site popularity and the advertising return, that they could afford to publish two interesting articles in the same week. In fact, they did that most weeks. I hope the re-launched Javaworld is eventually just as successful .
</p>

<strong>Spikes And Tails</strong>
</p><p>

The JavaWorld article taught me an important lesson. The articles I had published at O'Reilly's sites had increased hits to JavaPerformanceTuning.com a little. On the day my JavaWorld article was published, my site hits tripled! The day before I had about 150 hits, publication day saw 420 hits. It was my first introduction to the world of referral spikes. Nowadays, sites pray to be "slashdotted", as it is now called (after the effect of having a popular discussion occur on slashdot.org about some page on your site). Back then, I suddenly found out that other sites make a big difference to the volume of traffic hitting your site. Well Doh! Okay, I kind of knew that in an abstract way, but I didn't really expect the "spike and tail". You get the spike when the other site publishes, then it tails off after a couple of days, but you still end up with higher daily traffic than before the spike.
</p><p>

My strategy since that starting month hasn't really changed. Maintain good content. Add content on a regular basis. I've added a number of different columns to our newsletter, so much so that we are now more a magazine than anything else. In fact all the columns I have now were identified pretty early on, in the first few months. But it has taken years to organize having them all available on a regular basis.
</p><p>

There are aspects that I haven't yet implemented which make for heavier traffic. For a content provision site, the main one is adding discussion groups, a secondary one is having a useful search engine. Blogsites (like the one carrying this article) tend to also get decent amounts of traffic boost, but require much higher levels of input - once a month blogging doesn't really attract traffic unless there are lots of bloggers each contributing once a month.
</p>

<strong>Site promotion</strong>

<p>
I blog on java.net and artima. It doesn't generate that much traffic for me, even when I write a very useful well referred blog (like <a href="http://weblogs.java.net/pub/wlg/268">this one on Java Case Studies</a>). Mostly, I don't really set out to write my blogs for their promotion effects, because they are not worth it. Not cost effective for me. You see, an article by me published on my website actually brings in more readers than writing on any of these forums. I know this to be the case because I have the hard numbers, the references from the java.net & artima sites, and the number of extra readers I got each time I added an extra article to the newsletter output. On the other hand, I know of other sites who are desperate for a mention here because it makes a significant difference to their traffic.
</p><p>

In my opinion, where it is most worth writing other than your own site is at magazines that pay for your output. I'm not even talking about the direct payment reward. Between us, my colleague Kirk Pepperdine and I have written for many of the locations where a Java interest article could be published. The better they pay, the better the quality of response coming through to the JavaPerformanceTuning site. I have a theory about why this should be. It's quite simple really. They can afford to pay because they are making money from their articles, because of the quality or volume of their readership. And you get the reflected glow of that readership. Simple rule: if you are going to write somewhere else, write for the place that pays you the most. You'll probably get a double benefit from that.
</p>

<strong>The Slashdot Effect</strong>
<p>

But let's get back to site promotion. The primary way of promoting your site is valuable content. Search engines reference you, people reference you, sites reference you, all because you have some useful and relevant information. This leads to slow but steady growth in traffic to the site, as long as you keep the content interesting. Secondary ways include writing articles. One of the most useful ways is to get a discussion going about your content. Aim to publish something particularly newsworthy a couple of times a year or, very occasionally, something controversial. My biggest spike was when I published a list of performance tips from JavaOne 2003. Funny, because I publish almost the same volume and same quality of performance tips every month. But that time, the reference got propagated around the web a lot more, had a few discussions about it, and consequently got more references than any other article I've written. I got the usual spike and tail, just bigger than before.
</p><p>

Newbie Java sites have a tendency to post the opening to their site on every Java interest site that they are able to. And any big items also tend to get posted wherever they can. Announcers of new products, and new versions of products do the same. And it works (but do post in appropriate forums, not just anywhere). For the initial boost, post once everywhere. I didn't do this because I didn't think of it at the time, but I have since followed the stats for few sites that did. As long as the content is relevant and interesting, this is a great way to get a flying start. Just remember that you do get diminishing returns, i.e. it is not worth doing too often. (How do I follow other site stats? Well some publish them, which is very helpful. Some publish full historical stats, some publish recent stats only which requires regular visits to maintain your knowledge. Some will give you the information if you ask. Some have their stats listed by one of the automatic stat summary programs, and you can access those summaries if you know where to look).
</p><p>

Ultimately, keep an eye on your site-visit growth curve. As long as the growth is more or less steady, just keep adding interesting content. If growth starts flagging, is
there a good reason? (9/11 saw some sites take a dip in their growth curve for a few months). If not, you might need to do something to get it going again.
</p><p>

Next time, in part 3 "Site Design & Technology", I'll talk about the technical site aspects. Meanwhile,  you might want to check our most recent newsletter (April 2004):
</p>

<ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/news041.shtml">We list all the latest Java performance related news and articles</a>
 <ul><li><em>"I got more responses for that pattern article than I have for almost anything else on this site"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/articles/ddispatch.shtml">Double Dispatch</a>.
 <ul><li><em>What is double dispatch? This old technique doesn't get the exposure it deserves. Here, Kirk Pepperdine explains how it operates and where it is used, with examples. Read on ...</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/roundup041.shtml">The roundup of performance discussions over the last month. Kirk covers maintainability vs. performance, SQL tuning, Value objects, messaging and more</a>
 <ul><li><em>"But still, I see the technique being used quite often and the excuse offered is that it is there for performance. The lesson learned is: measure, don't guess."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/javvathehutt041.shtml">Javva The Hutt rambles through performance past, present and future. Javva does some tuning</a>
 <ul><li><em>"Slowly, with a configuration change here, a code change there, I started to make headway."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/interview041.shtml">This month's interview with Gavin King, Hibernate founder</a>
 <ul><li><em>"We don't see Hibernate as an "inexpensive" alternative ... Rather, we think people use Hibernate because it is a better fit to their requirements, is more stable, and better supported."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/qotm041.shtml">Question of the Month asks how to profile applets</a>
 <ul><li><em>"even better is to have the applet start up with almost no resources and minimal class file content"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/newtips041.shtml">All the latest Java performance tips extracted in concise form</a>
 <ul><li><em>"Availability is binary: on or off. Usability includes responsiveness and performance consistency. High availability does not equal high usability!"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/cartoon/cartoon041.shtml">A new cartoon by "profiler". This month: clustering to reduce overheads</a>
</ul>]]>

</content>
</entry>
<entry>
<title>&quot;We don&apos;t have any competitors&quot;</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2004/04/we_dont_have_an.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-04-13T13:22:04Z</issued>
<id>tag:weblogs.java.net,2004:/blog/jacksjpt/63.251</id>
<created>2004-04-13T13:22:04Z</created>
<summary type="text/plain">Hey, stupid, are you trying to say your company is worthless?</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[<p>
I go to the occassional meeting or trade show where vendors are displaying their wares. I look at what interests me, and sometimes give feedback to the vendors when I have appropriate expertise. Some are interested in my suggestions, some aren't. Not so long ago, I was being given a demo by two guys about their company's leading product. 
</p><p>

"What features do you have that your competitors don't?" I asked.
</p><p>

"We don't have any competitors" was the reply.
</p><p>

Admittedly, these two guys were young, despite their impressive sounding titles of "senior something" and "something else seniorish". But even so you would think they would know better. So in the hope that they or their spiritual bretheren are reading this blog, let me give you a few words of advice.
</p><p>

The statement "We don't have any competitors" does NOT tell your potential customers that you have a fantastic new product which no-one has ever thought of. It tells potential customers that your product must be one they don't need. After all, if you have no competitors, the market must be so small that no-one else thinks it worthwhile to build a competing product.
</p><p>

So listen guys, get to know at least a couple of your biggest competitors. And find some weakness in their product which yours addresses. Then when I ask my question, you'll have an answer that doesn't suggest to me that you are working for a company that is going down the tubes because it can't train it's reps decently. Because "We don't have any competitors" is synonymous with "we have nothing of interest here".
</p>]]>

</content>
</entry>
<entry>
<title>Experiences On Running A Website For Profit, Part 1: The Beginning</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2004/04/experiences_on.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-04-01T13:40:28Z</issued>
<id>tag:weblogs.java.net,2004:/blog/jacksjpt/63.63</id>
<created>2004-04-01T13:40:28Z</created>
<summary type="text/plain">My recent host provider issues made me realize that I am running a profitable website, and that perhaps others can benefit from knowing about mistakes and successes I&apos;ve made, to get their own site successful and profitable. So I&apos;ve decided to write a series on the site. This, the first article in the series, explains why I started the site.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[<b>A Book</b>

</p><p>
I didn't intend to run a website to make money. Back in late 2000, the dot boom had already turned to dot bust, people were already being layed off left and right, and it was clear that websites, B2B, B2C, ... were no longer the "in thing". If you hadn't raised money for a web venture, then you weren't going to, at least not for a few years when the VC [venture capital] doors might start opening a hair's breadth. I knew all about every aspect of these things, because I was an independent consultant who was also loosely attached to a couple of startups. I say "was attached", but "had been attached" would be more accurate. My skills hadn't changed any, but the climate had and every startup I knew was busy closing their doors. If you weren't in, then you weren't going to be in, no matter how "attached" you were. If you <em>were</em> in, there was a good chance that you wouldn't be very shortly. In fact every startup I knew of went rapidly back to the "twinkle in the eye" stage, with their principals looking for work.

</p><p>
So, all in all, not an auspicious time to start a web venture. But then, I didn't think I was starting a web venture. You see, my first book was just about to be published <a href="http://www.amazon.com/exec/obidos/ASIN/0596003773/javaperforman-20" target='_blank'> (Java Performance Tuning, O'Reilly)</a>. And like every author, I was sure that my book was brilliant, that every Java developer in the world would go rushing out to buy a copy, that they'd all be clamouring for my attention. And naturally, I needed a place where people could contact me. So I started a website, using the name of my book as the domain name, "JavaPerformanceTuning.com". A few people pointed out to me that this was a pretty long-winded name. But then I wasn't thinking in terms of people typing in the domain, this wasn't ebay. It was just a point of contact. I figured most people would get my name from the book, do a search for "Jack Shirazi" and click through from the search; or go to the publisher's website, and find a hyperlink that just clicked through to the site.
</p>

<b>The tips</b>

<p>
Up front, I knew there had to be something on the site more than just "this is me and this is what I do". I mean it's all very well to get the odd click-through to your site, but how many people are interested in your bio? And after they've read the bio, what more is there? No, I realized up front that this site was going to be a support site for my book, so I started putting together resource pages and stuff. I also realized that this would be a good place to list anything that interested me about Java performance, since if it interested me, it might well interest other people (ah, ego). So I pulled out any tips from interesting pages online, and by the time I opened the site I already had a thousand Java performance tips. I guess I had more time on my hands back then.

</p><p>
My favorite opening tip was one from an Intel document on optimizing software running on Intel chips, which included a section on Java. My tip said
</p>
<ul><li>"I've only included this here because it's so (unintentionally) funny. Their only tip seems to be "use the JNI to write it in native code", which is not even a good tip."
</ul>

<p>
Not long after I put that tip up, the referred to Intel document was deleted from Intel's website, which made me feel quite good. Of course it could have been a coincidence, but I like to think that some of the half a dozen people or so visiting the site in the first month were influenced enough to make Intel make the change. I like to think that, but even the vainest part of me recognizes that coincidence is a far more likely reason. More recently, Intel has published interesting and informative articles on Java, so like everyone else they've come to take it much more seriously. So kudos to them, always good to see a company reform its ways and get away from the dark side.
</p>

<b>The hits</b>

<p>
So the site was opened (October 23 2000), and I registered on a dozen or so search engines. My first hits came in almost immediately! Whoah, I was excited. Suddenly I could see fame and fortune rearing ahead of me. On the first day alone I had 25 hits. I calculated that if only one in 10 was interested in my services, I'd be rolling in it. Yes!

</p><p>
Boy oh boy, how naive can you be! Well I'm not sure about you, but clearly I can be pretty naive. One in ten. I crack up now just thinking about the idea that one in ten clicks might get me anything. Bear in mind I was not even thinking unique site visits, or even page views, at the time. I was actually calculating ahead my affluent future based on hits to the site, and a ten percent response rate! If all this is another world to you, and you can't see the reality dislocation, it's like expecting one in ten viewers of a TV advert for double glazed windows to call in to the advertised telephone number. And that includes the viewers who taped the advert and wind through at fast forward, and the viewers who popped out to get a drink, etc. If that happened, you could think in terms of a world where the biggest one hundred companies are all TV stations. Not going to happen. If a million people watch an annoying TV program (not advert, a program), you might get ten of them calling in to complain. If it is a nice program, you might get one calling in to praise it. The web is much more interactive, but one in ten responding? Not going to happen.

</p><p>
And what about those first 25 hits? Number one was the Altavista spider. Number two the Lycos spider. In fact all 25 were either one of these two spiders, or me looking at the site, or someone from O'Reilly who was checking it because I had asked them to put a link from their page of my book to my site. Day 2 saw a friend hit the site, day 3 saw the Googlebot. If I had bothered to analyze my meager ration of httpd log entries, I would have quickly realized that it was going to be a long slog before I had even ten people hitting the site.
</p><p>

Next time, in part 2 "Keep 'Em Coming", I'll talk about the two important aspects in getting people to come to your site. Meanwhile, you might want to check our latest newsletter (March 2004)
</p><p>
<ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/news040.shtml" target='_blank'>We list all the latest Java performance related news and articles</a>
 <ul><li><em>"performance news continues to show just how hot Java performance tools are this year"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/articles/commando.shtml" target='_blank'>The Commando Pattern</a>
 <ul><li><em>"The Commando Pattern provides specialized access to methods and variables to enable optimal performance in critical and non-critical sections of code."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/roundup040.shtml" target='_blank'>Kirk's roundup of performance discussions over the last month covers memory tuning, caching, session state, obscure flags, 1.5 enhanced loop and more</a>
 <ul><li><em>"good news on the enhanced loop syntax found in the JDK 1.5. There is no performance penalty for using the new syntax."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/javvathehutt040.shtml" target='_blank'>Javva The Hutt rambles through performance past, present and future. Javva continues his diary and writes a memory monitor with some interesting side effects</a>
 <ul><li><em>"I've written a little memory monitoring class ... It also has some extra features which ... well, lets just say they are proprietary."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/qotm040.shtml" target='_blank'>Question of the Month: Why is a long primary key bad for performance?</a>
 <ul><li><em>"Good primary keys are essential to good database design."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/newtips040.shtml" target='_blank'>All the latest Java performance tips extracted in concise form</a>
 <ul><li><em>"The practical difference between a 95 percent cache hit rate and a 96 percent cache hit rate is 20 percent!"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/cartoon/cartoon040.shtml" target='_blank'>A new cartoon by "profiler". This month: reducing unnecessary communication overheads</a>
</ul>

And for those of you might have missed the previous February newsletter, here are those links
</p><p>
<ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/news039.shtml" target='_blank'>We list all the latest Java performance related news and articles</a>
 <ul><li><em>"any system that doesn't have low overhead monitoring capabilities on it's basic statistics is really not a mature system."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/articles/randomaccess.shtml" target='_blank'>Learning From Code: Fast Random Access</a>.
 <ul><li><em>"How many interfaces are there in the JDK that have no fields and no methods? What are these interfaces used for? Read on ..."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/roundup039.shtml" target='_blank'>The roundup of performance discussions over the last month. Kirk covers object relational mapping tools, the performance difference in iterators and enumerations, different GC algorithms, and more</a>
 <ul><li><em>"Certainly the NIO package has received some attention [in 1.5] as preliminary results have caused at least one jaw to drop. "</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/javvathehutt039.shtml" target='_blank'>Javva The Hutt rambles through performance past, present and future. Javva finds he's become a news star</a>
 <ul><li><em>"more than one internal website now featured a picture of me in one of those "Wanted, Dead or Alive" posters."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/interview039.shtml" target='_blank'>This month's interview with Lax Sakalkale, Senior Product Manager of the Optimizeit performance solutions</a>
 <ul><li><em>"we have Lax giving us almost a manual of how to proceed to ensure you achieve good performance in your project, especially noting which pitfalls to avoid"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/qotm039.shtml" target='_blank'>Question of the Month asks how to choose which feature to use</a>
 <ul><li><em>"Write beautiful code; then profile that beautiful code and make little bits of it uglier but faster"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/newtips039.shtml" target='_blank'>All the lastest Java performance tips extracted in concise form</a>
 <ul><li><em>"Trust hard numbers from a performance tool more than a document claiming that only one SQL statement will be issued per user transaction"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/cartoon/cartoon039.shtml" target='_blank'>A new cartoon by "profiler". This month: reading in parallel</a>
</ul>

</p>]]>

</content>
</entry>
<entry>
<title>Sun, bullets, and feet</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2004/02/sun_bullets_and.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2004-02-04T19:23:03Z</issued>
<id>tag:weblogs.java.net,2004:/blog/jacksjpt/63.1431</id>
<created>2004-02-04T19:23:03Z</created>
<summary type="text/plain">In January&apos;s performance news, the slumbering issue of badly performing strict Math finally bit Sun in public.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Performance</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[<p>
In January's Java Performance Tuning newsletter there are several interesting news items. Of course we had the usual range of tool vendor and benchmark announcements; what I consider to be "background news", because they are usually there each month. (Naturally we only list the performance announcements, and even there only the interesting ones.) Apart from those announcements, there was the 9 language benchmark which didn't show Java as overall the fastest language only because Sun shot itself in the performance foot by insisting on not addressing the "strict" Math performance for so many years. They've known about it for years, and even designed more efficient support into the core classes, but neglected to turn on support for the efficient mode. Of course, Sun has limited resources, so some things will always slip by them. But in this case they clearly understood they were making Math functions inefficient, they added the underlying support for an efficient alternative, and didn't enable it even though quite a few comments have pointed it out. Which is pretty annoying.
</p><p>
For me, the most interesting of items in the news was the server side discussion which floated the idea of pushing NIO support into J2EE. What a wealth of information. NIO select support costing 5% to 30% overhead compared to the blocked multi-thread model came as a real surprise to me. Though maybe it shouldn't since a blocked thread mostly only takes up non-CPU resources, while the Select multiplexing model explicitly exchanges those per-thread resources with active socket set management. I think the 5% mark is probably the more accurate though, because excellent as a product Jetty is, I've noticed several inefficiencies that it has, along with many webservers (see <a href="http://www.acme.com/software/thttpd/benchmarks.html">this old study if you want to understand how even minor effects can dramatically affect the scalability of webservers</a>). In fact we use Jetty in our performance training classes, and profiling the socket transfers is quite instructive for our students. And that's not to say I wouldn't use it in production. On the contrary, if it fitted the functional requirements I'd certainly test its performance against the other possible solutions.
</p><p>
Other than that, you might also want to check out the fail fast article if you haven't noticed the ConcurrentModificationException possibilities inherent in using the List iterators, and our other columns are also quite interesting:
<ul>
<li><a href="http://www.javaperformancetuning.com/news/news038.shtml">We list all the latest Java performance related news and articles</a>
 <ul><li><em>"more proof that Java is going from strength to strength. Now that's a nice way to start 2004."</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/articles/fastfail.shtml">Learning From Code: Fast Fail Iterators</a>.
 <ul><li><em>"What is a mysterious field called <code>modCount</code> doing in the List Iterator classes? How can we efficiently handle iterating over collections when another thread may be updating the collection at the same time? Read on ..."</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/roundup038.shtml">The roundup of performance discussions over the last month. Kirk covers session beans, timing distributed calls, garbage collection and more</a>
 <ul><li><em>"Yet more proof that the engineers at Sun fully realized that optimizers such as HotSpot are sensitive to coding style and with that realization, built HotSpot with good coding practices in mind "</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/javvathehutt038.shtml">Javva The Hutt rambles through performance past, present and future. This month Javva has a "wow!" moment, and gets visted by Agent Smith</a>
 <ul><li><em>"Agent Smith visited us. You know, the one from the Matrix? Black shades, wire coil hanging behind his ear, precise speech patterns, shady motives."</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/interview038.shtml">This month's interview with Bela Ban, lead for JBossCache</a>
 <ul><li><em>"what we want to do here is to use our transactional replicated cache to actually keep the cached entity beans in memory.  This will greatly improve performance"</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/qotm038.shtml">Question of the Month asks about profiling J2EE applications</a>
 <ul><li><em>"J2EE applications are often of such complexity that there can be bottlenecks which are difficult to identify without jumping through hoops"</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/newtips038.shtml">All the lastest Java performance tips extracted in concise form</a>
 <ul><li><em>"Some small optimizations (like turning logging down) can yield huge gains"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/cartoon/cartoon038.shtml">A new cartoon by "profiler". This month: Lazy Initialization</a>
</ul>
]]>

</content>
</entry>
<entry>
<title>Responses to last month, and December Java Performance News</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2003/12/responses_to_la.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2003-12-31T13:25:34Z</issued>
<id>tag:weblogs.java.net,2003:/blog/jacksjpt/63.1467</id>
<created>2003-12-31T13:25:34Z</created>
<summary type="text/plain">I list details about the December Java Performance Newsletter, discuss the responses to last month&apos;s question, and give you some site stats.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Performance</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[<p>
The December issue of the Java Performance Newsletter was published, contents are: 
</p>
<ul>
<li><a href="http://www.javaperformancetuning.com/news/news037.shtml">We list all the latest Java performance related news and articles</a>
 <ul><li><em>"we've only been building up steam on the Java steamroller. The real ride is only just starting. Whoopee, it's full steam ahead!"</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/roundup037.shtml">The roundup of performance discussions over the last month. Kirk covers when to use PL/SQL, a "semi-deployed" system, time syncing distributed systems, and more</a>
 <ul><li><em>"whenever a thread drifts at Java Gaming, it's always for the better"</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/javvathehutt037.shtml">Javva The Hutt is on holiday</a>
 <ul><li><em>"A pittance would be a fortune compared to what we get."</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/interview037.shtml">This month's interview with Jayson Falkner, Mr. JSP </a>
 <ul><li><em>"Here are the best tricks I use: #1 Database Connection Pooling; #2 Don't read flat files from the hard disk; #3 Server-Side Caching; ..."</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/qotm037.shtml">Question of the Month asks about the -Xprof HotSpot profiler</a>
 <ul><li><em>"is -Xprof useful? Yes, after all you are getting some profiling information for almost nothing"</em></li></ul>
<li><a href="http://www.JavaPerformanceTuning.com/cartoon/cartoon037.shtml">Our new cartoon section by "profiler". This month: Speeding up the hardware</a>
</ul>
<p>
Okay, I had nine responses to last month's question about about the appropriateness of these announcements. Seven were positive, indicating that I should carry on announcing the availability of the JavaPerformanceTuning.com newsletter, one was neutral, and one negativish. In fact, the main feedback outside "carry on" was that I should put some additional content along with the announcement. Which seems fair enough. So I'll have a go at giving you some opinions in addition to the announcement in future. Meanwhile, here are some stats.
</p><p>
To put those nine active responses into context, the November announcement was read about 800 times up to now, and generated about the same number of reads on to the JavaPerformanceTuning.com newsletter. The November newsletter pages were read about 10 000 times (back copies were read another 7 000 times during December). And for those of you who are interested, our most popular single newsletter page to date was the <a href="http://www.javaperformancetuning.com/news/newtips031.shtml">June 2003 page detailing new performance tips extracted from JavaOne 2003</a>, which has now been read 23 000 times.
</p><p>
JavaPerformanceTuning.com gets hits from all round the world. The last time I looked, we had about a third of our traffic coming from the USA, a third from Europe, and a third from everywhere else. So can you guess which day over the year was the quietest in terms of traffic? ... Take a moment, think about it and try not to peek ahead ...  okay, well the answer is the first of January. I guess that's the most popular day worldwide for a hangover. And for the two hundred or so sober web denizens who looked up pages on JavaPerformanceTuning.com last Jan 1st, I'll be joining you tomorrow as I did last year, since I don't get the day off either.
</p>
]]>

</content>
</entry>
<entry>
<title>November Java Performance News</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2003/11/november_java_p.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2003-11-28T15:02:54Z</issued>
<id>tag:weblogs.java.net,2003:/blog/jacksjpt/63.536</id>
<created>2003-11-28T15:02:54Z</created>
<summary type="text/plain">The November issue of the Java Performance Newsletter was published, and I ask you about the usefulness of these announcements.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Performance</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[<p>
The November issue of the Java Performance Newsletter was published, contents are:
</p>
<ul>
<li><a href="http://www.javaperformancetuning.com/news/news036.shtml">We list all the latest Java performance related news and articles</a>
 <ul><li><em>"Free profiler number 19 and number 20 are listed in the tools this month"</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/roundup036.shtml">The roundup of performance discussions over the last month</a>
 <ul><li><em>"For a posting to collect so many responses that are all tightly focused on the original question, you know that you?ve run into a topic where people?s experiences are universal."</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/javvathehutt036.shtml">Javva The Hutt rambles through performance past, present and future</a>
 <ul><li><em>"this is I.T. If you do something long enough to become an expert, you can be sure that your skillset is going down the tubes"</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/interview036.shtml">This month's interview is with Bruce Tate, Mr. Antipattern. </a>
 <ul><li><em>"We ditched EJB, in favor of a simple POJO solution"</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/qotm036.shtml">Question of the Month: Dealing with OutOfMemoryError</a>
 <ul><li><em>"Reducing application memory may be simple, you may just be allowing some collections to be too big, for example using many large buffers. Or it can be complex, requiring you to reimplement some classes, or even redesign the application."</em></li></ul>
<li><a href="http://www.javaperformancetuning.com/news/newtips036.shtml">All the lastest Java performance tips extracted in concise form</a>
 <ul><li><em>"100 new tips extracted from Bruce Tate"</em></li></ul>
</ul>
<p>
If you missed the October issue, the contents of that issue are 
<a href="http://www.javaperformancetuning.com/news/contents035.shtml">here</a>
</p>
<p>
Someone (I don't know who) told someone (I know who) who told me that they think my announcements of my newsletters are not appropriate for a blog. They suggested that this was plain advertising. I actually agree that this announcement is advertising. The question is, do you find it useful? I am advertising relevant Java content on a Java interest website. The content is accessible for free, not even registration is required. Personally, I'm delighted when someone points out relevant material from their blog, and I couldn't care less if they are a member of the organization that provides the material. But I'll happily go with the flow. 
</p>]]>

</content>
</entry>
<entry>
<title>September Java Performance News</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2003/10/september_java.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2003-10-01T10:13:22Z</issued>
<id>tag:weblogs.java.net,2003:/blog/jacksjpt/63.623</id>
<created>2003-10-01T10:13:22Z</created>
<summary type="text/plain">The September issue of the Java Performance Newsletter was published. Includes an article on &quot;Timers and audio performance&quot;.</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Performance</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[The September issue of the Java Performance Newsletter was published. Here is the content list.

<ul>
<li><a href="http://www.javaperformancetuning.com/articles/soundtimer.shtml">Timers and audio performance</a> How do you synchronize audio and video frames? What is Java's current capability for recording audio samples? Why is clock skew important to audio recording? In this article Scot Mcphee describes what you need to know about timers for recording audio samples from Java.
<li><a href="http://www.javaperformancetuning.com/news/news034.shtml">All the latest Java performance related news and articles</a>
<li><a href="http://www.javaperformancetuning.com/news/roundup034.shtml">Kirk Pepperdine's roundup of performance discussions over the last month. This month Kirk covers super computers, garbage collection in microbenchmarks, not threading EJBs, capacity planning, the variability of performance across systems, and more.</a>
<li><a href="http://www.javaperformancetuning.com/news/javvathehutt034.shtml">Javva The Hutt rambles through performance past, present and future. Javva has another installment of his diary, and tells us about what to expect in the 1.7 JVM (that'd be around 2007 or 2008) </a>
<li><a href="http://www.javaperformancetuning.com/news/interview034.shtml">This month's interview with Frank Cohen, the creator of the open source TestMaker webservices load tester. </a>
<li><a href="http://www.javaperformancetuning.com/news/qotm034.shtml">Our Question of the Month asks if turning off assertions is a bad practice</a>
<li><a href="http://www.javaperformancetuning.com/news/newtips034.shtml">All the lastest Java performance tips extracted in concise form. 50 new tips.</a>
</ul>

Happy Browsing]]>

</content>
</entry>
<entry>
<title>August Java Performance News</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/jacksjpt/archive/2003/08/august_java_per.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2003-08-27T16:08:29Z</issued>
<id>tag:weblogs.java.net,2003:/blog/jacksjpt/63.972</id>
<created>2003-08-27T16:08:29Z</created>
<summary type="text/plain">The August issue of the Java Performance Newsletter was published</summary>
<author>
<name>jacksjpt</name>

<email>jack@JavaPerformanceTuning.com</email>
</author>
<dc:subject>Performance</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/jacksjpt/">
<![CDATA[The August issue of the Java Performance Newsletter was published, here is the content list

<ul>
<li><a href="http://www.JavaPerformanceTuning.com/news/news033.shtml">All the latest Java performance related news and articles</a>
<li><a href="http://www.JavaPerformanceTuning.com/news/roundup033.shtml">Kirk Pepperdine's roundup of performance discussions over the last month. This month Kirk covers micro-benchmarks, adaptive JVM advantages, McCabe Complexity, the shelf-life of tips, obfuscation, and more. </a>
<li><a href="http://www.JavaPerformanceTuning.com/news/javvathehutt033.shtml">Javva The Hutt rambles through performance past, present and future. Javva details how he set up his constant response-time production server.</a>
<li><a href="http://www.JavaPerformanceTuning.com/news/interview033.shtml">This month's interview with Steven Haines, J2EE architect for Quest Software who shares with us his expert knowledge of current performance issues</a>
<li><a href="http://www.JavaPerformanceTuning.com/news/qotm033.shtml">This Question of the Month asks about the effectiveness of pooling objects.</a>
<li><a href="http://www.JavaPerformanceTuning.com/news/newtips033.shtml">All the lastest Java performance tips extracted in concise form: GUIs (wait cursors); J2EE (session scopes, messaging EJBs, app-server tuning); performance management; several JVM and core classes tips; and several of the classes of the 1.5 java.util.concurrent package.</a>
</ul>

Happy browsing.]]>

</content>
</entry>

</feed>