Showing posts with label Web Development. Show all posts
Showing posts with label Web Development. Show all posts

Wednesday, February 17, 2010

[Tech] Balsamiq Mockups

If you develop Client or Web applications providing a User Interface you end up with questions like:

  • Which GUI do we provide
  • Elements (Input fields, Buttons, etc.) should the GUI contain
  • What is the structure of the GUI
  • and many other questions
Usually you have several workshops with the end users who work with the final software systems. Balsamiq mockups is a great tool to create mockup GUIs in a very fast time. I always use this tool in workshops with the customer. With this smart software product you can create and tweak UI designs in real time during the meeting and the user will see the result immediateley. The tool provides a predefined mockups, like Buttons, Tables, Fields, Tabs and many other common GUI elements. There are also elements available for iPhone applications. A design of a GUI can look like this:
A more complex GUI:


Several designs can be exported to PNG images. Therefore you can create some variants and play use cases through the GUIs. Another very important point for GUI Developers is to determine common GUI components that are used in different modules of your application.

Don't paint the GUIs on yourself, the time is too valuable to waste on it.

Sunday, December 27, 2009

[Tech] Simple Java Template Engine

Template engines are widely used in Web Frameworks, such as Struts, JSF and many other technologies. Apart from classical Web Framework, template engines can be very useful in integration projects. In an actual integration project that deals with a lot of XML data exchange, I discovered the Java Template Engine Library FreeMarker. This Open Source Library is a generic template engine in order to generate any output, such as HTML, XML and any other user defined output based on your given template.
"[...]FreeMarker is designed to be practical for the generation of HTML Web pages, particularly by servlet-based applications following the MVC (Model View Controller) pattern. The idea behind using the MVC pattern for dynamic Web pages is that you separate the designers (HTML authors) from the programmers. Everybody works on what they are good at. Designers can change the appearance of a page without programmers having to change or recompile code, because the application logic (Java programs) and page design (FreeMarker templates) are separated. Templates do not become polluted with complex program fragments. This separation is useful even for projects where the programmer and the HTML page author is the same person, since it helps to keep the application clear and easily maintainable[...]"
I think HTML is one application area of FreeMarker. Consider 3rd party systems providing APIs consuming XML data or their own data structures. Construct their data format in the code is a grubby approach and furthermore the code becomes not maintainable. Using such a library you can manage your data exchange template outside your code and produce the final data by using the template engine. I see such template engines as classical transformers as in an Enterprise Service Bus:

In the above exmple you see, that you can use placeholders in your template files, which will be replaced by the real data when the transformation takes place. FreeMarker provides enhanced constructs such as if statements, loops and other stuff which can be used in your template files.

Template engines are often used in Web Frameworks, but the usage of template engines is also very useful when you must produce specific output for other systems.

Thursday, July 02, 2009

[Tech] Monitor your WS calls

If you develop applications, which consumes web services from other applications or integration platforms, debugging can often be very deflating. If you don't use the correct debugging tools, you don't see the generated SOAP messages which are delivered between the parties.

A very useful tool is the Open Source SOAP monitoring tool from predic8. The tool does the same as the TCP monitor from Axis, but provides a more user friendly UI and more settings and features:
  • Monitoring of SOAP and HTTP messages
  • Rule based SOAP routing
  • XML formatting and syntax highlighting for SOAP messages
  • Interception and modification of messages
  • HTTP chunking
  • HTTP 1.1
  • Loading and saving of configurations
  • Rich graphical User Interface
  • Resending of messages
The monitor acts as a proxy. Therefore your client application must send the SOAP/HTTP messages to the proxy monitor, which delegates the messages to the real endpoint. A Quick Starter Guide is also available.

Tuesday, June 09, 2009

[Tech] Cloud Computing

As I think, I already mentioned here, I believe, that Cloud Computing (and Software as a Service, but this is a slightly different topic) are true game changers in our understanding of software infrastructure and development/deployment. Currently things are still quite rough around the edges, but I believe, that in like 3-5 years the default option of application deployment will be in one cloud service or another. Putting iron into the cellar or storage-room will be what it should be in my opinion: mostly a stupid idea ;-)

In the current stream of IT Conversations George Reese talks about practical aspects and experiences with current cloud-services like Amazon S3, Simple DB, virtualisation... Recommended!

Tuesday, December 09, 2008

[Misc] Glassfish

