The best articles and links to interesting posts for technical team leaders building sophisticated websites, applications and mobile apps.
Think about: software architecture, hardware architecture, design, programming, frameworks, scalability, performance, quality assurance, security, resolving issues, fixing bugs and Android.
A description of key concepts in Extreme Transaction Processing (XTP) Patterns: Write-behind Caching. In contrast to write-through caching, the write-behind function batches updates to the back-end database asynchronously within a user configurable interval of time. Also a business use case is described with performance improvement charts. Biggest disadvantage of write-behind is that the database is not always having the latest state available!
Google is slowly pulling the plugonGears (mainly used as offline browser storage) in favor of HTML5; see the posts for a bunch of reasons. Google: "We're continuing to support Gears so that nothing breaks for sites that use it. But we expect developers to use HTML5 for these features moving forward as it's a standards-based approach that will be available across all browsers."
"Closure Compiler is a JavaScript optimizer that compiles web apps down into compact, high-performance JavaScript code."
"Closure Library is a broad, well-tested, modular, and cross-browser JavaScript library. Web developers can pull just what they need from a wide set of reusable UI widgets and controls, as well as lower-level utilities for the DOM, server communication, animation, data structures, unit testing, rich-text editing, and much, much more."
"Closure Templates grew out of a desire for web templates that are precompiled to efficient JavaScript."
"Closure Inspector, a Firebug extension that makes debugging the obfuscated code almost as easy as debugging the human-readable source."
This week Google introduced the first version of its Chrome OS. Here's a pretty good explanation on how it differs from current operating systems. And here are 5 (other) points describing them:
"The browser is the OS",
"It’s designed to fix itself",
"All apps are web apps, no installations", (sounds like Citrix to me ;)
"Chrome OS doesn’t support drivers and will not run on your laptop",
Great, here you can download chapters 20, 21, 22 for free from the book "Web Service Contract Design and Versioning for SOA" by Thomas Erl, Anish Karmarkar, Priscilla Walmsley, Hugo Haas, L. Umit Yalcinalp, Canyang Kevin Liu, David Orchard, Andre Tost, James Pasley. These chapters address the issues related to service contract versioning. In those chapters described are versioning of WSDL and schema definitions.
A post on experiences with Git coming from Subversion. Too bad the reasons why the author is having more and more problems with Subversion were not given. Though you can deduct (some(?) of) them from the text.
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"
Presentation at Oracle Open World 2009 - how to turn any ADF application into a SaaS application - an application suitable for deployment on the cloud. Includes short description of a SaaS, benefits, concerns, and several requirements. These requirements include customisation of fields shown to the user (e.g show or not show depending on the user or location) and i18n. Technologies suggested to achieve this are Oracle EBR, (WSRP) portlets, WebCenter, deep linking (tricky in JSF) and ESB.
Opening up your data as a company is great for potentially generating new business. But how to secure them? Here's a summary of references on how to secure APIs and mashups.
"The Java EE Container Redeploy & Restart Report comes from a survey conducted over the summer, with over 1100 Java EE developer respondents. It analyzes time spent on the Redeploy and Restart process, and compares the following containers: GlassFish, Jetty, Tomcat, WebSphere and WebLogic. Among other results, this report shows that Java EE developers are spending 3 to 7 work weeks a year on redeploys and restarts, depending on their container of choice." Check also the comments here Great reference in the comments for fast-change+ctrl-s+reload-browser experience with Weblogic FastSwap and Oracle Enterprise Pack for Eclipse.
Last week was Oracle Open World 2009. Beside for Oracle DBMS and SOA specialists, these days the event is definitely also very relevant to Java professionals because of Oracle's (almost official) acquisition of Sun this year. Here's a set of relevant information from OOW:
The keynote on sunday which also describes the plans Oracle has with Java, MySQL and Sun hardware
James Gosling explaining to the developer audience what Sun was doing, what the scale is of Java activity around the world and across technology platforms.
The Dutch software company Amis also did quite a few presentations at OOW. Some of those presentations were already online before they were actually presented! All were interesting:
Edition Based Redefinition (EBR): "Every database object (well, almost every database object - not tables!) can have different implementations/incarnations/versions in various editions. The object versions are all in the same schema - they only differ in the Edition they are created in." So no more direct table access! No big bang needed anymore. Challenges: what if a mandatory column is removed or added from the current EBR view (answer: special triggers). Including 2 suggestions for best practices.
This "session introduces SOA and the new Oracle SOA Suite 11g to the realm of database professionals from which it sometimes seems so far removed. What are the key SOA concepts and objectives? What is at the heart of Oracle SOA Suite 11g: composite applications, BPEL PM, and the mediator. The session shows how SOA services can be leveraged from the database, from triggers, PL/SQL units, or even SQL and how the database can publish events to the event delivery network. It covers how the SOA infrastructure can access the database, primarily using Oracle Database and Oracle Advanced Queueing adapter and how database developers can help in doing so efficiently. It ends with hints for applying SOA concepts to "normal" database development."
Bit oriented at the database professional, but still interesting for those who want to stay up to date with Oracle's DMBS possibilities. And a bit scary too: it is possible in 11g to make webservice calls and publish them from the database(!). For example from PL/SLQ and put a webservice in front of PL/SQL... I haven't come up with a practical situation where you'd want to do this from an architectural point of view: large risk to getting tightly coupled systems and dependencies. If you have heavily invested (i.e built) in PL/SQL, it might be a valid option though.
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().
"Tony Hoare introduced Null references in ALGOL W back in 1965 “simply because it was so easy to implement”, says Mr. Hoare. He talks about that decision considering it “my billion-dollar mistake”. Tony Hoare, is a British computer scientist, probably best known for the development in 1960, at age 26, of Quicksort. He also developed Hoare logic, the formal language Communicating Sequential Processes (CSP), and inspired the Occam programming language."
"Peter Thomas has updated his web framework performance benchmark with Grails and Tapestry. Apache Wicket still leads the best of breed frameworks in terms of request times and memory usage." Other observations:
Grails was far more productive than Tapestry 5. This was mainly due to the documentation quality of Grails compared to the scattered and not very well organized Tapestry documentation.
Ease of writing custom tag-libraries is IMO one of the best things about Grails.
Grails still has some way to go in terms of performance. I am told that significant performance optimizations for GSP will make it into 1.2
Session usage of the Seam + JSF combination is significantly higher compared to all the rest, around 760 KB per session."
"Mckoi Distributed Database (MckoiDDB) is a database system used by software developers to create applications that store data over a cluster of machines in a network. It is designed to be used in online environments where there are very large sets of both small and big data items that need to be stored, accessed and indexed efficiently in a network cluster. The focus of the MckoiDDB architecture is to support low latency query performance, provide strong data consistency through snapshot transaction isolation, and provide tools to manage logical data models that may change dramatically in physical network environments that may experience similar dramatic change. MckoiDDB is written in 100% Java and runs on any operating system that supports Java 1.6. MckoiDDB is released under the GPLv3 open source license."
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:
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.
"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”."
Scala is slowly getting some more and more traction lately. Is it a potential long term replacement for Java? Interview with Scala creator Martin Odersky where he tells its history, future and why it's so interesting (like combining OO- and functional techniques).
Six valid "takeaways on what most REST adopters can and should do to get the most from their use of this increasingly popular architectural style" summarised by Dion Hinchcliffe.
Article that describes using Benerator, which is a data generator tool that can be used to feed database with pseudo-random test data.
Tip that shows you how to implement composite keys with JPA and Hibernate. Check also the comments here.
Wondering whether you should add this new piece of functionality quick & dirty or take a bit longer, but cleaner? Taking the first one sets you up for a Technical Debt, as some more explained by Martin Fowler.
"Test logic can be buried in this unrelated code, which has nothing to do with test logic itself, making test code hard to read and maintain. In this article, the layered architecture of test automation is presented to solve this problem. In this layered architecture, the test automation code is divided into three layers: (1) test cases, focusing on the test logic of the application, (2) the domain layer, modeling the system under test in domain terms, encapsulating http requests, browser control, result parsing logic and providing an interface for the test cases layer, (3) the system under test, which layer 2 will operate directly on."
From The Open Group two free PDF books: "The Open Group SOA Integration Maturity Model (OSIMM) provides consultants and IT practitioners with a means to assess an organization’s Service Oriented Architecture (SOA) maturity level." "This document describes a framework that provides context and definitions to enable organizations to understand and deploy SOA Governance."
The JavaServer Faces 2.0 specification (included in JEE6) got finalised last May. Here's a reference to it and a set of references related to this specification.
Great introduction to Solr, a search server (and more). The article describes how to get it running, send it some documents to index and how to search those documents in a controlled way.
More details on Google Wave: the draft specification for the Google Wave Federation Protocol and the Java source code for the Google Wave Federation Prototype Server
An extensive comparison of Spring and Seam. And, recently added chapter 5, comparing them with Wicket 1.3.6. Too long for you to read? Then at least read the conclusion :) Talking about Wicket, here are some experiences written down on migrating an existing Wicket application to the new 1.4 version.
This article provides a short overview on the basics of RESTful HTTP and discusses typical issues that developers face when they design RESTful HTTP applications. It shows how to apply the REST architecture style in practice. It describes commonly used approaches to name URIs, discusses how to interact with resources through the Uniform interface, when to use PUT or POST and how to support non-CRUD operations. Related to that, here's 8 great tips/lessons learned for creating an API.
Here's a basic list of software architecture review guidelines. You can definitely also use it as a starting point for your documentation, or to see if your documentation is covering it all.
And related to the previous one, here's a short summary with interesting results on stress testing the Amazon EC2, Google AppLogic and Microsoft Azure cloud solutions. Bascically, the performance quite varied and response times varied by a factor of 20! And good to know: on Google AppEngine, any task can not last longer than 30 seconds!
Need to know "everything" about Java Generics? Then this large PDF Java Generics FAQs - Frequently Asked Questions is for you. Think you know everything about Generics? It still might be for you. For example, do you know what this says: "Enum<E extends Enum<E>>"? Or can you follow this one: "Can I use the type parameter of an outer type as part of the bounds of the type parameter of an inner type or a method?"? :)
Always interesting the Gartner 2009 Hype Cycle. For example, Web 2.0 is already on the way up again, while microblogging (e.g Twitter) is starting its downward trend.
Code review tools Review Board: "is a powerful web-based code review tool that offers developers an easy way to handle code reviews. It scales well from small projects to large companies and offers a variety of tools to take much of the stress and time out of the code review process." Downloadable.
Great description on how full-scale Scrum was applied at a JTeam project. It includes answer to the why and what went well and what can be improved. Also shortly the used technologies are described (Spring, Spring WS, Spring MVC, JPA, JExcelApi, Apache Commons for FTP, iText for addresslabels with bar codes, jQuery and Google Maps, Mockito (see this post on why they switched from EasyMock), MockFTPServer and Subethamail Wiser for email integration testing. Again, great that they share this publicly.
Discussion of the quality assurance/testing challenges to be addressed with a SOA adoption, recommended best practices, and lessons learned.
More or less a beginner's introduction to the Java Collections framework and algorithms. Sample chapter from "Core Java 2, Volume II - Advanced Features 7th Edition". Uses CircularArrayQueue and LinkedListQueue as examples (how often have you used those two? ;)
Overview of StackOverflow.com's architecture, including general tips. The tools are MS, but the mentioned principles apply everywhere. Quite a lot on scaling up and out. Also included is how Saleforce.com solved its perforance problems in the database (Oracle).
"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.
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.
Pretty basic SOAP monitor (proxy) that allows you to edit SOAP messages before sending them on. Does not support a proxy (yet).
IBM recently released Milepost GCC (website has styling from 1998 ;), a "compiler which analyses the software and determines which code optimizations will be most effective during compilation using machine learning techniques. Experiments carried out with the compiler achieved an average 18% performance improvement. The compiler is expected to significantly reduce time-to-market of new software, because lengthy manual optimization can now be carried out by the compiler." Related to that is also the Collective Tuning wiki, dedicated to developing self-tuning computing systems.
ZeroTurnaround "has released the results of their "Java EE Containers - Heaven or Hell" survey. Using responses from 700 respondents, they cover topics such as: containers most often used on large projects, fastest container, redeploy times and annual costs of redeployment in a series of charts and calculations. Both the charts and raw data are made available for your own analysis."
Looking for petabyte and beyond scale storage? The opensource project Ceph might be an option: it is a distributed network file system designed to provide excellent performance, reliability, and scalability.
Several basic and advanced JPA implementation patterns can be found here.
Pretty high impact news: The W3C standards organisation has decided to let XHTML 2 go in favor of HTML 5. XHTML 2 was a "cleaner and better-architected version of HTML" but not backwards compatible with the current HTML standards and current browsers. Incrementally improving the current standards is what is headed for now. W3C is already involved in HTML 5.
YourKitdescribed for finding Java memory leaks. Free for opensource projects, otherwise commercial licensing.
Virtual Javascript keyboard (API) such that different languages can be used as input, without the need for a special fysically present keyboard (e.g for arabic letters)).
10 criteria that can be used to determine whether a product has good code generation support.
Great extensive article from Martin Fowler on the Scrum daily stand-up meetings, including tips on: benefits and consequences of common practices for daily stand-ups, how to run them effectively, stand-up patterns, what to talk about, when to run them, and the goals, to help beginners and remind experienced practitioners.
A few weeks ago Google introduced Speed, its open source effort to all make the web faster. Looking at some of the feedback, it seems to currently contain only basic best-practices tips.
A Google site dedicated to deploying Google Apps in an enterprise (more than 100 users).
Which on is the best of these agile methodologies: Scrum or Kanban? Differences and similarities are described. The unsurprising answer: it depends on the situation :) My conclusion: Kanban has less "rules" to follow and thus might be a better suit for experienced agile developers.
A handy opensource Java library (no i18n yet) for showing real user friendly times, like "in 3 minutes", formats you see on many social sites like Digg and Facebook: PrettyTime.
This blogpost describes how's the opensource project MySQL fork Drizzle handling code contributions and testing. Some rules for the 100+ contributors are:
No code will be accepted that works by disabling any existing tests
It is not allowed to contribute code that causes a compiler warning
This week I performed a short research on tools being able to generate Java classes from XSDs. All I wanted to use it for is generate my domainmodel classes, nothing more, nothing less. No need for Java <--> XML binding/conversions. Another requirement was that the generated code should not contain any dependencies on that tool. Finally, it has to run under JDK 1.4 too :( Because of that last requirement, this summary was already quite handy. Well, I thought the research would be pretty easy, but it wasn't. Actually, in the end I didn't succeed. None of the below tools generate code that has no tool-specific imports. Do you know of any tool that should do it? Let me (us :) know in the comments! Below a summary of my findings:
Castor 0.9.x and 1.3: generates classes (no interfaces), with matching Descriptor classes per class that can be used to validate the created object. Imports org.castor.* stuff.
XMLBeans 2.4.0 generates interfaces and implementing classes. Both import xmlbeans classes.
JAXB 1.0 generates interfaces, implementing classes and runtime classes (haven't figured out what that is exactly). Imports JAXB classes/interfaces.
XMLSpy 2006 Enterprise Edition: generates classes. Looks more like you expect, "one class per type". But also needs com.altova.* imports.
Another article with more details and explanation on WOA by Dion HinchCliffe. Web Oriented Architecture: it's a set of best practices for designing Web applications in which REST is the foundational architectural style. Below the stack:
Presentation from the author of POJOs in Action on running Java applications in Amazon's EC2. Shortly describes the opensource project Cloud Tools that can be used to configure Tomcat, MySQL, Apache, JMeter, (cluster) deployment etc. CT also includes AMIs pre-installed with these tools and a Maven and Grails plugin. A couple of sample deployment architectures are shown too. Tiny bit older presentation because it does not mention the AWS Management Console.
Of course you know YSlow, which helps you analysing your webpage load time, and then gives you tips on how to improve it. Google has just opensourced its similar tool Page Speed, but with tips based upon different insights. It's a Firefox add-on integrated with Firebug.
A 42 minutes presentation by LinkedIn's engineers on exploring the best available technologies which could be used to build its next generation architecture. "The new architecture involved using OSGI/Spring DM as the foundation because it had the right properties we were interested in. The code was migrated to a more modular paradigm using binary consumption. The session will demonstrate how they integrated OSGi, the pros and cons of the changes, the pain points as well as the migration strategy."
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.
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.
Tutorial in which you learn to build an SOA application which is listening for incidents coming from web service or files. According to the origin, the content (= incidents) are transformed into their corresponding objects using for the CSV file, a new Camel component : camel-bindy and for the Web Service camel-cxf component. Each message transformed is placed in a queue handled by ActiveMQ engine. All the messages (containing the objects) are next processed by a Bean service who will (with the help of injection of dependency provided by Spring) save the incidents in a DB using Spring and Hibernate frameworks. A small Apache Wicket web application running in Jetty Web server provide to the users a screen to consult the incidents created.
WiQuery aims to integrate the JavaScript frameworks jQuery and jQuery UI with Wicket, a Java framework providing a real way to create web applications with an OO approach. Other integrations like with MooTools, Dojo and Scriptaculous with Prototype can be found here. BTW, a comparison between MooTools and jQuery can be found here.
About three weeks ago, a serious vulnerability was detected in OAuth: a Session Fixation Attack. This article describes how the hole was handled by the 30 or so companies offering OAuth, and how Twitter took the heat for it.
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.
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.
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.
Here's a presentation of Facebook's application stack during QCon SF 2008. In short: "Facebook runs a typical LAMP setup where P stands for PHP with certain customizations, and back-end services that are written in C++ and Java. Facebook has released some of the infrastructure components into the open source community, including the Thrift RPC framework and Scribe distributed logging server". Summary via Slashdot.
An interesting new opensource technique developed by the guys from Digg for optimizing delivery of AJAX-enabled pages regarding the many HTTP requests needed and caching challenges.
The big bigger biggest (sad?) news this week was of course Oracle going to buy Sun (here's Oracle's announcement). Rod Johnson (from SpringSource) is wondering what Oracle actually did buy. He concludes luckily one of the great strengths of Java is its developer and open source community, thus Oracle does not own the future of Java. Makes sense.
Alef Arendsen (previously SpringSource, now JTeam) wonders which company/group will be the next, since only a few large opensource bodies are left: "the Apache Software Foundation (ASF), products in the Eclipse Foundation, products carying the JBoss name and last but not least, a broad set of products under the SpringSource umbrella".
Sun "invited Oracle president Charles Phillips and chief corporate architect Edward Screven to an employee-only town hall last Wednesday", answering employee questions. In short: Oracle loves Sun's software (Java, MySQL) and hardware, but the future is unclear for OpenOffice and Sun's cloud effort.
"Jitr (pronounced "jitter") is a JUnit Integration Test Runner. It allows your web application integration tests to easily run against a lightweight web container in the same JVM as your tests."
Twitter has been starting to replace some Ruby on Rails backend functionality with Scala (which has Java compatibility) on a JVM. Read here in detail why. In short:
Here's a runthrough of getting a Wicket Hello World example running on GAE.
Google also tries to introduce a new standard to easily take your contacts with you to other sites: Portable Contacts. It's used in combination with OAuth.
Talking about scanners and security, here's a free HP Flash .swf scanner that decompiles it and searches for well known leaks.
Great survey results on Javascript/RIA frameworks. Questions surveyed were: which frameworks do you use the most, quality on documentation and community support, performance, ease of implementation, popularity, and 3rd party plugins quality.
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.
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:
Need to know whether a collection is modified concurrently, which causes the ConcurrentModificationException? Check this handy wrapper solution here.
The second article in the Transaction strategies series. "Using examples from the Spring Framework and the Enterprise JavaBeans (EJB) 3.0 specification, explained is how the transaction models work and how they can form the basis for developing transaction strategies ranging from basic transaction processing to high-speed transaction-processing systems".
For the Amazon EC2 now a free AWS Eclipse plugin is available. It facilitates remote development, deployment, and debugging Java applications on Amazon Web Services.
Three common mistakes to avoid when implementing XML and webservices: don't make your messages too large, don't create too fine-grained services, and don't forget to create an XML schema.
Javascript is getting more and more important the last couple of years, so here's a bunch of best practices and efficiency tips.
Dynamic languages (e.g Rails, PHP compared to Java/.Net)
Social computing
Crowdsourcing and peer production architectures
New Application Models (e.g the symantic web, opensocial, widgets)
Elaborate explanation of managing boilerplate text (e.g. titles, button labels, prompt, error messages, tool tips) in JSF applications. This includes more advanced locale requirements, like certain text that needs to be different when shown to junior and senior users.
Here's a nice diagram with an overview of what activities are needed to create a website, from idea to support and everything in between.
Always annoyed that you have to manually close a resource like InputStreams, Connections etc? And that the first exception might be surpressed by the second in the finally block? Here's a suggested solution: the Automatic Resource Management pattern by Joshua Bloch.
Of course you've heard/read that Microsoft has released IE8 last week. Here's a bunch of tips when migrating your site from IE7 to IE8.
Ever need to create a UUID/GUID? Here's a few offline generators compared. uuidgen is an online UUID generator supporting version 1 and 4. A handy FAQ on UUIDs with some more depth can be found here.
A wiki constructed with over four dozen architects: 97 things every software architect should know. Also now available as a book. It includes advice such as:
Don't Put Your Resume Ahead of the Requirements (Nitin Borwankar)
Chances Are, Your Biggest Problem Isn't Technical (Mark Ramm)
Communication Is King; Clarity and Leadership, Its Humble Servants (Mark Richards)
Simplicity Before Generality, Use Before Reuse (Kevlin Henney)
For the End User, the Interface Is the System (Vinayak Hegde)
It's Never Too Early to Think About Performance (Rebecca Parsons)
Sample chapter from Thomas Erl's latest SOA Design Patterns book, and an interview with him. He "talks about the main benefits of having a pattern catalog, SOA and Web services, the current state of SOA, the difference between SOA and service orientation, and the role of patterns in SOA adoption".
Handy piece of (alpha) software to test IE8 RC1, IE7, IE6 and IE5.5 on Vista and XP. Note that it looks like Microsoft is releasing IE8 this coming week, so get ready...
The UI teamlead of Google's Chrome browser explained at a presentation why they decided to build Chrome. Basically because all the existing browsers suck :-)
I'm a professional software designer/architect/developer/software engineer with over 25 years of experience. For many years I've been a Technical Team Lead for complex software engineering projects. My main area of focus is Java/Kotlin microservice architectures and related challenges (design, scalability, performance etcetera). Currently Kotlin has got a lot of my attention. I will be posting lessons learned, and lessons that I'll be learning during the coming years :-)