General

The Covenant of Hamas

In light of the recent killing of Ahmed Yassin, I took the time today to examine the Covenant of Hamas to try to understand the background of the organization that Yassin started. The broader conflict of the Israeli/Palestinian conflict isn’t the issue here – I honestly haven’t done enough homework to postulate a solution or opinion on the general conflict.

From the preamble: “Israel will exist and will continue to exist until Islam will obliterate it, just as it obliterated others before it” (The Martyr, Imam Hassan al-Banna, of blessed memory).

The slogan (Article 8): Allah is its target, the Prophet is its model, the Koran its constitution: Jihad is its path and death for the sake of Allah is the loftiest of its wishes. Article Six says that Hamas “strives to raise the banner of Allah over every inch of Palestine”. So they say that essentially, holy war is their solution to achieve their goal, the conversion of Israel into a Palestinian state. They don’t seem to hide that they are declaring war against Israel.

Article Seven includes the quote “The Day of Judgement will not come about until Moslems fight the Jews (killing the Jews), when the Jew will hide behind stones and trees. The stones and trees will say O Moslems, O Abdulla, there is a Jew behind me, come and kill him.”

Article Thirteen adds “Initiatives, and so-called peaceful solutions and international conferences, are in contradiction to the principles of the Islamic Resistance Movement.”, and later “There is no solution for the Palestinian question except through Jihad.”.

These aren’t selective quotes designed to indict Hamas. Look at the source document for yourself, see if there are sections that contradict, or even moderate the extreme message here. The message is that the objective is the elimination of Israel, the establishment of a Palestinian state, that includes all of its holy places (in spite of the fact that many such sites are also holy to Jews). Their terms are absolute, and their stated method of choice to achieve this is violence against Israel.

Hamas has, since its inception, declared Jihad – holy war – against Israel. Violence is a part of their organization’s definition. The fact is that Yassin was the head of a group that had openly declared war. So you have a group that has declared that it exists for the purpose of war, and that it will not surrender until their absolute demands are met. Based on the rules established by Hamas, their only acceptable outcome is the conquest of land to which Jewish people also have a legitimate claim. Compromise and treaty are not permissible outcomes to them, and violence is their stated goal until their demands are met in full. Who is the world, the global media to question the ability of a country to strike out against a group that has declared war against them? If Israel is unwilling to fully surrender all “Palestinian” lands, then the only other way to avoid conflict with Hamas is to destroy it. Hopefully, the rest of the Palestinian movement can distance itself from the absolutist demands of this extremist group, and look for a peaceful solution based on compromise and understanding rather than violence and absolutism.

Advertisement
Java

JSP Page/Fragment Caching for Dummies

A simple way to speed up performance in high-volume web applications is to load more static pages. (Enough with the technology rants, it’s time to write some more technical content.) In the average application, however, this proves difficult. Most pages that are served to users contain regions of both static and dynamic content. While it might make sense to cache the header and footer, the menu component may be different for each user, and the content area changes with every click. OpenSymphony has created OSCache, a caching component for J2EE web applications. OSCache is open source, and doesn’t carry a licensing fee.

Incorporating OSCache into your application is really quite trivial. At the simplest level, it involves adding a tag library to your application and adding a simple tag to the JSP in question. So once you have the .tld and dependent .jar files in your web app, it’s a simple matter of changing your .jsp as follows:

<cache:cache>
 <JSP content to be cached>
</cache:cache>

Instantly, you’ve made this page indefinitely cached for all users. Only the content in the body of the tag is cached, so you can have incredible granularity in determining what is andis not cached. In the case of a page that contains some user customizations, you can restrict the caching to be specific to each user:

<cache:cache scope=”session”>
 <JSP content to be cached>
</cache:cache>

