Wednesday, September 30, 2009
Sunday, September 27, 2009
As I'm a customary animal, everyday I open my browser and go along the same Internet path. As I'm a faithful Google user, one of the pages I often open is iGoogle. Today I thought my eyes were failing when I realized I was seeing the simplest and oddest Google doodle I've ever seen. Who can I ask about it? Google, of course. The first thing I did was saving that doodle to the disk and its very name gave the answer:
Happy birthday Google!
This is really good news because now you can sync your mail, your calendar and your contacts with your iPhone. As I was already using Google Sync for contacts and calendars, setting up GMail push was really easy: just the flip of a switch!
If you haven't set up your Google Sync account on your iPhone, just follow the instructions on the Google Sync web site.
As far as I can tell, mail is pushed to the iPhone almost instantaneously. Nonetheless, there's a thing I'm not really happy about. I miss is a notification popup: no one is ever shown and the counter on the mail icon is the only information you're given when a mail is pushed:
I would expect a mail to be managed just like an SMS or even a phone call: checking periodically sort of defies the purpose of a push notification...
Thursday, September 10, 2009
Saturday, September 5, 2009
The validation process (in a nutshell)
- perform all field-level constraints' validations
- perform all method-level constraints' validations
- perform class-level constraints' validations
- perform cascade validations
- the validation routine will avoid infinite loops, keeping track of the validated object instances in the current validation process
- the validation routine won't execute the same validation more than once for the same validation constraint, keeping track if it matched on a previous group match.
Constraints semantics and constraint validator visibility
- If you apply a constraint to an object's field or property, you're applying a validation rule to that field (as part of a type), but the validation routine visibility is limited to only that object. You cannot access values of other fields of your object during the validation of the fields' constraints.
- If you apply a constraint to a type, the validation routine visibility will be able to apply class' invariants (if you've got any) and any other validation rule whose parameters may be whichever part (be it field or property) that make up your type.
Basically, you'll use field-level (resp: property-level) constraints when you want to apply the validation rule to that field (resp.: property) as part of a type. For example, a String id field may be length-bounded when part of a type, such as a Passport (A String isn't length-bounded by definition).
You'll use class-level constraints when you want to apply a validation rule to the state of a type as a whole. For example, if you define a Passport type you would apply a class level constraint to check that the id-field is coherent with the Country field.
That's why the validation routine starts from inside the bean and proceeds outwards: you would not apply validation rules to an entire class instance state if some of the class' fields were invalid.
Constraint design principles and a constraint domain
- discover that you need both a set of constraints for the Y domain and another set for X.id domain.
- need constraints for the Y type but it's not yours.
Thursday, September 3, 2009
What was before the JSR 303?
The basic concept: the constraint
- How you would apply an instance of the constraint to a target. In other words, its interface.
- Who's going to implement the validation algorithm associated to that constraint.
- the constraint itself, let's call it Size
- the constraint configuration parameters: min and max.
- Define his own constraints.
- Implement his own constraints.
- Apply constraints to validation targets.
- Trigger the validation process when needed.
- network configuration (hostname, DNS, static IP addresses, etc.)
- network service which may clash