I recently informed myself about the (Sun) Glassfish J2EE server. I never took it as a serious competitor in the field, as I had the impression it is just a reference implementation that is from Sun... However, I had to change my opinion. In the recent years it seems, that the Glassfish community worked hard on their baby and currently it seems to be a solid competitor in the field.

The Glassfish univers "not only" contains a J2EE server, but actually a set of Enterprise-tools like as message broker, clustering framework, enterprise service bus (JBI compatible), a library to implement SIP applications and the like. Additionally it is well supported by the Netbeans IDE. The recent (preview) version contains a J2EE runtime that additionally supports scripting languages like Ruby and Groovy and is based on the OSGi framework.

What I do like additionally is the fact, that Glassfish comes with a decent installation tool, provides a solid web-based administration interface and seems to be reasonably well documented. And, of course, the whole stuff is Open Source.

I must say, I am quite impressed so far. Any comments on that one?

Wednesday, November 12, 2008

[Arch] RESTful applications with NetKernel

The architectural style REST has gained some popularity and is often brought up against SOAP for interoperable web services. REST stands for Representational State Transfer and has some characteristics that distinct itself from other architectural styles:
  • Resources such as a person, an order, or a collection of the ten most recent stock quotes are identified by a (not necessary unique) URL.
  • Requests for a resource return a representation of the resource (eg. an html page describing the person) rather than an Object that IS the resource. A resource representation represents the current state of the resource and as such is immutable.
  • Representations contain typically links to other resources, so that the application can be discovered interactively.
  • There is typically a fixed and rather limited set of actions that can be called upon resources to retrieve or manipulate them. HTTP is the best known example of a RESTful system and defines eg. GET, PUT, POST and DELETE actions.
Applications based on REST are typically very extensible, provide good caching support, and can be easily mashed up to bigger applications.

NetKernel

Using the RESTful application pattern in non web based applications is currently not very well supported by programming languages and frameworks. NetKernel is an open source framework designed to provide a simple to use environment to program RESTful applications.

Its architecture is rather simple: Programmers write Modules and register them with the kernel. Each module registers its address space that that states which logical addresses (URIs) the module will handle and which java class, script (Python, JavaScript, Groovy, …), or static resource will act upon the request and return a resource representation. A module can also register rewrite rules that translate from one address to another.

Accessing resources within NetKernel from outside is via Transports. Each module can have Transports that monitor for external system events (eg. JMS events, HTTP requests, CRON events, etc), translate these events into NetKernel requests, and place these requests into the NetKernels infrastructure that will route the request to the appropriate resource.

NetKernel supports a wide range of scripting languages uses resource representation caching to speed things up transparently for the developer. The internal request-response dispatching is done asynchronously so callers can easily state that they do not care for an answer after 10 seconds, are not interested in the response at all, or place several request first and then wait for the responses coming back. REST is most often associated with HTTP – with NetKernel one can apply the REST architecture style also to applications that do not use http; it is completely decoupled from the http stack.

Compared to other REST frameworks such as Restlet, NetKernel is extremely well documented and several large sample applications can be downloaded from their homepage to get started quickly.

Related Links
  • http://www.1060.org – the homepage of net kernel.
  • A recent article on TheServerSide.com about resource oriented computing with NetKernel that provide a more thorough introduction.
Benedikt Eckhard (edited by Alexander Schatten)

Saturday, October 11, 2008

[Arch] Introduction to REST

REST ist an architectural style on how to let distributed applications communicate. It is considered as an alternative approach to XML:RPC or SOAP webservices. I generally like that Google Talks introduction to REST:



I would also recommend additional resources to get a more complete picture on REST, check out this link.

Wednesday, September 17, 2008

[Arch] Requirements?!

The Waterfall Requirement

I find this really interesting: In talking with many people who actually do make Software in the last years (not only talk about it *g*) I think I detected that many have a growing problem with the term "requirement". Martin Fowler sums it up greatly in his recent blog post. He makes a strong point in saying that the understanding that many people have about "requirements" is actually still very much driven by a waterfall-like understanding of the software engineering process.

As a matter of fact, requirements seem to be problematic on so many levels: on the level of customer/programmer relationship (do they understand each other), on the level of abstraction, how to manage them, how to test if the implementation follows the requirement that we hopefully have understood correctly, just to name a few. A story often heard is "we spent months with the customer building lists and lists, pages and pages of requirements or bought expensive requirement management software, and in the end the development of the product was very decoupled from these lists; but good to know we have them in the files.".

