- An introduction to the Java Taste framework personalized recommendations. Taste is part of the larger Mahout framework, which features various scalable machine-learning algorithms.
- Great extensive 424 pages PDF report from Morgan Stanley on the current state of the mobile internet (apps and browser). A summary you can find here.
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.
Sunday, December 27, 2009
Best of this Week Summary 21 December - 27 December 2009
Sunday, December 20, 2009
Best of this Week Summary 14 December - 20 December 2009
- A basic explanation on why to use a service layer in (web) applications.
- 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!
- This seems like a good Amazon EC2 blog.
- A deeper dive into the parts of REST that many people do not understand and therefore do not discuss. These topics include the implications of:
- URLs as identifiers
- Freedom of Form
- Logically-connected, Late-binding Systems
- Hypertext as the Engine of State Transfer (HATEOS)
- URLs as identifiers
Sunday, December 13, 2009
Best of this Week Summary 07 December - 13 December 2009
- This week Java EE 6 and GlassFish 3.0 were released.
- Presentation on the Java architecture of SpotiChart.com, a site that creates a Spotify chart based on Spotifiy tweets on songs.
Includes:- Spring 3rc1 + Spring MVC 3
- Quartz
- Maven 3
- Hibernate, EHCache
- Transactional & multi-threading
- Ubuntu 9.04
- Tomcat 6 (single war)
- MySQL 5.1
- Twitter4j
- OpenFlashChart
- JTreeMap
- Rome (for Atom feeds)
- Use of URL shortening services
- Developed in 3 days(!)
- Statistics of the site
- Lessons learned
- Spring 3rc1 + Spring MVC 3
- Five Javascript performance tips.
- Read the interview with the writer of Javas SOA cookbook, including how he uses Agile in SOA projects. Includes a free download of the Governance chapter.
Sunday, December 6, 2009
Best of this Week Summary 30 November - 06 December 2009
- A top 10 of SOA myths revisited.
- Google is slowly pulling the plug on Gears (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."
- A couple of interesting Java topics found during Devoxx 2009: Kanban, Spring-ActionScript (Spring-Flex integration), and a couple of technologies to detect and prevent coding errors before they actually happen.
- True or false: if the comments are ugly, the code is ugly? I agree: if your comments are sloppy, you very likely also will be in the actual code?
Don't forget to read the referenced "three rules" C post.
Sunday, November 29, 2009
Best of this Week Summary 17 November - 29 November 2009
- Great overview of (most of) Spring's portfolio. Includes tips on when you might want to choose Spring, and when not. Also shortly describes what's new in Spring 3.0.
- Google has opensourced a bunch of their Javascript libraries, which they use in Gmail, Google Docs and Google maps:
- "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."
Quite a terrible name btw, since you also have regular closures in Javascript... The name came from bringing closure to their whole mess of Javascript libs they'd made.
A short comparison between the compression performance of YUI Compressor and Google Closer Compiler using the well-known Javascript Frameworks - Mootools, JQuery and Prototype can be found here. - "Closure Compiler is a JavaScript optimizer that compiles web apps down into compact, high-performance JavaScript code."
- Analysis and tips on how to improve https performance.
- IBM’s Jens Andexer and Willem Bekker from Standard Bank provide some samples of the good, the bad and the ugly business aspects of SOA.
Sunday, November 22, 2009
Best of this Week Summary 16 November - 22 November 2009
- Did you know Java 5 reached its End of Service Life last month? But luckily not if you've got Java SE for business (support).
- 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",
- "Super-fast startup speeds"
- "The browser is the OS",
- A step-by-step tutorial on creating a CRUD Web application and run it on the Amazon Elastic Compute Cloud. The web application leverages Groovy, Spring, and Hibernate (via the Grails framework), MySQL and Tomcat. For deployment the Eclipse AWS-plugin is used.
- 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.
Sunday, November 15, 2009
Best of this Week Summary 09 November - 15 November 2009
- 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.
- Presentation by John Resig (from JQuery fame) on testing javascript. Shortly describes QUnit, JSUnit, YUITest for unittesting, Screw.Unit, JSSpec for behavior testing (unittesting broken up by task), Selenium for functional testing and Crosscheck, Env.js, Blueridge for server-side Javascript testing. Also describes browser launching, which I would translate into "build/test management", distributed testing (Selenium, TestSwarm) and browser support (cost vs benefit).
- "A Decade of SOA: Where are we, Where are we Going?" The viewpoints from a virtual panel of Enterprise Architects who have lived and implemented SOA for most of this decade.
- Why iStockphoto embraced Google's Gears.
- And as grand final this week: the hardware and (rails) software architecture of Ravelry, a knit and crochet community.
Sunday, November 8, 2009
Best of this Week Summary 02 November - 08 November 2009
- 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. - "Better to give users limited functionality than an error page"
- Blogpost that briefly touches a few types of complexity encountered in large software (web) projects.
Sunday, November 1, 2009
Best of this Week Summary 26 October - 01 November 2009
- Another good summary how merging WOA with SOA could potentially solve (some) SOA problems.
- This post covers three major areas of JavaScript/AJAX performance: distributed communication, usability, memory leaks and anti-patterns.
- Several interesting details from Facebook’s VP of Engineering about the infrastructure of the company, and the massive scaling problems it has to support. Big role for memcached there. Full video presentation here.
- 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.
Sunday, October 25, 2009
Best of this Week Summary 19 October - 25 October 2009
- 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. - The IntelliJ IDEA has gone open source for its Community Edition.
- How you could setup your support and maintenance solving the problem of keeping the knowledge and keeping it interesting for the people involved.
- Performance considerations and 4 anti-patterns in distributed applications.
- A review of some Java concurrency tips from Joshua Bloch, Brian Goetz and others.
Sunday, October 18, 2009
Best of this Week Summary 12 October - 18 October 2009
- 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:
- Good overview of what will be in the Patch Set 1 for the Oracle Fusion Middleware 11g stack, including JSF and ADF (mobile!). It's more than a patch!
- 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. - XML processing/design tips.
- 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.
- The keynote on sunday which also describes the plans Oracle has with Java, MySQL and Sun hardware
Sunday, October 11, 2009
Best of this Week Summary 05 October - 11 October 2009
- 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().
Sunday, October 4, 2009
Best of this Week Summary 28 September - 04 October 2009
- "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."
- 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.
- "At the JVM Languages Summit, Josh Bloch expressed his concern about what he called the "semantic gap" between the source code we write and its performance at runtime: As performance improves, our ability to predict the performance consequences of our source code degrades." Feedback from people on this subject can also be found here.
- "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."
Sunday, September 27, 2009
Best of this Week Summary 21 September - 27 September 2009
- 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”."
Sunday, September 20, 2009
Best of this Week Summary 14 September - 20 September 2009
- 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.
Sunday, September 13, 2009
Best of this Week Summary 07 September - 13 September 2009
- 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."
- A good explanation of the Canonical Message Model in the context of an ESB, and why you'd need one within an SOA. Great description of different approaches for implementing a CMM in an ESB and their pros and cons.
A short introduction to CMM modelling (data model and message model) is described here. - 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.
Sunday, September 6, 2009
Best of this Week Summary 24 August - 06 September 2009
- 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.
Sunday, August 23, 2009
Best of this Week Summary 17 August - 23 August 2009
- 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.
- Shame on me: forgot to mention last week the VMWare acquisition of SpringSource! Basically the CTO says "the aim of this acquisition is to provide a comprehensive platform as a service (PaaS)". Here's a view on it from a technical level by Adrian Colver (SpringSource), and here's one from Frank Cohen.
- Potential cloud "dangers" described during Black Hat USA 2009.
- 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?"? :)
Saturday, August 15, 2009
Best of this Week Summary 10 August - 16 August 2009
- 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? ;)
Sunday, August 9, 2009
Best of this Week Summary 3 August - 9 August 2009
- Securing SOAP/webservices overview and tips including encryption, testing, maintainability and reusability.
- Four steps to securing webservices with focus on testing.
- Several junit best practices. And related antipatterns.
- 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).
- Awesome, parts of the original source code of Apollo 11's Command Module (Comanche054) and Lunar Module (Luminary099)! Pretty funny are some of the comments.
- A couple of more or less advanced Firebug usage tips: advanced debugging with the console, replacing a Javascript funtion in the console and profiling.
Sunday, August 2, 2009
Best of this Week Summary 27 July - 2 August 2009
- "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.
Sunday, July 26, 2009
Best of this Week Summary 20 July - 26 July 2009
- Handy tip for creating testdata for your testclasses via "factory" helper classes, to prevent copying the construction of this testdata again and again.
There's also a database version. - A comparison of the following opensource search engines: Lucene, Zettair, Indri, Sphinx, and Xapian.
- Best practices for using the Java Native Interface.
- A great "free PDF White Paper from OASIS, OMG, and The Open Group was written to help the SOA community at large to navigate the myriad of overlapping technical products produced by these organizations with specific emphasis on the “A” in SOA; i.e., Architecture. The docment explains and positions architectural standards for SOA reference models and ontologies, reference architectures, maturity models, SOA modeling profiles, and open standards work related to the topic of SOA governance. It also outlines the agreement on core SOA and SOA governance concepts."
- How bad can one GOTO statement really be? ;)
Sunday, July 19, 2009
Best of this Week Summary 13 July - 19 July 2009
- 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.
Sunday, July 12, 2009
Best of this Week Summary 06 July - 12 July 2009
- 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.
- YourKit described for finding Java memory leaks. Free for opensource projects, otherwise commercial licensing.
- Interesting piece on Twitter's evolving architecture presented during QCon London 2009, addressing:
- Caching
- Message queuing
- Memcached client
All slides can be found here. - Caching
- Of course the big news this week was Google's announcement of its Chrome OS. A quick bunch of FAQs from Google can be found here. Why Google Chrome? Well, why not? And finally, a funny reason why a within-seconds bootup time is a disadvantage ;) Couldn't agree more :)
- 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.
Saturday, July 4, 2009
Best of this Week Summary 29 June - 05 July 2009
- Here's a Getting Started and bunch of Case Studies for Google App Engine with Java: case study 1, case study 2 and case study 3. Main things to take away:
- GAE does not support the whole JEE API nor all regular frameworks.
- Google's database for GAE is non-relational(!) but an object store
- GAE does not support the whole JEE API nor all regular frameworks.
- A collection of web 2.0 architecture articles every software/application architect should know about, collected over the years by Dion Hinchcliffe.
- 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.
- Great long article on the history of Javascript and what hopefully awaits us in the future.
Sunday, June 28, 2009
Best of this Week Summary 21 June - 28 June 2009
- Misunderstandings of Domain Driven Design described. DDD = "Domain Driven Design is an approach that describes the approach to designing the business layer".
- 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.
- And what is your programming personality style? For me it's DoerHighlevelSololiBeral...
Sunday, June 21, 2009
Best of this Week Summary 15 June - 20 June 2009
- Finally I found a good summary of JavaOne 2009 (PDF) by Frank Cohen.
Two other pretty good summaries can be found here and here. Both are split into days, so some browsing required :) - 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
- Here's a nice summary of Google Wave's architecture.
- 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.
Sunday, June 14, 2009
Best of this Week Summary 8 June - 14 June 2009
- A whole bunch of AJAX best practices in this PDF presentation from JavaTech 2008, Pune - India.
- 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:
- A little bit off-track, but maybe very appropriate for you: Top 10 Reasons Why Employees Leave in IT.
- Yup, Sun (Oracle) now also has its app store: the Java Store. Still in private beta.
Sunday, June 7, 2009
Best of this Week Summary 1 June - 7 June 2009
- 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." - Open up your company's data so others can link to it: the next step in the web, and why you should care. As seen by Tim Berners-Lee.
- Did you know about this cool feature in Java 6 SE: it is possible to make a standalone Java application available as a webservice via the EndPoint class (i.e, via its main() method). Thus: without a container!
Sunday, May 31, 2009
Best of this Week Summary 25 May - 31 May 2009
- 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.
Sunday, May 24, 2009
Best of this Week Summary 18 May - 24 May 2009
- 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. - This feed is handy to follow to see what's getting more mainstream traction and technology trends. E.g Thought Leadership: Technology Brief May 2009.
- All of Dion Hinchcliffe web 2.0 diagrams at one place.
- JSON REST webservices best practices described by the Feedly team. A related more general pros & cons of REST are described in this article.
- 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.
- The distinction between a spring singleton and a java singleton explained.
Sunday, May 17, 2009
Best of this Week Summary 11 May - 17 May 2009
- 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.
- More on OAuth: how to get OpenID and OAuth working on Google App Engine.
- Here's an interview with Bruce Eckel regarding his thoughts on the RIA landscape.
- A short implementation guide on how to integrate performance management into development - or more specifically Continuous Integration.
- Which webframework is the Dutch software company JTeam using for what type of application?
- Rich Internet Application: GWT and Flex
- General-purpose, public website: Wicket
- Miscellaneous website: Spring MVC
Focus of the article is on why they pick Wicket for the second category of websites. - Rich Internet Application: GWT and Flex
- A great insight in the BBC's iPlayer innerworkings and data usage. E.g, during peak hours, it streams 12G of data per second, making a total of seven PetaByte a month! For streaming CDNs are used, and each program is created in about 14 formats.
Sunday, May 10, 2009
Best of this Week Summary 04 May - 10 May 2009
- 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.
Sunday, May 3, 2009
Best of this Week Summary 27 April - 03 May 2009
- Already the fifth entry in a series on Wicket patterns and pitfalls.
A PDF of presentation during TSSJS March 30 2009 on architecting applications using Wicket. Includes a short comparison to JSF.
Here's eight areas to look into when considering using Wicket. Definitely don't forget to read the comments, because not all eight reasons are that valid. The same blogger also responds with a new article why he prefers Stripes over Wicket. - 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.
- Interesting: a collaborative code review plug-in for Eclipse.
- A summary writeup of the Architect Summit 2008 can be found here.
Sunday, April 26, 2009
Best of this Week Summary 20 April - 26 April 2009
- 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. - A beginners tutorial on how to integrate GWT with PHP using XML as the "bridge" between the two technologies.
- Manage your Amazon S3 with freeware CloudBerry Explorer. Makes it for example easy to move buckets between the US and Europe.
Cloudkick is a free tool which allows you to migrate your Amazon EC2 AMIs to to Slicehost (owned by Rackspace).
Sunday, April 19, 2009
Best of this Week Summary 13 April - 19 April 2009
- To build an OpenSocial application, you no longer need an online a (test) container, because now there is the OpenSocial Development Environment (OSDE) for Eclipse.
- "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:
- Better support for long-lived processes
- Static typing
- Better thread support
The article also lists lessons learned and the "good and the bad" of Scala. One of the interviewed guys also did a presentation on why you should (could) use Scala for building web 2.0 applications. - Better support for long-lived processes
- Twelve steps on how to introduce OSGi on an existing application without having to write the whole application.
- Summary of a one hour presentation on 10 ways to improve your code.
Sunday, April 12, 2009
Best of this Week Summary 06 April - 12 April 2009
- Big news this week was of course that Google App Engine now also supports Java, though still in closed beta. Other reports of this news can be found here, here, and this summary from the related Campfire '09. A nice two pager overview can be found here. Also immediately available is an Eclipse plugin. Groovy is supported too btw.
Note that the Java 1.6 support is not (yet?) 100%:- It hasn't passed Sun's Java certification tests
- Over 7 items of what's not supported are listed here.
- 9 mostly similar are listed here.
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.
- Interesting, this opensource XSS bookmarklet (thus javascript) scans for potential XSS problems.
- 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.
Sunday, April 5, 2009
Best of this Week Summary 24 March - 05 April 2009
- 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. - Over-provisioning (estimating what the peak will be).
- 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:
Sunday, March 29, 2009
Best of this Week Summary 23 March - 29 March 2009
- 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.
Sunday, March 22, 2009
Best of this Week Summary 16 March - 22 March 2009
- Great article by Dion Hinchcliffe with 10 emerging technologies every software architect has to know about. In short:
- Cloud computing
- Non-relational databases
- Next-generation distributed computing
- Web-oriented architecture (WOA)
- Mashups
- Open supply chains via APIs
- 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)
- Cloud computing
- 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.
- Ten more Eclipse shortcuts you maybe didn't know...
- 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.
Sunday, March 15, 2009
Best of this Week Summary 09 March - 15 March 2009
- A table-based quick review of the following RIA frameworks: GWT 1.5, Laszlo 4.2, pure Javascript and Flex 3.2.
- A short introduction on how ActionScript 3 differs (and not) from Java.
- 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)
- Don't Put Your Resume Ahead of the Requirements (Nitin Borwankar)
- An introduction to Object Oriented CSS.
- 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".
- A series of five articles on setting up a Java Wicket project and implementing a frontend with it.
- 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...
Sunday, March 8, 2009
Best of this Week Summary 02 March - 08 March 2009
- 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 :-)
- A memory and performance comparison between Seam+JSF and Wicket. Wicket wins both. Also check the comments for useful feedback. Possible reasons for the differences in performance are: JSF performs much more expression evaluation and the JSF lifecycle is much more complex.
- The Open Group has released version 9 of The Open Group Architecture Framework (TOGAF) for enterprise architectures. TOGAF is often combined with ArchiMate for modelling. Most important addition to version 8 is the content framework which describes what an architecture exists of. Here's some feedback from actual users on TOGAF 9.
- Talking about standards, the OASIS committee has updated a bunch of webservices specifications/standards.
- A nice post on how to write a Javascript client that sites can use to access your REST API. Biggest challenges that had to be solved were:
- Browser same-origin restrictions on XMLHttpRequests (XHRs) and inter-window/frame access
- The lack of wide browser support for HTML 5-style message passing between windows.
- Browser same-origin restrictions on XMLHttpRequests (XHRs) and inter-window/frame access
- Java Enterprise Edition 6 (Java EE 6) Specification (JSR 316) is getting there...