CDN Hosted Javascript

This is totally not new, but a really nice feature I’ve discovered – using “CDN Hosted” javascript libraries, e.g. jQuery.

All you need to do is add an external reference the resource in your HTML, e.g.:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>

This gives you multiple advantages, as:

  • you don’t have to store files on your hosting
  • you don’t have to worry about caching
  • you can decrease the bandwidth usage of your server
  • most likely you site’s overall performance will increase
  • you’re able to write a “single html” page e.g. for testing reasons using heavy JS / CSS frameworks, and send a single file over e-mail & etc.

I would like to see Blueprint CSS framework to be hosted on CDN too, but for testing reasons I can just use their test CSS directly when I need it.

See example:

Or usage in my CC validator trial page: http://blog.cikas.info/try/luhn.html

I like Microsoft’s explanation why CDN should be used:

Content delivery networks (CDNs) are composed of “edge cache” servers that are strategically placed around the world at key Internet network points. These “edge cache” servers can be used to cache and deliver all types of content – including images, videos, CSS and JavaScript files.

Using a CDN can significantly improve a website’s end-user performance, since it enables browsers to more quickly retrieve and download content. For example, instead of having a browser request for an image traverse all the way across the Internet to your web server to download, a CDN can instead serve the request directly from a nearby “edge cache” server that might only be a single network hop away from your customer (making it return much faster – which makes your pages load quicker).

Wicket 1.5.1 released

Apache Wicket Logo

Right after Wicket 1.5.0 was released – we get the first maintenance release of the Wicket 1.5.x series. This release brings over 40 bug fixes and 15 improvements.
Subversion tag
http://svn.apache.org/repos/asf/wicket/releases/wicket-1.5.1

Download the full distribution
http://www.apache.org/dyn/closer.cgi/wicket/1.5.1 (including source)

Update your maven dependency to:

<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-core</artifactId>
    <version>1.5.1</version>
</dependency>

Release Notes – Wicket – Version 1.5.1

Sub-task

  • [WICKET-3934] – Provide AttributeModifier#remove(String)
  • [WICKET-4029] – Improve RequestLogger to not do anything after IPageManager#commitRequest()

Bug

  • [WICKET-3773] – Onclick Script displayed as Link Text
  • [WICKET-3977] – Calling FormTester.select for DropDownChoice invokes onSelectionChanged with null argument
  • [WICKET-3991] – SignInPanel prevents the page being Stateless when signing in with the “rember me” facility.
  • [WICKET-3993] – Wrong ASCII Key Code for END Key. AutoComplete not working properly
  • [WICKET-3998] – CreditCardValidator returns incorrect cardId for VISA
  • [WICKET-4004] – PageExpiredException still thrown after handled by IRequestCycleListener
  • [WICKET-4005] – AutoHide of DatePicker breaks showOnFieldClick
  • [WICKET-4009] – Page Lock on Browser Back Button after Page Expiry
  • [WICKET-4010] – SignInPanel may lead to infinite redirects if there is rememberMe cookie with outdated data
  • [WICKET-4012] – Component’s onAfterRender() is called so many times as it is depth in the component tree + 1
  • [WICKET-4014] – Wicket 1.5 Form Post Action and Link Get discard Page Class Information
  • [WICKET-4016] – MarkupContainer.toString(true) fails with MarkupNotFoundException if the call is made in the component constructor
  • [WICKET-4020] – ResourceMapper throws IllegalStateException when attempting to map a request to a URL ending in a empty segment (directory)
  • [WICKET-4021] – PageProvider can instantiate pages even if isNewPageInstance returns false
  • [WICKET-4022] – Hidden auto generated field in Form has invalid value for autocomplete
  • [WICKET-4025] – AbstractLink does not detach body model
  • [WICKET-4030] – HeaderResponse.renderCSSReference does not render context path relative url, but wicket filter url-pattern relative url
  • [WICKET-4031] – TextRequestHandler doesn’t set Content-Length header
  • [WICKET-4032] – ComponentStringResourceLoader must not include the index of repeater items in resource lookup but still resolve properties to them
  • [WICKET-4038] – MountedMapper.mapHandler ruins Links inside mounted pages appending parameters wicket-ajax and wicket-ajax-baseurl
  • [WICKET-4047] – WebClientInfo causes NullPointerException when the request header “User-Agent” is null.
  • [WICKET-4048] – label’s wicket:for does not work completely for Radios
  • [WICKET-4051] – max-age header is set in milliseconds rather than seconds
  • [WICKET-4053] – AbstractTree#updateTree(AjaxRequestTarget target) is invoked even when request is non-ajax
  • [WICKET-4054] – Memory leakage in browser with AbstractAjaxTimerBehavior
  • [WICKET-4055] – LocaleFirstMapper does not strip Locale from url in getCompatibilityScore()
  • [WICKET-4058] – RadioGroup WicktTester with a AjaxSubmitLink fails
  • [WICKET-4059] – CheckBoxMultipleChoice does not respect isEnabled
  • [WICKET-4061] – Invalid listener url generated for nested components that have an id which starts with a dash
  • [WICKET-4063] – Theading issue in AsynchronousDataStore causes OutOfMemory exception
  • [WICKET-4066] – RestartResponseAtInterceptPageException.InterceptData is never cleared
  • [WICKET-4070] – Errors reported from Form#onValidateModelObjects() are ignored
  • [WICKET-4072] – Form Input example fails when changing the language
  • [WICKET-4073] – Wicket quickstart advertise HTTPS but it doesn’t work when started with jetty:run
  • [WICKET-4075] – Extended browser info gathering is broken
  • [WICKET-4080] – domready events not always fired in IE
  • [WICKET-4081] – WebRequest.getIfModifiedSinceHeader does not handle IllegalArgumentException
  • [WICKET-4082] – org.apache.wicket.request.Url#toAbsoluteString
  • [WICKET-4083] – WebResponse#enableCaching does not take care of a possible “Pragma: no-cache” header