Now my question is this: the trail from requirements to software seems still very natural to us, and it is stunning for many developers and managers that it actually oftentimes does not work. I would like to add here: sometimes it works very well, but I come to that point later. Now, what could be the replacement of requirements? (In case we agree that they do not work as intended in their traditional sense.)

Observation comes in...

Well, there are modifications of requirements engineering in agile processes like the storytelling in XP. But Martin Fowler makes an interesting other observation: Many successful web-applications actually work out the requirements as they go by providing some base-services, a platform (e.g. for exchanging photos). The very important point in this phase is to build in functionality that allows the management to observe the behaviour of the customers: which functions are they using, what are they annoyed about (forum discussions, email feedback...). Then they add experimental new features and test the acceptance (Or you can as well go the next step: let the customers develop the applications as Yahoo! Pipes shows it).

It's Alive!

The interesting point is, that this procedure was very elaborately described in the book "It's Alive: The Coming Convergence of Information, Biology and Business" written by Christopher Meyer and Stan Davis. A very recommended read. The do not describe so much the process of software engineering but rather strategies of modern enterprises and derive the core principles:
  • Seed: bring in a new feature, idea; probably only to a subset of customers, probably in variations for different customers
  • Select: select the successful variations
  • Amplify: eventually amplify the successful ideas and bring more of that sort
Meyer and Davis brought exampled from "old economy" but actually in software engineering (particularly in web-applications) we have a very good opportunity to rather easily "seed" new features, observe the behaviour and select and then amplify the good ideas. The key point here is, as also Fowler mentions, to focus more on the "observation framework" (in a technical-, but also in a management-sense!) than on trying to get all requirements right from the beginning.

... and back to the Waterfall

Having said that, I want to come back to a point I mentioned earlier: in the "agility euphoria" some evangelists forget to mention, that there is a broad variety of different software products and engineering efforts. (and I am not speaking of safety critical systems here): In many cases actually a "waterfall inspired" process works pretty well. This can be the case in such projects where a technical guy (a developer at best) has already a lot of experience in a particular domain and is either re-writing a legacy application (a case I am observing right now) or is developing a new application that is actually following a series of similar applications and similar customers he had. And this case is quite a regular one in the industry, and we should not forget this scenario. In such cases the requirements of the new application can often be nailed down quite precisely.

Why is that? Well, actually the "Seed, Select and Amplify" process happened in this technical expert. He or she worked with old applications in that domain, often with a broad range of customers that have experiences with several systems of a sort. So he has developed quite a good understanding of (1) the domain (2) the customer (3) the competitors. In such cases the problem often lies more to get the implementation phase right and not to spoil the project on the last steps e.g., with not so experienced developers (either in the technical sense, or in the domain, or in the worst case in both). Hence agile principles as suggested by Scrum for example can be very helpful for the implementation phase to keep control of the process even though the requirements are quite stable from the beginning.

Wednesday, September 03, 2008

[Arch] Google AppEngine & Python

Cloud computing is the fashion right now and Google is positioning it's AppEngine against services like Amazon EC2. However similar on the first glance, the two approaches are rather different in detail: Amazon's service is more a virtual server hosting (where you have all freedoms, however are responsible about administration too) plus a set of webservices (like the storage services S3 and SimpleDB or the Queue Service SQS).

AppEngine offers a concrete application development environment in Python plus a simple database that has to be used. So you are limited to Python code and Python frameworks like Django and you cannot install an arbitrary database, on the other hand you do not have to deal with many administration issues and Google deals with the scaling.

Guide van Rossum, the father of Python (who is now employed at Google) gives a very interesting one-hour presentation on YouTube on how to write and configure a Python/Django web-application within the Google AppEngine environment.


Wednesday, March 05, 2008

[Conf] JSFDays in Vienna

I know, this comes on short-notice, however I myself realized this too late. Next week, to be precise from March 12 to 14 2008 the JSFDays conference will take place in Vienna. There are a set of very interesting speakers like Jürgen Höller speaking about the Springframework and the relation to JSF, there is Martin Marinschek from Irian and myFaces and many others. Keynote speaker is Edward J. Burns from Sun Microsystems.

Btw. the conference fees are very reasonable so I recommend to visit the event even on short notice. Unfortunately I am away an cannot join, but a colleague of mine will visit the conference and share some thoughts here on the blog by next week. I wish everyone a nice conference!

