Feb 28

Spring 1.1.5 Release

Java, Lightweight Containers, Tech No Comments »

The last in the 1.1.X versions of Spring has been released. Now the Spring team is onto the Hibernate 3 support (good timing), and JMX.

Spring Framework 1.1.5 Announcement

Hi everybody,

I’m pleased to announce that Spring Framework 1.1.5 has just been released.
This is the last bug fix and minor enhancement release in the 1.1.x series, featuring many minor improvements such as:

* added overloaded “reject” and “rejectValue” methods without default message to Errors interface and BindException
* added “lookup(name, requiredType)” convenience method to JndiTemplate, matching the JNDI object against the given type
* added “homeInterface” property to AbstractRemoteSlsbInvokerInterceptor,
for specifying the home interface to narrow to
* introduced MailMessage interface as common interface for SimpleMailMessage and JavaMail MIME messages
* Log4jConfigurer accepts a “classpath:” URL or a “file:” URL as location too, not just a plain file path
* Log4jConfigurer accepts config files that do not reside in the file system, as long as there is no refresh interval

* added “int[] batchUpdate(String[] sql)” method to JdbcTemplate, for executing a group of SQL statements as a batch
* added C3P0NativeJdbcExtractor for C3P0 0.8.5 or later (for earlier C3P0 versions, use SimpleNativeJdbcExtractor)
* added “maxRows” bean property to JdbcTemplate, allowing to specify the maximum number of rows to be fetched
* added “fetchSize” and “maxRows” bean properties to RdbmsOperation, passing the values to the internal JdbcTemplate
* added ClobStringTypeHandler, BlobByteArrayTypeHandler and BlobSerializableTypeHandler for iBATIS SQL Maps 2.0.9
* ResourceHolderSupport throws TransactionTimedOutException if no time-to-live left (before attempting an operation)
* TransactionSynchronization objects can influence their execution order through implementing the Ordered interface
* JtaTransactionManager is able to work with a JTA TransactionManager only (i.e. without a UserTransaction handle)

* upgraded MockHttpServletRequest to Servlet API 2.4 (added getRemotePort, getLocalName, getLocalAddr, getLocalPort)
* upgraded MockPageContext to JSP API 2.0 (added getExpressionEvaluator, getVariableResolver, overloaded include)
* added “contextOverride” option to
ServletContextPropertyPlaceholderConfigurer, letting web.xml override local settings
* added “searchContextAttributes” option to ServletContextPropertyPlaceholderConfigurer, resolving context attributes
* added “clear” and “isEmpty” methods to ModelAndView, allowing to clear the view of a given ModelAndView object
* added JasperReportsMultiFormatView, allowing to specify the output format dynamically via a discriminator in the model
* JSP EL expressions in Spring’s JSP tags will be parsed with JSP 2.0 ExpressionEvaluator on JSP 2.0 (Jakarta JSTL else)
* changed “spring:transform” tag’s “value” attribute from String to Object, to allow for expressions resolved by JSP 2.0

See the changelog for details.

Our next milestone is 1.2 RC1, which we intend to release as soon as
possible: with Hibernate3 support, JMX support and further major new features. Nightly 1.2-dev snapshots with Hibernate3 support and JMX support will be available within a few days, so feel free to give 1.2 an early try
:-)

Cheers,
Juergen

Feb 28

Real scalability issues: Behind the scenes at Google

Google, Tech No Comments »

The other day I wrote about the behind the scenes of corporate Google.

Today, thanks to Alasdair Allan we can listen to Google Engineers talk about the scalability issues that they come across.

This video talks about the Google File System, their MapReduce framework, and having fun with data. Now here are real scalability problems ;)

Feb 28

Yup.com: Buy tries to make hay with social networks and shopping

Tech 1 Comment »

Buy.com has launched a sister site called Yub.com (took me a second to realise that it was just Buy spelled backwards).

Yub is basically a case back loyalty program, with the addition of:

Yub.com is the world’s first shopping social network, which means that when you hang out on Yub, you can interact with other shoppers, make friends with those you trust, and earn rewards together. Buy something a friend has reviewed and you both earn 1%.

This could add some interesting themes on “those who bought also bought”. With a large enough network I could ask “those in my social network who bought, also bought”. I think we will start seeing more applications which use social networks as a platform.

Feb 28

Railing on performance with lighttpd

Ruby, Tech, Web Frameworks 1 Comment »

TJ Vanderpoel has stepped up to the commenter to my earlier entry who claimed bad performance:

As far as scalability, apache with fcgi certainly isn’t the best option, for rails. In our environment we have one lighttpd process serving requests in a round-robin fashion to from 10 to 100 fastcgi rails listeners. We move anywhere from 300 req/second to 1000 req/second with a dual opteron webserver and the fastcgi listeners can be well in back of the webserver. The only feature i’d like to see added to lighttpd is to be able to add fastcgi listeners on the fly, currently you have to restart the webserver to add listeners. Nonetheless, if you’d talked to rails developers you’d have learned lighttpd is the recommended hosting platform for production applications, as it takes care of many of the speed, and all of the scalability issues.

Mod_Perl

There are many options (apache, FastCGI, mod_ruby, builtin dev server, etc), and these options make me think way back to when I was developing a large scale application with mod_perl. This was when mod_perl just came out, and man was it a pain to test our app under it.

The biggest problem was that at the time, many module writers, and coders in general, didn’t have to care about memory leaks that may occur in CGI scripts. The process is nuked in a few ms, so why both trying to hunt them down?

mod_perl showed everyone how much bad stuff was around :) It was a little like taking someone who has only developed with “implements SingleThreadModel” and taking that out of their servlets. Items they never ran across would now rise up :)

Watch lighttpd and the updated Rails 0.10.0

There is an updated screencast of Rails 0.10.0 which features lighttpd.

You will see some of the changes in the new release, and as always, it is always interesting to see when ‘errors’ show up and how the man behind the screencast solves them. I am always surprised when browser windows are started, that the default page isn’t always about:blank or about:mozilla ;)

Great stuff :)

Feb 28

Can Apple Stop You From Selling Your iPod?

Apple 3 Comments »

After Apple released the special edition “U2 iPod,” someone bought one, added some songs from Negativeland, and tried to sell it on eBay as the “Special-Edition Negativeland vs. U2 iPod.” This got some attention at the time, but the auction disappeared, after Apple asked eBay to take it down — saying it violated their intellectual property rights. Wired News now says the same guy, Francis Hwang, is selling the iPod on his own website, while wondering what possible claim Apple could have over him selling stuff that he had purchased. This is an issue that’s only going to get more attention over the next few years as the rights of buyers gets increasingly confused thanks to things like EULAs and copy protection. Apple shouldn’t have any claim over it whatsoever, but in an age where everyone seems especially jumpy about intellectual property rights — just by claiming it was a violation, Hwang couldn’t sell a perfectly legal offering on eBay.

Techdirt

This is a sad trend. In the past Apple stopped trying to go after their base, just because of the PR effects. Now, are they reverting back to cease and desist tactics? and law suits?

Is it worth wrecking your community?

I would understand if someone was actually doing a Bad Thing, but geez.

Feb 28

Can Apple Stop You From Selling Your iPod?

Apple 3 Comments »

After Apple released the special edition “U2 iPod,” someone bought one, added some songs from Negativeland, and tried to sell it on eBay as the “Special-Edition Negativeland vs. U2 iPod.” This got some attention at the time, but the auction disappeared, after Apple asked eBay to take it down — saying it violated their intellectual property rights. Wired News now says the same guy, Francis Hwang, is selling the iPod on his own website, while wondering what possible claim Apple could have over him selling stuff that he had purchased. This is an issue that’s only going to get more attention over the next few years as the rights of buyers gets increasingly confused thanks to things like EULAs and copy protection. Apple shouldn’t have any claim over it whatsoever, but in an age where everyone seems especially jumpy about intellectual property rights — just by claiming it was a violation, Hwang couldn’t sell a perfectly legal offering on eBay.

Techdirt

This is a sad trend. In the past Apple stopped trying to go after their base, just because of the PR effects. Now, are they reverting back to cease and desist tactics? and law suits?

Is it worth wrecking your community?

I would understand if someone was actually doing a Bad Thing, but geez.

Feb 28

RE: What is good code?

Tech 2 Comments »

Kirk Knoernschild has responded to the question: “What is good code?”:

Ignoring speed of development for a moment, is the best code software that:

  • can adapt to change
  • performs well
  • is error free
  • is as simple as possible
  • does what my customer needs

I think the last point is probably the best. Assuming that ‘not erroring out or being too slow’ is something that your customer needs, then this says it almost all:

Does what my customer(s) need

All of the other items fit under this umbrella, even if the customer doesn’t know it. E.g. do they know that ’software which is managable and easy to maintain’ is what they need? They should.

Maybe ‘performs well’ could be ‘performs fast enough for their needs’.

The comment: ‘is as simple as possible’ is also a leading one. Simple in what way?

The best part is that:

“Must use latest and greatest acronyms”

isn’t on the list ;)

Business Value