Further options are available to customize the duration and refresh behavior of the cached content, as well as a tag for conditional use of the cache. Cache size, location, and algorithm can also be modified. While options are nice, the nicest thing about OSCache is the simplicity of getting it set up and working. Significant performance gains can be quickly realized by using a single tag to prevent your app server from tediously generating the same content again and again.

Java

Spinformation – half truths in technology marketing/news

The IT Web “Skills Gap” article that becomes an OptimalJ advertisement has renewed discussion of credibility in technology journalism. While Gartner, Forrester, Yankee, etc. have been taking money from software companies for years for “coverage” in reports, then turning around and quoting them in other “analytical” articles, this chicanery has previously been targeted at management.

Recently, however, this practice seems be a growing part of software companies’ marketing plans, with articles, presentations, and studies targeted squarely at the developer, and deceptively positioned as information about a general topic. Since this seems to be a growing, pervasive trend, I find my self needing a succinct way of describing this propaganda. I propose that we describe such content as “spinformation”, since it takes a generally informational topic in order to hook the reader, then proceeds to twist it into a product advertisement.

Prime Spinformation Examples:

It’s trivial to find more examples, but feel free to chime in with your own examples of spinformation. While I don’t like advertising, it’s not a huge problem as long as you don’t try and dupe me. If the local JUG meeting is titled “Java Persistence Problems and Solutions”, and turns out to be a hype-session for a proprietary tool, I have a beef with that. If you call the session “Java Persistence Solved with XXXXXX”, that’s fine – if I’m interested, I’ll show up, and I’ll know you’re going to tell me about the tool. It’s the spinformation bait-and-switch that gets me. Don’t pretend to address a general topic and then use it as a pretense to hype a specific solution.

Java

Marketing Posing as Articles

I stumbled over the IT Web article touting the lack of Java developers who lack high-level skills. On one hand, their statistics confirm some recent thoughts and observations about the quality of the “average” developer, but that is a topic for another time. What really got me riled up, though, is how quickly the article turns from this teaser statistic and turns into full-scale hype about MDA, particularly Compuware’s OptimalJ.

This article is part of a growing trend launched at the development community. Previously, this sort of veiled marketing was confined to the so-called analysts: Gartner, Forrester, etc, but recently I’m noticing an increasing number of content that is nothing short of marketing packaged up as a case study or other article, and pointed directly at the development community. At last year’s Atlanta Java Software Symposium, a session called “Model-Driven Developers do it faster” focused very little on the concept of MDA, and quickly became a session singing the praises of OptimalJ. (In fairness, every other session of the conference WAS highly informative, and I’m guessing the presenters pitched the session to NFJS differently than the reality of it.) In general, about half the “content” on The Server Side has become product announcements, and worse, we have their “Productivity Case Study” and “MDA Maintainability Research”, both of which were blatent attempts to tout a product under the guise of research and news.

These devious attempts continue to trickle down even to the local level. On several occasions over the past couple of years, local JUG meetings have become little more than marketing presentations (this is the exception far more than the rule). Kudos to Solarmetric, for doing a presentation on JDO that didn’t plug Kodo every 5 minutes, but other “presenters” have used the opportunity to take a captive audience of Java developers who are interested in growing their skills and try to sell them on a product. In general, I think the folks in charge, TSS, NFJS, the local JUG, all have been told they’re getting a presentation on a topic, not a product, but what comes out is a bunch of marketing slides, with just enough content to stake the claim that they did cover a broad topic, such as JMS, Web Services, MDA, O/R Mapping, App Server technology.

It’s offensive really, that these vendors think it a brilliant idea to come in and pollute development communities with their useless marketing slides. They are, at the same time, making useful forums useless, and upsetting the very people they’re hoping to win over. The most egregious offender by far is Compuware. While their products may be useful (I’m not fully decided on this), their deceptive and overwhelming attempts to flood the market with half-information/half-marketing articles, presentations, and postings about OptimalJ is nothing short of insulting. I hope the Java communtiy at large will rebuff these overtures from the vendors, explicitly recommending against the use of products from these vendors until stop these underhanded attempts to fool developers into listening, and just stick to convincing people on the merits of their product. If the products are truly worthy, they’ll stand on their own merits.