Wednesday, January 30, 2008

[Java] Introduction to Wicket

Wicket is a young component based web framework under Apache License, currently available in version 1.3. I've found a good introduction article hosted on TheServerSide , discussing the fundamental concepts behind the framework.

Wicket focus on Seperation-Of-Concern by providing the developer a rich component based model to develop components, which are associated with HTML pages. The logic of the components are written in Java, using the full power of the Java language and the IDE. The design of the pages and components are done by the web designer using powerful HTML design tools. Therefore you have a clean separation between presentation layer (HTML/CSS) and application layer (Java).

The first part of this article gives you a detailed overview about Models in wicket, which are used to associate your web componentes with your domain objects. Then he walks through a small Wicket example and explains the basic architecture about a Wicket applications, including WebApplication, WebPage and how components are associated with HTML pages. The example provides a solid basis to understand the basics of Wicket.

Monday, August 27, 2007

[Tech] Combine Hibernate and Wicket

In the previous post, Alex gives an overview about Wicket and what advantages and disadvantages this component based framework has. The majority of web applications are very data intensive, where simple CRUD (Create, Read, Update, Delete) operations needed. Apart from this, many software projects use the popular ORM (Object Relational Mapping) Tool Hibernate in association with annotated domain objects. Such a tool close (or better "try" to close) the gap between the object oriented world and the relational world. To combine these two different worlds is not a trivial task. Consider object oriented appraches like inheritance, polymorphism and other points.

Back to the blog issue! Wicket is an component oriented web framework, commemorating on Swing. On the back end you have Hibernate, often used to implement the DAOs in an application. Currently finished a data driven web application, using Databinder, a simple bridge from Wicket to Hibernate. As a classical MVC framework, Wicket uses models in order to populate data in forms and vice versa. What are the most uses cases of data driven solutions:
  • Show a list of data
  • Filter a list of data
  • Show details of data
  • CRUD operations of objects
  • and some other features
Databinder is a library providing different types of wicket models and view components enables an easy Hibernate integration. For example a data form, containing a number input components for the user and a submit button. Submitting the form entails a model update in the database out of the box. Another use case is to set up a query (Hibernate Query) to receive a list of objects. The list is wrapped in a HibernateListModel which can be populated in an easy way. In order to illustrate the main functionality of databinder, consider the following code snippet, taking from the databinder examples.
@Entity
public class Graffito implements Serializable {
private Integer id;
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Id @GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}

Each databinder application must provide an implementation of the DataApplication, which enhances the WebApplication object from wicket. Databinder must know about the managed annoated data objects, by add all annotated classes to the applicaiton.
public class GraffitiApplication extends DataApplication {
@Override
public Class getHomePage() {
return TheWall.class;
}

@Override
protected void configureHibernate(AnnotationConfiguration config) {
super.configureHibernate(config);
config.addAnnotatedClass(Graffito.class);
}
}