Another part of the equation is business value. We often ‘let the business guys take care of that’ and we just implement what they want. Is good code good if it is never used because the idea behind it wasn’t good?

To add more value, consultants and the like need to get up the ladder a little and think about business value.

Feb 28

Stop the FUD on Rails Performance :)

Java, Ruby, Web Frameworks 2 Comments »

Well, Matt has done his job on blood boiling :)

He has run with the comment from one person on this blog which claims slow performance of Rails.

We all know how bad random performance claims are. After all, I think we should show that a Rails PetStore app is a lot faster than “J2EE” ;)

Look at the apps that are written using Rails, and there are more and more showing up on the mailing lists. If it was so slow then they would be shouting about it.

Tadalist and co, all seem to run very nicely from my end too, and I have never experienced a problem with a Rails app.

It is also pretty easy to scale most web apps that people are building. How many are truly ‘enterprise apps’ that people like Mike Spille work on :)

Let’s stop the mud flinging a la ‘JVMs are too slow. How can you not write this in C!’ and let people make their own mind up with testing on their own apps!

My guess is that if someone gave it a try they would be very impressed with the productivity gains, and the app would surely run ‘fast enough’ ;)

Feb 28

Carbon isn’t so bad

Apple, Java, Tech, UI / UX 3 Comments »

All the love is for Cocoa. Why does Carbon get such a bad rap? I never looked into it much, but just last week a friend talked about how he thought Carbon was a poor mans solution, until he actually spent some time on it too. And, he found that it was actually not a bad solution, especially with the Java bindings.

James Duncun Davidson has also just written that Sometimes Carbon isn’t so Bad.

Feb 28

Hibernate 3 Released

Java, ORM, Tech 6 Comments »

Hibernate 3 has been released, with good timing around the JBossWorld conference.

It is good to see the 3.0, which has features I am interested in… mainly:

  • More flexible mappings for the times in which I can’t quite get Hibernate 2 to do what I need.
  • Hibernate3 filters
  • Unchecked exceptions
  • Hibernate Tools
  • Second-level cache browser
  • XML integration

Now we need to test the hell out of it, and see what version is ready for production. You can’t expect Hibernate 3.0 to be as production ready as the mature 2.x branch which is battle worn.

Many congrats to the Hibernate team.

Full Release Notes

Hibernate 3.0 is the world’s most sophisticated ORXM
(Object/Relational/XML Mapping) solution. Hibernate3 makes it easier
than ever before for Java applications to interact with persistent
data, allowing a single definition of the transformation between
various in-memory representations of the entity data and the relational
schema, even in the case of very complex legacy schemas and schemas for
historical data or data with visibility rules. Hibernate3 also provides
the most comprehensive object/relational query functionality, with
three full-featured query facilities: Hibernate Query Language, the
newly enhanced Hibernate Criteria Query API, and enhanced support for
queries expressed in the native SQL dialect of the database.

Compared to Hibernate 2.1 – the most popular object/relational mapping solution in any language – Hibernate 3.0 offers:

  • Much more flexible O/R mapping: support for exotic association and
    inheritance mappings, and greater flexibility when working with legacy
    data.
  • Hibernate3 filters: a unique feature for working with temporal (historical), regional or permissioned data.
  • Unprecendented flexibility for mixing handwritten and generated SQL
    within a single application or even a single entity: full support for
    “derived” entities and attributes defined in the mapping document, full
    support for overriding any generated SQL statement with handwritten
    SQL, support for stored procedures.
  • Object/Relational/XML mapping: query XML directly from the database
    for reporting, replicate data between databases via intermediate XML,
    externalize entity data as XML when interacting with remote systems.
  • Enhanced ease of use: better defaulting, an unchecked exceptions
    model, simplified natural (and composite) key support, simplified CMT
    integration.
  • Enhanced Criteria query API: with full support for projection/aggregation and subselects.
  • Runtime performance monitoring: via JMX or local Java API, including a second-level cache browser.
  • Brand new AST-based HQL parser: bulk update/delete enhancement, better syntax validation.
  • JBoss EJB 3.0 preview: support for annotation-based O/R mappings,
    full support for EJB-QL 3.0, support for EJB 3.0 persist()/merge()
    lifecycle, JACC-based security model.
  • Hibernate Tools preview: a full suite of Eclipse plugins for
    working with Hibernate 3.0, including mapping editor, interactive query
    prototyping, schema reverse engineering tool.
  • Many new extension points: including a new, extensible, event-driven architecture
  • Documentation enhancements.
  • Brand new test suite, including many useful examples of exotic Hibernate mappings.