skip to main |
skip to sidebar
- A "series of (currently 5) articles introduces Contexts and Dependency Injection for Java EE (CDI), a key part of the Java EE 6 platform. Standardized via JSR 299, CDI is the de-facto API for comprehensive next-generation type-safe dependency injection as well as robust context management for Java EE. Led by Gavin King, JSR 299 aims to synthesize the best-of-breed features from solutions like Seam, Guice and Spring while adding many useful innovations of its own".
- An extensive tutorial on creating a Spring MVC based mobile web application using MyEclipse. The IDE has already an iPhone skinned version built in, this tutorial shows how to add other mobile handsets like Android and Palm Pre. Basically: providing another style :)

- How to use Apache ActiveMQ in combination with Spring.
- Why ACID is hard to scale. and an argument that NoSQL/NoACID is the lazy way around these difficulties. Here's a post considering the performance argument for switching to a NoSQL database.
- Great interesting series on the progress of converting the native code BBC News iPhone/iPad app to a web app using HTML5.
- Twitter and Digg are moving from MySQL to Cassandra (a highly scalable second-generation distributed database, bringing together Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model; a Facebook opensourced project). The reason for Digg for the move "is the increasing difficulty of building a high-performance, write-intensive application on a data set that is growing quickly, with no end in sight. This growth has forced them into horizontal and vertical partitioning strategies that have eliminated most of the value of a relational database, while still incurring all the overhead".
Twitter has about the same reason: "No single points of failure", "Highly scalable writes (we have highly variable write traffic)", and "A healthy and productive open source community".
Twitter tried HBase, Voldemort, MongoDB, MemcacheDB, Redis, Cassandra, and HyperTable amongst others before deciding to go with Cassandra. Interesting to read is how they slowly rollout Cassandra to limited sets of users.
An introduction to Cassandra to get it up and running can be found here.

- A short post on how to implement Automatic testing Oracle Service Bus using Hudson, Maven and SoapUI.
- What to expect from HTML5 for webdevelopers.
- A summary of an interview with Erich Gamma, Richard Helm, and Ralph Johnson, three of the Gang of Four who wrote Design Patterns: Elements of Reusable Object-Oriented Software 15 years ago. The full interview here.
- Five web frameworks comparison: Shale, Struts, Wicket, WebWork, Rails, JBossSeam, MyFaces and Spring.
- Jeff Dean (Google Fellow) on large-scale computing (PDF) during Ladis 2009. Interesting numbers regarding reliability and availability for hardware, like 1-5% of your disks will die. And even if you got very reliable servers with MTBF of 30 years, if you have 10000 of those, that means see one fail each day! And: "a web search touches 50+ separate services, 1000s machines". Some more of these quotes:
- "Better to give users limited functionality than an error page"
- "Ensure your design works if scale changes by 10X or 20X but the right solution for X often not optimal for 100X"
- Monitoring: "If your system is slow or misbehaving, can you figure out why?"
- "Future scale: ~106 to 107 machines, ~1013 directories, ~1018 bytes of storage, spread at 100s to 1000s of locations around the world, ~109 client machines"
Other subjects touched: MapReduce and BigTable.

- Blogpost that briefly touches a few types of complexity encountered in large software (web) projects.
- A quite in-depth article on creating highly-scalable components in Java. Described are the ideas used to create the concurrent Java components in the Amino Library Project (a set of concurrent building blocks).
- Another SOA Design Pattern sample chapter from Thomas Erl' book "SOA Design Patterns": "Service Governance Patterns, comprising a number of 8 patters. Compatible Change and Version Identification deal with service versioning. Termination Notification addresses the final phase of a service, it’s retirement. Service Refactoring explains how to deal with changing service contracts. Service Decomposition, Proxy Capability, and Decomposed Capability include techniques needed to express coarse-grained services through multiple fine-grained ones. Distributed Capability helps increasing service scalability through processing deferral."
- To ESB or not to ESB? Including a nine points checklist. Note that the article is from the creator of Mule (a lightweight ESB). Check also the comments here.
- Interesting hack to reduce startup latency for mobile devices with HTML5: put the Javascript code in comments (thus /* */), such that is immediately downloaded but not evaluated. Then to load it when needed, parse the text, strip out the comment-tags & do an eval().
- Always feeling a bit less up-to-date when using RSS/Atom feeds? Well, convince your RSS/Atom provider to implement the PubSubHubBub protocol: it provides a callback-hook, which when registered to as feed subscriber, causes an immediate update (ping) to the subscriber (instead of waiting for the next RSS/Atom feed request).
Or will rssCloud be the winner of this realtime RSS extension? Here's the basic (simpler) flow of rssCloud:

Differences between the two are described here (including some issues) and here. A real old-fashioned flame-war has even started between the creators of the two protocols.
And a good comparison which explains quite well why PuSH is the better choice of the two. Note that both protocols seem to be server-to-server only! (e.g think when you're behind a firewall or NAT...)
See this article for an explanation of the PuSH flow of notifications/information in below's diagram:

Update: PubSubHubbub explained by co-creator Brett Slatkin (an engineer at Google).
- Want to get to know Hadoop? In short "Hadoop allows you to write and run your application in a distributed manner and process large amounts of data with it. It consists out of a MapReduce implementation and a distributed file system." Check the rest of this introduction for more details.
- Five Java anti-patterns to prevent (out-of) memory problems.
- Three Best and three worst practices in BPM and SOA.
- "Tom Killalea, Vice President of technology with responsibility for infrastructure and distributed systems engineering at Amazon.com wrote an article on ACM queue on building scalable web services. He outlines guiding principles to building scalable web services with a lot of real-world examples, the core theme of which is “build only what you need”."
- "A discussion on the lifecycle processes of SOA governance, how SOA governance can become more mature, and how a maturity model can be used to support this growth, and the role of the architect in SOA governance, providing some practical guidelines for architects in a maturing SOA environment."
- Two great interviews with Jeff Davis about his "Open Source SOA" book, recently released. The first interview has mainly questions about the book itself. The second interview has quite some questions about stuff not in the book. A free excerpt of 1 chapter of the book is also available for download! The book itself describes many open source SOA products, helping you in selecting the right one and how/where to use it. Btw, CEP = Complex Event Processing. See for more here.
- jQuery 1.3 optimisation & advanced tips including example code on: unbind(), live()/die(), Ajax Queue and Ajax Sync, and Namespaces.
- Summary of implementations of the Builder pattern suggested by Joshua Blog during JavaOne 2007. Note that it is different from the GoF pattern.
Related: interview with Joshua Bloch with many tips and best practices, most referring to Effictive Java 2nd Edition. E.g: generics, enums, annotataions, wildcards, lazy initialisation, strange things about Java.
- Kind of obvious observation (but still worth mentioning :) viewpoint on scalable web architectures and application state: don't store everything in the database, but treat (and "store") application state, cached data, and persistent data differently, using dedicated tools to manage these.
- This week Wicket 1.4 has been released.
- Facebook is now also supporting registration/login via a GMail account and OpenID, see the image below. I especially like that they've implemented it with a lightbox ("popup") so the user doesn't get as much confused anymore, as was the case in the old/standard implementation where the user is completely redirected to Google or the OpenID provider's website. Note that it is actually more "Facebook Connect" like this way! See here another example where OpenID is combined with OAuth to enable a popup login.

- Understanding how the JVM uses native memory on Windows and Linux. The extensive article explains what native memory is, how the Java runtime uses it, what running out of it looks like (so you're not running out of heap space!), and how to debug a native OutOfMemoryError on Windows and Linux. A companion article covers the same topics for AIX systems.
- Quite big news was of course Google's announcement of Google Wave at the Google I/O conference. It has been built with GWT. A good description can be found here. It's open source with plugin-like APIs with many integration possibilities. See the 80 minutes video for the full details. It hopes to become the replacement for email... Servers can be run by anybody. Wonder how Google is thinking of making money with it. Ads, just like in GMail? Maybe they are going to charge you for using their Wave server instances (SAAS version)? An interview with Wave's creators can be found here. And six reasons why Wave could be game-changing.
- Eight generic best practices for scalable high performance systems.
- Are you any of these two tools with almnost the exact same name? SonarJ is a plug-in for Eclipse that helps you validate your code against a software architecture, using static analysis (free for projects up to 500 classes). And now for the confusion: check also Sonar: enables to collect, analyze and report metrics on source code. It leverages the existing ecosystem of quality open source tools (ex. Checkstyle, PMD, Maven, Cobertura …), to offer a fully integrated solution to development environments and continuous integration tools.
- Reference to an AJAX framework analysis/comparison result by Matt Raible (for example known for his framework of frameworks: AppFuse). Compared were Dojo, Ext JS, GWT, and YUI. Check also the comments.
- Beginners level host and Java performance tuning concepts.
- Handy PHP profiler and debugging tool/library. Helps you with logging, memory usage, double includes, page execution time and database activity monitoring.
- Nice presentation on scalable web architectures from Cal Henderson, (ex) Flicker architect. Including horizontal vs vertical, architecture, sessions, load balancing, queuing, relational data, caching, H(ighly) A(vailable) data, federation, serving and storing files, CDN, real-world examples.
- SpringSource has created Roo, a sophisticated round-tripping code generator that should make it quicker and easier to create and evolve Spring applications.
- Funny: how to measure code quality: WTFs/minute :)

Via.
- You as a developer can now go social on IBM's myDeveloperWorks, a social network spun off of developerWorks.
- An introduction on how one could formalize a SOA using WS-CDL, including a few real-world insurance based uses.
- Yahoo has just released a major update for their innovative YQL. "The Yahoo! Query Language lets you query, filter, and join data across any web data source or service on the web. Using our YQL web service, apps run faster with fewer lines of code and a smaller network footprint. YQL uses a SQL-like language because it is a familiar and intuitive method for developers to access data. YQL treats the entire web as a source of table data, enabling developers to select * from Internet." The update adds "Execute", with which "developers now have full control of how the data is fetched into YQL and how it’s presented back to the user. With Open Data Tables, developers can build tables that manipulate, change, and sign the URLs to access almost any protected content, allowing YQL access and combining data across a variety of different authenticated services such as Netflix or Twitter. Developers can call multiple services and data sources within Execute to join and mashup data however they desire, letting Yahoo! do the work rather than their applications. Data can be tweaked and manipulated into an optimal format for applications to consume." Another example of what is possible can be found here. Check also this article for more explanations.
- How can you make sure your site can handle peak-loads? This article lists the possibilities:
- Over-provisioning (estimating what the peak will be).
- Under-provisioning.
- Right-sizing: estimate for a short period in time, then scale up or down: flexible scaling and auto-scaling.
How this can be achieved? Add a middleware virtualisation layer that helps the application take advantage of these new dynamically added resources. The article also describes in detail how to add auto-scaling to your existing application, including a description how to try it out on GigaSpaces XAP which uses EC2.
- Quite amazing, Salesforce.com runs on only about 1000 servers (and that's mirrored, so only really about 500 servers). Salesforce has more than 55K enterprise customers, 1.5M individual subscribers, 30M lines of third-party code and hundreds of TBs of data.
- Here's a list of criteria when selecting a SOA testing tool.
- A nice introduction to Hibernate's second-level cache.
- Five tips for successfully deploying Maven. Including a bunch of pros and cons in the comments.
- On a keep-an-eye-on-this-innovation side note, Digg introduced a interesting (new?) way of a URL shortener like TinyURL, and at the same time attract traffic. Just prefix any URL with http://digg.com/, and voila, a shortened URL appears including a Digg toolbar. Below I entered http://digg.com/http://ttlnews.blogspot.com/ in the address bar:

- An update how OpenSocial is doing...
- 12 good Hibernate tips you might not know.
- A list of the 10 worst scalability practices/anti-patterns for large distributed systems. The areas covered are: the golden hammer: use of only 1 technology, resource abuse, big ball of mud: bad versioning/deployment management, everything or something: packaging of the application, forgetting to check the time (did you know that only just recently, since JDK 1.5, you can set timeout on reads on HTTPURLConnection? And that DNS lookups in Java are cached for the lifetime of the JVM unless configured differently?), the hero pattern: one operational "do it all", not automating deployment, build etc, and finally: monitoring of the system.
- In case you lived under a rock the last week without Internet access :-), Google introduced its browser: Chrome.
A couple of interesting things from posts around The Net: Chrome does a better job on the ACID test than the latest Firefox 3 build and IE 7.
The first performances tests show that Chrome's performance is outperforming all the current browsers!
Mozilla countered this with another test using their new javascript engine TraceMonkey, which should be released by the end of the year in Firefox 3.1. And this is the current standing in browser marketshare.
Quite a big surprise is that it is currently only available for Windows. Clearly Google is going for marketshare by addressing the users of the most used operating system... And finally, below is an overview how Chrome got its logo (via neatorama, with custom edit):

- Real world cases used to describe vertical scaling for Java EE applications. Definitely check also the comments.
- An interesting theory and technology: host-proof hosting. This is a technique where the browser encrypts the data to be stored on the server, such that the host (application) only sees encrypted data, thus completely preventing the host from seeing the actual contents of the user data. Thus enables for "zero knowledge web applications". Two examples of implementations are Clipperz (sourcecode partially AGPL v3) and Passpack (sourcecode MIT license).

- Visualize your code in CVS with this Visual Code Navigator. Too bad that's CVS, which is quite old. Hopefully there'll be an SVN version soon!
- Sun this week released their
Sun Java Mobile Enterprise Platform 1.0: "MEP is a framework for developing mobile enterprise applications. Based on robust synchronization technologies, it enables enterprise users to synchronize enterprise data (from back-end systems like Siebel or SAP) with their mobile devices. In a nutshell, MEP enables enterprise users to carry the enterprise in their pockets". You can get a free evaluation here.
- Very interesting post about the Fotolog architecture. Note that they re-implemented a PHP part of the site in Java to improve performance! And they have to be scalable regarding these numbers for example: "300 Million photos and over 500,000 photos are uploaded each day. Over 30,000 new members are added each day and attracts more than 4.6 million daily users."
- This is a good comparison and overview of 4 open source version control systems: CVS, SVN, Bazaar and Mercurial. The last two take a distributed repository approach, in contrast to a central repository approach like CVS and SVN.
- Good high level overview of the history of software development. From the Waterfall Model to the current Agile (Iterative) Model. The main gain in all these years is that now it is possible to create quite complex systems with significant less persons because of the progress modern program languages and libraries have made. All of which you already knew of course, even if you didn't start in the 70's... ;-)
- James Gosling made the (quite logical) announcement earlier this week that in the future (mobile) devices will get so powerful there won't be the need for a separate Java Micro Edition anymore; there will be only one Java SE (Standard Edition). Also a few interesting points about the upcoming Java 6 update N (preload of the Consumer Java Runtime at computer boot), which should be available a few months into 2008, preparing the desktops for JavaFX.