Now databinder is ready to use and manage your domain objects in components, like DataForm, DataPanels, Tables and the like. The following code snippet provides a data form to display domain object details.
    public class MyForm extends DataForm {
public MyForm(String id) {
super(id, Graffito.class);
add(new TextField("text"));
@Override
protected void onSubmit() {
super.onSubmit();
clearPersistentObject();
setResponsePage(OrderList.class);
}


Databinder provides a HibernateListModel enables the developer to create list models by using the powerful Criteria API of Hibernate or Hibernate Query Language. The generated list model can then be populated in a list, by using property list view for instance.
IModel lastFive = new HibernateListModel(Graffito.class, new ICriteriaBuilder() {
public void build(Criteria criteria) {
criteria.addOrder(Order.desc("id")).setMaxResults(5);
}});

// show previous scrawls in list
add(new PropertyListView("graffiti", lastFive) {
@Override
protected void populateItem(ListItem item) {
item.add(new RenderedLabel("text", true)
.setFont(spidershank)
.setColor(orange));
}});
The aim of this blog was not to introduce in databinder, rather I want to give a short overview of an interesting integration library between wicket and hibernate.

Tuesday, August 14, 2007

[Tech] Wicked Wicket

In the last years, the "market" of Web-frameworks was probably the most active one. I know hardly any other domain, where we can find such a number of different frameworks and tools. There are probable hundreds of different web-frameworks out there; just the Apache Software Foundation has: Struts, Tapestry, Cocoon, Wicket, Turbine (? never knew what this is good for), myFaces. So about 6, if I have not forgotten anything, plus a wide range of subprojects dealing with specific problems or providing taglibs or components.

So what to choose?

Actually it seems, that there are three streams of framwork concepts:
  • The "traditional" ones based on JSP (or PHP alike), HTML; i.e., more or less extending JSP like Struts or building upon template engines like Velocity
  • Special-purpose frameworks like Cocoon, that have a stronger focus on XML processing or content management
  • Application-oriented frameworks like Google Web Toolkit or Apache Wicket.
I recently had a look at the "new kid on the block" Wicket, that is recently graduated from the Apache incubator:

The general idea of Wicket is to provide a very clean separation between html/css presentation layer and application logic. As a consequence each "webpage" is a duo of one html page and one Java class. The Java class looks a little bit like a Swing class, in the sense, that visual components are initialised and assembled like in a Swing project. One could create a text-box and put it into a form component for example.

However, the concrete visual appearence is controled by a html document aside, in which html code is used with wicket id-attributes that reference to the Java code. The consequence is, that the html code is pretty clean, there is actually no logic in it, and the complete logic in in Java classes. Wicket also abstracts from the Servlet session, so that the developer never needs to actually touch the "naked" Servlet API.

Additionally Wicket has a lot of additional features like a validation framework, support for authorisation and authentication and the like. Wicket is additionally very Java-oriented, meaning that there is hardly any (XML) based configuration required to get a Wicket application up and running.

That said, the documentation is currently problematic and rather "example-driven". Also the examples are not particularly well documented and partly difficult to understand. Also to website and wiki is rather confusing from my point of view.

To get started I suggest to check out:
  • First check the Homepage. Unfortunately information there is rather brief. Also the examples are only a small extract of the actually available examples
  • Download the recent Wicket distribution or get it from the SVN. IN the distribution you also find a large number (of hardly documented) examples
  • The Framework documentation is an index about documentation on the Wiki.
  • The Wicket Tutorial (Platinum Solutions)
  • Wicket Javadoc
  • Additionally I highly recommend the Maven 2 archetype from the Jetty group to get started. I explained that in a recent post.
  • Additionally Wicket in Action is on the way for the patient ones.
My first impression about Wicket is a quite good one, however there are issues, that make me a little bit doubtful: one thing is the fact, that Wicket keeps a quite "fat" session, which might make problems with scalability.

On the conceptional level however, I am not sure if I like the HTML/Java duo with each page. Somehow I feel it is odd when I write something like this (from the Wicket documentation):



Why do I have to write additionally a html document then, where these two components appear again like so



Quite redundant, isn't it? In the Java class I made already clear, that I want a form and a text-field, so just render it!

I see that this attempt gives a lot of freedom how to render webpages. I am not sure though, if the better strategy in many cases might be to stick to the Swing concept of "Layout Managers". I.e. to refer to the example before: A layout manager (that I can select and customise) decides how the components are arranged on the page. As far as I see it, this is the strategy of the Google Web-toolkit. This approach avoids the beforementioned redundancy by also providing a clean separation between logic and presentation layer.

Comments anyone?

:-)

Tuesday, July 31, 2007

[Tech] Webapplication "Quickstart"

Creating (Java, what else *g*) Web-Applications with a new framework is not always an easy task. Where to put which config file, which config options, how to make the build process correctly, how to start the application in the servlet container and how to make an eclipse project and the like. Yesterday (thank you Reinhard) I was pointed to a really great resource:

Webtide, the company behind the Jetty Servlet-Server project provides a set of archetypes for Maven to create "hello world" webapplications for a broad range of different Web-frameworks (Wicket, Struts, Tapestry, Spring, Webapp with ActiveMQ...).

What does that mean?

(1) you download the artefact you are interested in, e.g. Wicket, unzip it and call mvn install (to install it in your local repository)

(2) you call for example:

mvn archetype:create -DarchetypeGroupId=com.webtide -DarchetypeArtifactId=maven-archetype-Wicket -DarchetypeVersion=1.0-SNAPSHOT -DgroupId=info.schatten -DartifactId=my-wicket-app

and the archetype creates a simple Wicket (or whatever archetype you selected) webapplication with Maven build settings, including the jetty plugin. So type:

(3) mvn jetty:run and the application start.

This is really a helpful set of artifacts to start from!

Tuesday, July 24, 2007

[Tech] Template Engine Stagnation?

Frank Sommers discusses several new attempts in template-engine design and implementations like String Template, the Rails approach, Velocity and the like. Gert Bevin introduces this article in TheServerside.com with the words:

"Template engines seem to be one of the most stagnant technologies in Java".

Actually this question is quite interesting for me, as I made the same observation over the last years. Maybe the answer is very simple though: The reason might be, because they are actually not often used and hence there is not much demand.

For XML related processing XSLT is a proven and powerful technology; Web-Development apparently moves away from template-based approaches as new frameworks like Wicket or Google Web Toolkit show. Then there are some minor application scenarios where template engines are used in the "backend" like generation of Java code by O/R mappers or generating SQL statements and the like. But most developers use strategies one abstraction layer above. Meaning: you do not put your SQL statements together with Velocity, you might use Hibernate or Cayenne.

Monday, June 11, 2007

[Tech] Cocoon 2.2 Version ahead

In the current Infoweek.ch magazine I published an article about Apache Cocoon. Cocoon is a fascinating XML Framework. However it is a little bit difficult to explain the capacity of Cocoon as it is conceptional quite different from other "Web-Frameworks" like Struts, myFaces, Wicket, Tapestry and whatnot.

Hello World...

The core concept of Cocoon are XML-processing pipelines: in short, a Pipeline is responsible for handling one request to the Cocoon server (which is actually a Servlet running in a servlet container like Tomcat or Jetty). Within a pipeline a set of different sitemap components can be used to produce a response. Typically a pipeline starts with a generator, that creates an XML stream, then one or more transformers can manipulate the stream (e.g. XSLT transformers) and finally a serializer component serialises the XML stream to the desired output format (e.g. XML, HTML, SVG, PDF, JPEG, ...).

Which pipeline feels responsible for which request is managed by pipeline matchers. To give a "hello world" example:



In this case this matcher might react at requests like "http://myserver.org/docs/article123.html". In that case the generator would load the document "article-123.xml" and apply the XSLT transformation with the XSLT script "article.xsl" on the document. This transformation supposedly will generate XHTML and the HTML serializer will serialise this to HTML. A lot of different sitemap components are available "out of the box" that can also be combined, and own components can be written when needed, but this is only one side of the story:

...and beyond

The previous example gives a very brief idea about the core concept of Cocoon, the sitemap. But Cocoon is a full-blown web-framework. It can be used for cross-publishing issues but just relying on the sitemap idea and a lot of components that help in that context (to process SVG, PDF, HTML...), but can also be used for developing Web-applications. It has components to access relational databases, supports complex caching strategies and offers a solid form framework, Cocoon Forms: Cocoon Forms abstracts from concrete form implementations like HTML forms by defining Widgets and supports strong typing, validation and events (e.g. handled by Javascript in the browser).

Additionally Cocoon Flow allows to model the "flow" of webpages, e.g., a "wizard" like series of forms, where the path through the forms is depending on data entered in previous forms can be described very elegantly with server-side Javascript or Java code using continuations.

And Version 2.2?

Version 2.2. will be released soon and is long anticipated. Previous Cocoon versions had some issues particularly when it came to modularisation. Cocoon 2.2. has (beside several other enhancements) the advantage to use Apache Maven 2 for build management, and perfectly integrates with the Springframework. Hence it is very easy now to use arbitrary Spring beans within a Cocon application. Also the integration into Eclipse as IDE got a lot simpler. Modularisation did not stop before the Cocoon pipeline that was in previous version a little bit of a hodgepodge of various configurations and pretty hard to understand for non-experts. The same was true for the decisions which Cocoon modules to use in the own applications. Cocoon blocks does a good job in version 2.2 to make these nasty configuration issues much easier to handle and understand.

The usage of Maven also makes "startup" easier, as the Cocoon team provides Maven archetypes that generate a "hello world" Cocoon application from which starting own development becomes much more straightforward compared to earlier 2.1 releases.

Conclusion

Cocoon is a powerful cross-publishing XML and web-application framework . It is easy to integrate several systems using Cocoon sitemap components. In the new version the modularisation including Spring and usage of Maven as build-environment and configuration management tool are a large step forward. Several other tools build upon Cocoon like Apache Forrest or the Daisy content management system.

However, Cocoon is not a simple framework (which web-framework is?) and it needs some time to get familiar with the concepts.

Thursday, May 10, 2007

[Misc] Web 2.5 ;-) Pipes