Improvement

  • [WICKET-2790] – Submitting a form with Ajax in WicketTester does not check if form is multiPart
  • [WICKET-2930] – Method isSelected in Select should be public
  • [WICKET-3938] – Impossible to remove particular key-value from PageParameters
  • [WICKET-4006] – Add a check preventing trying to add the current component as a child to itself
  • [WICKET-4023] – Please Allow AjaxLink to use getChannelName
  • [WICKET-4024] – Provide a Convenience API for usage of Ajax Channels
  • [WICKET-4028] – Improve PageInstanceMapper#getCompatibilityScore() to return higher value if the request starts with ‘wicket/page’
  • [WICKET-4037] – Archetype quickstart references release candidate
  • [WICKET-4042] – Typo in FormTester fail message
  • [WICKET-4044] – Change the style of “WICKET AJAX DEBUG” link when some error gets logged
  • [WICKET-4046] – Touch pages only when they are returned from the data stores
  • [WICKET-4049] – Enable SSL for quickstart to make debugging SSL errors easier
  • [WICKET-4052] – Add org.apache.wicket.request.Response.write(byte[], int, int) to make it easier to write buffered data to the web response
  • [WICKET-4067] – Register devutils only if IDebugSettings#isDevelopmentUtilitiesEnabled() is true
  • [WICKET-4068] – Assume that form.onsubmit() without explicit return value means that submit should proceed
  • [WICKET-4079] – Provide new HybridPageParametersEncoder class for backwards compatibility with pre 1.5.x Hybrid URL encoding

New Feature

  • [WICKET-4015] – Implement a listener which can be used to measure the render time of a component

Task

  • [WICKET-4069] – Wickettester: submit select via AJAX

Spring 3.1 – No more XML?

Spring SourceNo more XML. Wait, I though Spring is all about XML? Not anymore.

As we could create spring application context without XML previously – now its easier than ever.

View new Spring 3.1 features that I wish to use:

  1. Spring Cache – finally got integrated into spring since v0.9 ( see blog about Cache Abstraction ), will also allow to control Cache Aspect order vs Transaction Aspect to make sure that cacheable don’t create transactions
  2. PropertySource Abstraction – Unified Property Management (SpringSource Team Blog)
  3. JPA EntityManagerFactory bootstrapping without persistence.xml – will allow creating JPA entities without XML config. Finally!

Other fancy stuff that you can find here: New Features and Enhancements in Spring 3.1

Can’t wait for the RELEASE version!