— In the interest of equal time, here’s a snip from the TSS discussion on the topic (response directed at someone else). —

This article was not “bought” or “sponsored” by Compuware, and I think it’s unfortunate that you’re characterizing it that way. It’s pretty typical for software vendors to talk to the press about their products, but that doesn’t make the articles that result from the interviews “advertising”.

If you have any further questions about Compuware’s advertising practices, please feel to contact me directly.

Regards,
Mike Burba
Product Manager
Compuware OptimalJ

— End of snip —

So this article seems to be independently slanted toward OptimalJ. I stand by my remarks about the fake news/article/presentation aproach that vendors are embracing. In this case, it’s more Gartner’s typical pay-us-and-we’ll-talk-about-your-product strategy than an overt effort on the part of the vendor. (Vendors don’t pay for particular articles, just for consideration in certain “studies”, which then gets them preferential placement when that product space comes up.) That doesn’t make it squeaky clean, just more in line with what we’ve come to know and love abour Gartner.

Java

Fact or Fiction? – "Java Skills Gap"

While one part of the IT Web article on the “Java Skills Gap” seriously bothered me, it does touch on some issues that I’ve recently been pondering. My first several J2EE jobs were with software companies, and I found that pretty much every developer on every product that I worked on was an intelligent, skilled developer who knew their stuff. During those years, I would have highly doubted that there was any significant lack of capable developers in Java. Since then, I’ve come to work in a corporate IT environment, and come to know more developers in similar jobs, and there just might be some truth in it.

At a fairly large local company that has sold its soul to Microsoft, they’ve bought the .NET tools and servers, but haven’t started development yet. It seems that there’s a team over there whose job is to wrap the APIs and write code to make it easier for the other developers to write code. This team hasn’t had the time to write such code for C# and ASP.NET, so, with the exception of a few of their blue chip developers, they’renot writing .NET code yet. This shocked me for a couple of reasons. First, it’s amazing that a mid-size (not huge) company has its best developers mired in writing code that never directly sees production. Even more eye-opening is that they have whole teams of developers that can’t even develop applications in VB or ASP without someone dumbing it down for them.

Most of the people that I know doing Java development are fairly capable, and by their accounts, this story keeps repeating itself. I run into so many colleagues of mine who get bogged down in infrastructure work not as a matter of architecture or code reuse, but in the name of making development accessible for the “average” developer at their company. The traction of Sun’s Project Rave and MDA tools in the market seems to testify to this fact – companies have large teams of developers who will be assigned to Java projects but don’t have a deep understanding of how to write Java applications. Certainly, with the right budget and focus, individual companies can assemble teams composed entirely of experienced and capable developers, but many companies are looking to convert developers from other areas to their Java projects, and some Java developers simply aren’t willing to put in the time to attain expert knowledge – they’re fat and happy with their salary and job, and see no need to learn more.

So in general, I find this observation about a lack of Java developer talent to be believable, and it’s frightening. I still keep tabs on the undergrads at my alma mater, Georgia Tech, and even the grads I know from their CmpE and CS programs aren’t having trouble finding jobs. The experienced developers are always finding new opportunities. The frightening part is to think about all the developers who found work during the ’90s boom and bust that can’t find it now. While there are probably exceptions – truly talented people who can’t catch a break – the general conclusion is that these people were even LESS skilled than the developers that remain, and that’s scary. It makes you wonder how much of this so-called “underemployment” is due to people living in denial of their actual market value.