Ok, I confess, this is probably not a "core" SE topic, however, I was stumbling over Yahoo Pipes today, and I was fascinated. Until now I am not really sure, what I could use this service for and if at all, but yet it looks great.

I like it because the idea is fascinating: you can "program" graphically specific data-workflows: Define some input stream (RSS, XML), some preparation, filtering, ... steps and eventually generate some (RSS) output. So it is a kind of "RSS construction" kit. It is, however a very nice application, apparently mostly Javascript, fast, easy to use.

I wrote Web 2.5, because it might be the next trend to give the "end-user" more web-development skills at hand to create own small services.

Ideas anyone?

Thursday, September 21, 2006

[Arch] Web 2.0 Patterns and the lacking Separation between Producers and Consumers

"Web 2.0" Patterns

Even though the term Web 2.0 is not really "brand-new" and also the O'Reilly article is from 2005, I still found it just recently (shame on me), and I still think there might be others out there having not read it.

This article tries to define what these "new Web 2.0" applications distinguish from the Web-applications we have seen the years before. The article covers the "Web as Platform", new concepts of web-services and applications as well as the social phenomenons emerging around these new services.

Besides the fact, that new technologies like Ajax, Flash, OpenLaszlo, Rails and the like push the development of new and rich Web-Interfaces (which is an SE topic itself), the most interesting aspect for me at the moment, is the discussion of the "End of the Software Release Cycle". Particularly the second assumption: "Users must be treated as co-developers" is (from my point of view) the most relevant and stunning new phenomenon in the new "Web 2.0" and "E-Commerce" concepts.

In and Out

The concept of inside and outside the company, company employee and customer get's more and more fuzzy every day. This was always a clear idea within the Open Source movement: the "customer"/user was invited to participate in the software development process not only by contributing code, but also but contributing in the process, e.g., by
  • reporting bugs
  • helping new users in the mailing list
  • providing information in the project Wiki
  • writing tutorials
However, in an Open Source project there is no business model behind the process, but considering the business strategies of companies like Amazon or Flickr things are apparently different:
  • Amazon partly builds upon the workforce of users commenting books, CDs and so on: these comments are actually for free (from the perspective of Amazon), and the customers are providing work that was until now paid for.
  • Flickr builds also upon the idea, that users tag pictures, hence they provide the necessary information for the company to build efficient categories and search functionality.
  • Even if customers do not provide active work, their sheer activity on the website is used: for example Amazon evaluates the click streams and buying behaviour and creates additional functionality for their website: "What do customers ultimately buy after viewing this item?"
  • Google evaluates Websites and searches from users; analyses the work web-authors do, for example by making references to other pages. This information is a core necessity for their page-ranking algorithm. The data comes from customers.
  • Google provides a fundamental Maps framework; in the future the rich Map-applications will be provided by "customers"
I do not want to be misunderstood, I do not intend to say that all this is negative a priori, but it has significant impact on the way Web-Applications are designed and software is developed. Ten years ago, there was a clear distinction between the company who provided software and the user community. We now detect an erosion of this "wall". If, 10 years ago, the company hired a designer to create some visual templates, probably company X asks the user community to provide templates (and they work for free).

Similar concepts can be seen in online gaming: "monolythic" games will be, in my opinion, replaced by platforms where users very actively will contribute their designed landscapes, characters, weapons, and so on.

This trend will pose significant changes on companies and developers who still stick to old software engineering paradigms.

This will more and more effect the relationship between customers and producers, the way sotware is developed and eventually the relationship between companies and their employees.

Tuesday, August 29, 2006

[Pub] State of the Art in Java Enterprise Web Application Development

With the rise of object-oriented thinking, frameworks became more popular than never before. A framework is an approach of software reuse and enables developers to establish software systems on an abstract layer. This diploma thesis focuses on the layered architecture where each layer has a predefined task which can be implemented together with a provided framework. This diploma thesis covers the following key points:

  • Introduction to Software Architecture
  • Relevant patterns for J2EE, like MVC, DAO, ORM, Lazy Load or Dependency Injection
  • Architecture of object oriented frameworks
  • Technologies: Hibernate, Spring, Spring Web Flow, Struts, JSF and OpenLaszlo
Special attention will be given to the integration possibilities among the described technologies in this thesis. Read more about the frameworks and their integration possibilities in my diploma thesis. The poster illustrates the 5-layered architecture with an associated technology.