Underscoring this point is the usual batch of creative journalism from local rag, the AJC. A recent article shares the typical one-persons-sob-story-used-to-refute-otherwise-encouraging-statistics. You see, Georgia’s jobless rate is down to 3.8%, which sounds pretty strong to me, but here comes the poor husband and father of three kids who can’t find a job. We’re given a partial history – the guy lost his “high tech job” (software sales) in 2001, he’s had such a hard time finding a job that pays even half as much as his $65k sales job. The entire article is framed around his inability to find a job that pays the same as that golden $65k sales job. Nowhere do we get any other details on his background, qualifications, skills, or salary prior to that sales job. I know that at the software company I was at that laid off salesmen in 2001, $65k was chump change for a salesman – that was the salary given to the inexperienced, the entry-level guys. Funny thing about sales jobs though – they’re usually structured in such a way that you don’t make much extra money until your commissions equal your salary (often also called a “quota”). If you don’t justify your salary with your sales, you get canned. So here we’re supposed to believe that the unemployment numbers are bogus because this one guy can’t find a job to equal his one-time, over-inflated salesman salary where he didn’t even sell enough to pay his own salary.

I wonder how much of this is true in the broader job market. How many underskilled, underperforming workers are calling themselves underemployed simply because their salary doesn’t stack up to what it was during those years of companies squandering VC money to try and find someone who can find the power switch on the computer. I believe that the skills gap is very real, and about to get worse. With the baby boomer generation poised to retire, we are about to see a mass exodus of workers from the workforce. Though these vacancies are mostly not Java development, the loss of these developers who built corporate information systems will likely spur a new wave of IT modernization, which will create additional demand for developers in modern languages (.NET and Java). To compensate, supply of developers must increase, demand for developers can be increased (usually through higher salaries), or tools can help increase productivity of existing developers. A combination of these will probably prevail.

Java

MDA: Architect -> Tool Monkey?

Apparently, the MDA vendors want to spend my days configuring their tools to generate our framework. Another week, another visit from an MDA tool vendor, and this time, I felt obligated to ask about the wisdom of generating so much of the plumbing and telling people not to touch it, just fill in the little blanks with the allegedly simple business logic. I don’t strictly object to code generation – XDoclet and Middlegen have their place in the toolkit, and that place is mostly generating code for the mundane, cookie cutter aspects of an app.

That’s all well and good, but 80% of the development time seems to center on the 20% of the code that can’t be generated anyhow – the non-conforming data access and data objects, the intricate business rules that fork every time you talk to the end user. It’s time spent tuning the data access layer to balance performance and functionality, mucking with the MVC mappings to achieve reuse or a better user experience. In this case, I was informed that my role “as an experienced developer”, is to act as the architect of our framework, and to configure and enhance the tool so that it could generate the more custom components of our framework that meet the more intricate and specific needs.

This is very much akin to developing your own XDoclet module, which is something I’ve intentionally avoided because it’s not usually worth the time. XDoclet is useful to the point that it takes care of the little things you don’t want to do repeatedly. Few people would advise you to slap a UML modeling tool on top of XDoclet (assuming some sort of slick integration), and then sink your time into making XDoclet generate all of your code, yet that’s precisely what the vendors seem to want, and that time investment’s justified because, heck, you’ve already invested so much money in the tool. At some point, you get to the level where the code is so custom that it’s not going to be reused, and MDA tools become a golden hammer. Additionally, you can end up with so many options of how to generate the same code, you lose the simplicity the tool is supposed to provide. This is apparently the vendor’s opinion of how it should work. The other option is to use it merely as an expensive version of XDoclet that happens to have UML integration. In this case, it still gets ugly, because they want you to bind the attributes in your UML model to database tables and columns. There’s enough debate about enshrining DB mappings in your value objects for code generation purposes, but it seems blatantly messy to do this in your UML tool.

So apparently the options are either monkeying with the tool, or using it as an expensive code generator that violates abstraction. Where do I sign up? Of course the whole thing comes from the pipe-dream that we can turn software development into a turn-key, assembly line process, the same dream that’s been selling CASE and RUP tools for decades. Move along, there’s nothing to see here.