<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Undisciplined Bytes &#187; Documentation</title>
	<atom:link href="http://www.undisciplinedbytes.com/category/documentation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.undisciplinedbytes.com</link>
	<description>Web Application Development Tips, Tricks and Techniques</description>
	<lastBuildDate>Tue, 03 Aug 2010 14:02:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Software design patterns (IV): behavioral patterns</title>
		<link>http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iv-behavioral-patterns/</link>
		<comments>http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iv-behavioral-patterns/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 15:01:57 +0000</pubDate>
		<dc:creator>Oliver Mezquita</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.undisciplinedbytes.com/?p=298</guid>
		<description><![CDATA[We’ve already been through a brief introduction to design patterns, and a description of the most important creational design patterns and structural design patterns. In this article we’ll take a look at the last category of design patterns: behavioral patterns.
Behavioral design patterns are concerned with the relationships among communications using different objects. They identify common [...]]]></description>
			<content:encoded><![CDATA[<p>We’ve already been through a brief <a href="http://www.undisciplinedbytes.com/2009/12/software-design-patterns-i/" target="_blank">introduction to design patterns</a>, and a description of the most important <a href="http://www.undisciplinedbytes.com/2009/12/software-design-patterns-ii-creational-patterns/" target="_blank">creational design patterns</a> and <a href="http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iii-structural-patterns/" target="_blank">structural design patterns</a>. In this article we’ll take a look at the last category of design patterns: behavioral patterns.</p>
<p>Behavioral design patterns are concerned with the relationships among <strong>communications</strong> using different objects. <strong>They identify common communication patterns and provide a well-known solution to implement this communication</strong>, offering a higher degree of flexibility.</p>
<p>The most used behavioral patterns are:</p>
<p><span id="more-298"></span></p>
<h4>Chain of responsibility</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern" target="_blank">Chain of responsibility Pattern</a> can be used when there is a potentially high number of processing elements, and a stream of requests must be handled in different ways. Each request will be processed by different elements.</p>
<p>This pattern is implemented by encapsulating the processing elements inside a <em>pipeline </em>abstraction, and have objects launch and leave their requests at the entrance to the pipeline. The pattern chains the receiving objects together, and then passes any request messages from object to object until it reaches an object capable of handling the message.</p>
<p>Chain of Responsibility simplifies object interconnections. Instead of senders and receivers maintaining references to all candidate receivers, each sender keeps a single reference to the head of the chain, and each receiver keeps a single reference to its immediate successor in the chain</p>
<h4>Command</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Command_pattern" target="_blank">Command Pattern</a> can be used when there is a need to issue requests to objects without knowing anything about the operation being requested or the receiver of the request.</p>
<p>Command decouples the object that invokes the operation from the one that knows how to perform it. To achieve this separation, the designer creates an abstract base class that maps a receiver (an object) with an action (a pointer to a member function). The base class contains an <code>execute()</code> method that simply calls the action on the receiver. All clients of Command objects treat each object as a “black box” by simply invoking the object’s virtual <code>execute()</code> method whenever the client requires the object’s “service”.</p>
<p>Command objects can be thought of as “tokens” that are created by one client that knows what needs to be done, and passed to another client that has the resources for doing it.</p>
<h4>Interpreter</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Interpreter_pattern" target="_blank">Interpreter Pattern</a> can be used when we’re facing a class of problems that occurs repeatedly in a well-defined and well-understood domain. If the domain were characterized with a “language”, then problems could be easily solved with an interpretation “engine”.</p>
<p>The Interpreter pattern discusses: defining a domain language (i.e. problem characterization) as a simple language grammar, representing domain rules as language sentences, and interpreting these sentences to solve the problem. The pattern uses a class to represent each grammar rule. And since grammars are usually hierarchical in structure, an inheritance hierarchy of rule classes maps nicely.</p>
<p>An abstract base class specifies the method <code>interpret()</code>. Each concrete subclass implements <code>interpret()</code> by accepting (as an argument) the current state of the language stream, and adding its contribution to the problem solving process.</p>
<h4>Iterator</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Iterator_pattern" target="_blank">Iterator Pattern</a> can be used when there’s a need to “abstract” the traversal of very different data structures so that algorithms can be defined that are capable of interfacing with each transparently.</p>
<p>An aggregate object such as a list should give you a way to access its elements without exposing its internal structure. Moreover, you might want to traverse the list in different ways, depending on what you need to accomplish. But you probably don’t want to bloat the List interface with operations for different traversals, even if you could anticipate the ones you’ll require. You might also need to have more than one traversal pending on the same list. And providing a uniform interface for traversing many types of aggregate objects (i.e. polymorphic iteration) might be valuable.</p>
<p>The Iterator pattern lets you do all this. The key idea is to take the responsibility for access and traversal out of the aggregate object and put it into an Iterator object that defines a standard traversal protocol.</p>
<h4>Mediator</h4>
<p>When you have a big number of objects interacting among them, a rather complex structure might be formed. It can become so complex that trying to reutilize some functionality might show the <em>spaghetti code phenomenon</em>: trying to scoop a single serving results in an all or nothing clump. To avoid this, the <a href="http://en.wikipedia.org/wiki/Mediator_pattern" target="_blank">Mediator Pattern</a> encapsulates the behavior of the whole group in a single object.</p>
<p>Partitioning a system into many objects generally enhances reusability, but proliferating interconnections between those objects tend to reduce it again. The mediator object encapsulates all interconnections, acts as the hub of communication, is responsible for controlling and coordinating the interactions of its clients, and promotes loose coupling by keeping objects from referring to each other explicitly.</p>
<p>In this pattern, peers are not coupled to one another. Each one talks to the Mediator, which in turn knows and conducts the orchestration of the others. The <em>many to many</em> mapping between colleagues that would otherwise exist, has been <em>promoted to full object status</em>. This new abstraction provides a locus of indirection where additional leverage can be hosted.</p>
<h4>Memento</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Memento_pattern" target="_blank">Memento Pattern</a> can be used when you need to restore an object back to its previous state (<em>undo</em> or <em>rollback</em> operations).</p>
<p>The client requests a Memento from the source object when it needs to checkpoint the source object’s state. The source object initializes the Memento with a characterization of its state. The client is the “care-taker” of the Memento, but only the source object can store and retrieve information from the Memento (the Memento is “opaque” to the client and all other objects). If the client subsequently needs to “rollback” the source object’s state, it hands the Memento back to the source object for reinstatement.</p>
<p>An unlimited <em>undo</em> and <em>redo</em> capability can be readily implemented with a stack of Command objects and a stack of Memento objects.</p>
<h4>Observer</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Observer_pattern" target="_blank">Observer Pattern</a> can be used when a large monolithic design does not scale well as new graphing or monitoring requirements are requested.</p>
<p>Define an object that is the “keeper” of the data model and/or business logic (the Subject). Delegate all “view” functionality to decoupled and distinct Observer objects. Observers register themselves with the Subject as they are created. Whenever the Subject changes, it broadcasts to all registered Observers that it has changed, and each Observer queries the Subject for that subset of the Subject’s state that it is responsible for monitoring.</p>
<p>This allows the number and “type” of “view” objects to be configured dynamically, instead of being statically specified at compile-time.</p>
<h4>Further reading</h4>
<ul>
<li><a href="http://www.oodesign.com/" target="_blank">Object Oriented Design</a></li>
<li><a href="http://en.wikipedia.org/wiki/Behavioral_pattern" target="_blank">Behavioral Pattern [Wikipedia]</a></li>
</ul>


<h4>Related posts:</h4><p><ol><li><a href='http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iii-structural-patterns/' rel='bookmark' title='Permanent Link: Software design patterns (III): structural patterns'>Software design patterns (III): structural patterns</a></li>
<li><a href='http://www.undisciplinedbytes.com/2009/12/software-design-patterns-i/' rel='bookmark' title='Permanent Link: Software design patterns (I)'>Software design patterns (I)</a></li>
<li><a href='http://www.undisciplinedbytes.com/2009/12/software-design-patterns-ii-creational-patterns/' rel='bookmark' title='Permanent Link: Software design patterns (II): creational patterns'>Software design patterns (II): creational patterns</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iv-behavioral-patterns/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Software design patterns (III): structural patterns</title>
		<link>http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iii-structural-patterns/</link>
		<comments>http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iii-structural-patterns/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 18:58:16 +0000</pubDate>
		<dc:creator>Oliver Mezquita</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.undisciplinedbytes.com/?p=261</guid>
		<description><![CDATA[We already saw what design patterns are and took a look at creational patterns in earlier articles. Today we’ll deal with the second category: structural patterns.
These design patterns are all about class and object composition. Class-creation patterns use inheritance to compose interfaces, whilst object patterns define ways to compose objects to obtain new functionality. All [...]]]></description>
			<content:encoded><![CDATA[<p>We already saw <a href="http://www.undisciplinedbytes.com/2009/12/software-design-patterns-i/" target="_blank">what design patterns are</a> and took a look at <a href="http://www.undisciplinedbytes.com/2009/12/software-design-patterns-ii-creational-patterns/" target="_blank">creational patterns</a> in earlier articles. Today we’ll deal with the second category: structural patterns.</p>
<p>These design patterns are all about<strong> class and object composition.</strong> Class-creation patterns use inheritance to compose interfaces, whilst object patterns define ways to compose objects to obtain new functionality. All of these patterns aim to <strong>ease the design by identifying a simple way to realize relationships between entities</strong>.</p>
<p>The most common structural patterns are:</p>
<p><span id="more-261"></span></p>
<h4>Adapter</h4>
<p>An <em>off the shelf </em>component may offer interesting functionality that you may want to reuse, but its <em>view of the world</em> is not compatible with the philosophy and architecture of the system currently being developed. This is where the <a href="http://en.wikipedia.org/wiki/Adapter_pattern" target="_blank">Adapter Pattern</a> steps in.</p>
<p>This pattern is about creating an intermediary abstraction that translates, or maps, the old component to the new system. Clients call methods on the Adapter object, which redirects them into calls to the legacy component.</p>
<h4>Bridge</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Bridge_pattern" target="_blank">Bridge Pattern</a> decomposes the original component’s interface and implementation into different class hierarchies. The interface class contains a pointer to the abstract implementation class. This pointer is initialized with an instance of a particular implementation class, but all subsequent interaction from the interface class to the implementation class is limited to the abstraction maintained in the implementation base class. The client interacts with the interface class, and it in turn “delegates” all requests to the implementation class.</p>
<p>The interface object is the <em>handle</em> known and used by the client. The implementation object, or <em>body</em>, is encapsulated to ensure that it may continue to evolve, or be entirely replaced.</p>
<h4>Composite</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Composite_pattern" target="_blank">Composite Pattern</a> might be used when an application needs to manipulate a hierarchical collection of objects of different types: different types of objects are handled in different ways, and querying the type of each object before processing it is not desirable.</p>
<p>This pattern is implemented by defining an abstract base class that specifies the behavior that needs to be performed upon all primitive and composite objects. Then, primitive and composite classes must be subclassed off of the Component class. Each composite object couples itself only to the abstract type component.</p>
<p>This pattern should be used when you have composites that contain components, each of which could be a composite.</p>
<h4>Decorator</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Decorator_pattern" target="_blank">Decorator Pattern</a> can be used when a particular behavior or state must be applied to individual objects at run-time – in this case inheritance cannot be used because it is static.</p>
<p>The original object must be encapsulated inside an abstract wrapper interface, from which both the core and the decorator object inherit. The interface then uses recursive composition to allow an unlimited number of decorator <em>layers </em>to be added to each core object.</p>
<p>Note that this pattern allows functionality to be added to an object, not methods to an object’s interface. The interface presented to the client must remain constant as successive layers are specified.</p>
<h4>Facade</h4>
<p>When a segment of the client community needs a simplified interface to the overall functionality of a complex subsystem, you can use the <a href="http://en.wikipedia.org/wiki/Facade_pattern" target="_blank">Facade Pattern</a>: this kind of software design encapsulates a complex subsystem within a single interface object.</p>
<p>The Facade Pattern defines a unified, higher level interface to a subsystem that makes it easier to use. This way, the learning curve necessary to successfully leverage the subsystem is reduced. It also promotes decoupling the subsystem from its potentially many clients. On the other hand, if the Facade is the only access point for the subsystem, it will limit the features and flexibility that <em>power users </em>might need.</p>
<h4>Flyweight</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Flyweight_pattern" target="_blank">Flyweight Pattern</a> is designed to solve problems related to granularity and performance: use it when designing objects down to the lowest levels of system granularity, with those objects being extremely expensive in terms of performance.</p>
<p>This pattern describes how to share objects to allow their use at fine granularities without prohibitive cost. Each Flyweight object is divided into two pieces: intrinsic (<em>stateless</em>) and extrinsic (<em>state-dependent</em>). Intrinsic state is stored in the Flyweight object. Extrinsic state is stored or computed by client objects, and passed to the Flyweight when its operations are invoked.</p>
<p>Flyweights are stored in a Factory’s repository. The client doesn’t create Flyweights directly, but requests them from the Factory. Each Flyweight cannot stand on its own. Any attributes that would make sharing impossible must be supplied by the client whenever a request is made of the Flyweight. The Flyweight uses sharing to support large numbers of objects efficiently.</p>
<h4>Proxy</h4>
<p>If you need to support resource-hungry objects, and you do not want to instantiate them unless and until they are absolutely necessary, you can use the <a href="http://en.wikipedia.org/wiki/Proxy_pattern" target="_blank">Proxy Pattern</a>.</p>
<p>The Proxy object instantiate some real object the first time the client makes a request of the proxy, remembers the identity of this real object, and forwards the request to it. Then, all subsequent requests are simply forwarded directly to the encapsulated real object. Implemented as an interface, the presence of the Proxy object standing in place of the real object is transparent to the client.</p>
<p><strong>Continue reading <a href="http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iv-behavioral-patterns/" target="_self">Software design patterns (IV): behavioral patterns »</a></strong></p>
<h4>Further reading</h4>
<ul>
<li><a href="http://www.oodesign.com/" target="_blank">Object Oriented Design</a></li>
<li><a href="http://en.wikipedia.org/wiki/Structural_pattern" target="_blank">Structural Pattern [Wikipedia]</a></li>
</ul>


<h4>Related posts:</h4><p><ol><li><a href='http://www.undisciplinedbytes.com/2009/12/software-design-patterns-ii-creational-patterns/' rel='bookmark' title='Permanent Link: Software design patterns (II): creational patterns'>Software design patterns (II): creational patterns</a></li>
<li><a href='http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iv-behavioral-patterns/' rel='bookmark' title='Permanent Link: Software design patterns (IV): behavioral patterns'>Software design patterns (IV): behavioral patterns</a></li>
<li><a href='http://www.undisciplinedbytes.com/2009/12/software-design-patterns-i/' rel='bookmark' title='Permanent Link: Software design patterns (I)'>Software design patterns (I)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iii-structural-patterns/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Software design patterns (II): creational patterns</title>
		<link>http://www.undisciplinedbytes.com/2009/12/software-design-patterns-ii-creational-patterns/</link>
		<comments>http://www.undisciplinedbytes.com/2009/12/software-design-patterns-ii-creational-patterns/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 15:01:42 +0000</pubDate>
		<dc:creator>Oliver Mezquita</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.undisciplinedbytes.com/?p=246</guid>
		<description><![CDATA[In an earlier article we saw what design patterns are and how they can help us. Today we’re going to take a look at the first category: creational patterns.
Creational design patterns deal with class creation and instantiation, and how to use those instances. Basic class creation could result in design problems or added complexity to [...]]]></description>
			<content:encoded><![CDATA[<p>In an <a href="http://www.undisciplinedbytes.com/2009/12/software-design-patterns-i/" target="_blank">earlier article</a> we saw what design patterns are and how they can help us. Today we’re going to take a look at the first category: creational patterns.</p>
<p>Creational design patterns deal with <strong>class creation and instantiation, and how to use those instances</strong>. Basic class creation could result in design problems or added complexity to the design. These patterns solve these problems by controlling this object creation.</p>
<p>Some examples of creational design patterns:</p>
<p><span id="more-246"></span></p>
<h4>Abstract factory</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Abstract_factory_pattern" target="_blank">Abstract Factory Pattern</a> implements a new level of abstraction in charge of creating families of related or dependent objects without directly specifying their concrete classes. The <em>Factory </em>object provides creation services for the entire platform family. Clients never create platform objects directly, they ask the factory to do that for them.</p>
<p>This mechanism makes exchanging product families easy because the specific class of the factory object appears only once in the application – where it is instantiated. The application can replace the entire family of products simply by instantiating a different instance of the abstract factory.</p>
<h4>Builder</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Builder_pattern" target="_blank">Builder Pattern</a> separates the algorithm for interpreting a stored persistence mechanism from the algorithm for building and representing one of many target products. The focus is on creating highly-complex objects.</p>
<p>This pattern affords finer control over the construction process. Unlike creational patterns that construct products in one shot, the builder pattern constructs the product step by step.</p>
<h4>Factory Method</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Factory_method_pattern" target="_blank">Factory Method pattern</a> is the standard way to create objects. It is similar to the Abstract Factory, but without the emphasis on families. This pattern defines an interface for creating an object, but defers the actual creation to subclasses. A superclass specifies all standard and generic behavior, and delegates the creation details to subclasses that are supplied by the client.</p>
<p>Factory Methods are routinely specified by an architectural framework, and then implemented by the user of the framework.</p>
<h4>Object Pool</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Object_pool" target="_blank">Object Pool pattern</a> lets others “check out” objects from its pool, and when those objects are no longer needed by their processes, they are returned to the pool in order to be reused.</p>
<p>We don’t want processes to be idle waiting for a particular object to be released, so the Object Pool also instantiates new objects as they are required. Furthermore, this pattern must also implement a facility to clean up unused objects periodically.</p>
<h4>Prototype</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Prototype_pattern" target="_blank">Prototype pattern</a> creates new instances of an object by cloning others already in used, rather than by actually creating a new one. To do so, an abstract class must be declared specifying a pure virtual <code>clone()</code> method. Any class that needs a <em>polymorphic constructor</em> capability derives itself from the abstract base class, implementing the <code>clone()</code> operation.</p>
<p>The client then, instead of writing code that invokes the <code>new()</code> operator, calls a <code>clone()</code> operation on the abstract base class, indicating the particular concrete derived class desired.</p>
<h4>Singleton</h4>
<p>The <a href="http://en.wikipedia.org/wiki/Singleton_pattern" target="_blank">Singleton pattern</a> is used when the application needs one, and only one, instance of an object. By using this pattern, a global access point to the instance is provided, and the instance is created when the first access is made.</p>
<p>When choosing which ones to use, keep in mind that sometimes creational patterns are complementary, so you might be able to use more than one of these.</p>
<div><strong>Continue reading <a href="http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iii-structural-patterns/">Software design patterns (III): structural patterns »</a></strong></div>
<h4>Further reading</h4>
<ul>
<li><a href="http://www.oodesign.com/" target="_blank">Object Oriented Design</a></li>
<li><a href="http://en.wikipedia.org/wiki/Creational_pattern" target="_blank">Creational Pattern [Wikipedia]</a></li>
</ul>


<h4>Related posts:</h4><p><ol><li><a href='http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iii-structural-patterns/' rel='bookmark' title='Permanent Link: Software design patterns (III): structural patterns'>Software design patterns (III): structural patterns</a></li>
<li><a href='http://www.undisciplinedbytes.com/2009/12/software-design-patterns-i/' rel='bookmark' title='Permanent Link: Software design patterns (I)'>Software design patterns (I)</a></li>
<li><a href='http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iv-behavioral-patterns/' rel='bookmark' title='Permanent Link: Software design patterns (IV): behavioral patterns'>Software design patterns (IV): behavioral patterns</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.undisciplinedbytes.com/2009/12/software-design-patterns-ii-creational-patterns/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Software design patterns (I)</title>
		<link>http://www.undisciplinedbytes.com/2009/12/software-design-patterns-i/</link>
		<comments>http://www.undisciplinedbytes.com/2009/12/software-design-patterns-i/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 15:01:03 +0000</pubDate>
		<dc:creator>Oliver Mezquita</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.undisciplinedbytes.com/?p=243</guid>
		<description><![CDATA[Design patterns are solutions to common software development problems, and aim to facilitate the development of a software project. A solution must have proven effectiveness and be highly reusable (can be applied to different design problems in different circumstances) to become a design pattern.
A pattern describes a problem that happens over and over again in [...]]]></description>
			<content:encoded><![CDATA[<p>Design patterns are solutions to common software development problems, and aim to facilitate the development of a software project. A solution must have proven effectiveness and be highly reusable (can be applied to different design problems in different circumstances) to become a design pattern.</p>
<p>A pattern describes a problem that happens over and over again in our environment, and then explains <strong>the core of the solution</strong> to that particular problem. Since it is <strong>just a scheme</strong> of the solution, the application of this pattern is not literal: <strong>it requires adaptation</strong>. You could use the same pattern a thousand times, and never repeat the way you applied it.</p>
<p><span id="more-243"></span></p>
<p>Software design patterns aim to:</p>
<ul>
<li>Provide reusable elements in the design of software projects</li>
<li>Avoid spending time in the search of a solution to well-known and previously solved problems</li>
<li>Standardize the process of designing software applications</li>
<li>Facilitate the learning process of new generations of software developers and designers</li>
</ul>
<p>Software design patterns are not used for:</p>
<ul>
<li>Imposing some alternatives against others: there are plenty of design patterns out there, and the software engineer must compare all of them and choose the one that best suits the needs of the project, if any at all.</li>
<li>Erase the creativity inherent to software design: these patterns are a just a guide to an easier design process, a set of advices to follow. Developers can choose to either follow these rules or adapt them to better fit requirements.</li>
</ul>
<p>These patterns are only recommended in case we’re facing a similar problem that the pattern addresses, having always in mind that it could just not be applied to our particular case. <strong>Abusing or forcing the use of design patterns can be a mistake.</strong></p>
<p>In brief, a pattern is a common structure that similar applications have. This happens in all levels of life. For example, in our ordinary life we apply the pattern<em> “greeting – introduction– message – farewell”</em> in many different occasions. If you don’t think patterns are useful, then try to use the scheme <em>“farewell – message – introduction – greeting”</em> and see what happens.</p>
<p>The most widespread catalogue of design patterns can be found in the book <strong><em>Design Patterns: Elements of Reusable Object-Oriented Software</em></strong>, from Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (1995, Addison-Wesley), AKA GOF (Gang-Of-Four). According to this book, design patterns can be categorized regarding the purpose they have been defined for:</p>
<ul>
<li><strong>Creational patterns</strong>: solve instance creation problems. They help in encapsulating and abstracting these creations.</li>
<li><strong>Structural patterns</strong>: solve class and object composition problems.</li>
<li><strong>Behavioral patterns</strong>: solve problems about interaction and responsibilities among classes and objects.</li>
</ul>
<p>Software design patterns are usually easy to understand. What might get you more headaches might be using them. They really help and make software development less problematic, so it is very important to get to know some of them. I’ll mention some of them in the next few posts.</p>
<div><strong>Continue reading <a href="http://www.undisciplinedbytes.com/2009/12/software-design-patterns-ii-creational-patterns/">Software design patterns (II): creational patterns »</a></strong></div>
<h4>Further reading</h4>
<ul>
<li><a href="http://www.serc.nl/people/florijn/interests/patts.html" target="_blank">Software (design) patterns resources</a></li>
<li><a href="http://www.cmcrossroads.com/bradapp/docs/patterns-intro.html" target="_blank">Patterns and Software: Essential Concepts and Terminology</a></li>
<li><a href="http://en.wikipedia.org/wiki/Design_Patterns_(book)" target="_blank">Design Patterns: Elements of Reusable Object-Oriented Software (ISBN 0-201-63361-2)</a></li>
</ul>


<h4>Related posts:</h4><p><ol><li><a href='http://www.undisciplinedbytes.com/2009/12/software-design-patterns-ii-creational-patterns/' rel='bookmark' title='Permanent Link: Software design patterns (II): creational patterns'>Software design patterns (II): creational patterns</a></li>
<li><a href='http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iii-structural-patterns/' rel='bookmark' title='Permanent Link: Software design patterns (III): structural patterns'>Software design patterns (III): structural patterns</a></li>
<li><a href='http://www.undisciplinedbytes.com/2010/01/software-design-patterns-iv-behavioral-patterns/' rel='bookmark' title='Permanent Link: Software design patterns (IV): behavioral patterns'>Software design patterns (IV): behavioral patterns</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.undisciplinedbytes.com/2009/12/software-design-patterns-i/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>CSS 3: one more step in the evolution of the web</title>
		<link>http://www.undisciplinedbytes.com/2009/12/css-3-one-more-step-in-the-evolution-of-the-web/</link>
		<comments>http://www.undisciplinedbytes.com/2009/12/css-3-one-more-step-in-the-evolution-of-the-web/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 15:01:41 +0000</pubDate>
		<dc:creator>Oliver Mezquita</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[Semantic web]]></category>

		<guid isPermaLink="false">http://www.undisciplinedbytes.com/2009/12/css-3-one-more-step-in-the-evolution-of-the-web/</guid>
		<description><![CDATA[CSS 2 was released in 1997, and after more than 10 years it needs to be updated to reflect the new uses and trends we’ve been seeing in the web. This new version of Cascading Style Sheets brings new features long awaited that will make web development easier. Alongside with HTML 5, this new version [...]]]></description>
			<content:encoded><![CDATA[<p>CSS 2 was released in 1997, and after more than 10 years it needs to be updated to reflect the new uses and trends we’ve been seeing in the web. This new version of <a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets" target="_blank">Cascading Style Sheets</a> brings new features long awaited that will make web development easier. Alongside with <a href="http://www.undisciplinedbytes.com/2009/11/html-5-dramatic-improvements-in-the-web-language/" target="_blank">HTML 5</a>, this new version represents the evolution of the web, and aims to take the concept of <a href="http://www.undisciplinedbytes.com/2009/11/the-semantic-web/" target="_blank">semantics</a> into the core of the web.</p>
<p>CSS 3 has quite a few new concepts. Let’s take a look:</p>
<p><span id="more-239"></span></p>
<h4>New properties</h4>
<ul>
<li><strong>Borders</strong>: border-color, border-image, border-radius, box-shadow.</li>
<li><strong>Backgrounds</strong>: background-origin, background-clip, background-size, layering multiple background images.</li>
<li><strong>Color</strong>: HSL colors, HSLA colors, RGBA colors opacity.</li>
<li><strong>Text</strong>: text-shadow, text-overflow.</li>
<li><strong>Interface</strong>: box-sizing, resize.</li>
<li><strong>Selectors</strong>: attribute selectors.</li>
<li><strong>Formats</strong>: media queries, multiple column layout, speech.</li>
</ul>
<h4>New features</h4>
<p>Using these new properties we’ll be able to achieve things such as:</p>
<ul>
<li><strong>Borders, background</strong><br />
CSS 3 will allow images for borders, round corners and shadows. Objects can not only be positioned, but its direction can also be changed (horizontal or vertical).</li>
<li><strong>Multi-column layout</strong><br />
Designing pages with multiple columns now will be easier than ever. Until now we needed to enclose the content in two separate DIVs to simulate a two-column layout; now we’ll just use <code>column-count: 2</code>. Not all that hard, right?</li>
<li><strong>Advanced Layout</strong><br />
This new feature will allow objects to be distributed along the screen in a better an easier way, and combine them in different manners without additional tags. Besides, the page model will be included: this means that we will be able to indicate page footers, crossed references, and section headers.</li>
<li><strong>Selectors </strong><br />
There are new selectors to make it easier locating exactly the element you want:<br />
<code>E:only-of-type</code>: an element which is unique in its type.<br />
<code>E:not(s)</code>: an element which doesn’t match simple selector.<br />
<code>E ~ F</code>: an element F with an element E right before.<br />
<code>E:nth-child</code>: the n-th child element of a parent node. With this selector we’ll be able to implement things such as <strong>zebra tables.</strong><br />
<code>E:nth-last-child</code>: the last child element from a parent node.<br />
<code>E:nth-of-type</code>: the n-th element which is of a certain type.<br />
<code>E:first-of-type</code>: the first element which is of a certain type.</li>
<li><strong>Resizing </strong><br />
Up till now, if we wanted our elements to be resizable we needed to use Javascript to alter its attributes. With CSS 3 it will now be a task of the browser, just by using the <code>resize</code> property.</li>
<li><strong>And many more things …</strong></li>
</ul>
<p>Some properties of CSS 3 <a href="http://westciv.com/wiki/Experimental_CSS_compatibility_table" target="_blank">are already being implemented in most major browsers</a>. There’s not a 100% fully compliant web browser yet (specially because CSS 3 is not finished yet), but it won’t take much time to have one. This means that maybe we won’t be able to use all of these new features right now, but we can certainly start using some of them. So, what are you waiting for? The sooner the better!</p>
<h4>Further reading</h4>
<ul>
<li><a href="http://www.w3.org/TR/css3-roadmap/" target="_blank">W3C CSS3</a></li>
<li><a href="http://www.css3.info">www.css3.info</a></li>
<li><a href="http://www.webappers.com/2009/08/10/70-must-have-css3-and-html5-tutorials-and-resources/" target="_blank">70 Must-Have CSS3 and HTML5 Tutorials and Resources</a></li>
</ul>


<h4>Related posts:</h4><p><ol><li><a href='http://www.undisciplinedbytes.com/2009/11/html-5-dramatic-improvements-in-the-web-language/' rel='bookmark' title='Permanent Link: HTML 5: dramatic improvements in the web language'>HTML 5: dramatic improvements in the web language</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.undisciplinedbytes.com/2009/12/css-3-one-more-step-in-the-evolution-of-the-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTML 5: dramatic improvements in the web language</title>
		<link>http://www.undisciplinedbytes.com/2009/11/html-5-dramatic-improvements-in-the-web-language/</link>
		<comments>http://www.undisciplinedbytes.com/2009/11/html-5-dramatic-improvements-in-the-web-language/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 15:00:23 +0000</pubDate>
		<dc:creator>Oliver Mezquita</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[Semantic web]]></category>

		<guid isPermaLink="false">http://www.undisciplinedbytes.com/?p=200</guid>
		<description><![CDATA[HTML 5 is a new revision of the standard language that moves the web. The increase in needs has brought new uses in HTML and new tags to support them, paying special attention to the semantic web. There are quite a few elements added to the new HTML standard to encapsulate different types of information:

New [...]]]></description>
			<content:encoded><![CDATA[<p>HTML 5 is a new revision of the standard language that moves the web. The increase in needs has brought new uses in HTML and new tags to support them, paying special attention to the semantic web. There are quite a few elements added to the new HTML standard to encapsulate different types of information:</p>
<p><span id="more-200"></span></p>
<h4>New tags</h4>
<ul>
<li><code>&lt;article /&gt;</code> This new element defines a portion of the content as an article. Perfect for newspapers or blogs.</li>
<li><code>&lt;aside /&gt;</code> Represents a fragment of information that slightly relates with the rest of the content.</li>
<li><code>&lt;dialog /&gt;</code> Depicts conversations.</li>
<li><code>&lt;figure /&gt;</code> Used to associate a caption with an embedded content, such as graphics or video.</li>
<li><code>&lt;footer /&gt;</code> Page section to hold author information, copyright statement, etc&#8230;</li>
<li><code>&lt;header /&gt;</code> Page section to hold some introductory information.</li>
<li><code>&lt;nav /&gt;</code> Section oriented to navigation.</li>
<li><code>&lt;section /&gt;</code> Element that defines a generic section.</li>
<li><code>&lt;audio /&gt;</code> and &lt;video /&gt; Provides multimedia content.</li>
<li><code>&lt;embed /&gt;</code> Supports plugin contents.</li>
<li><code>&lt;m /&gt;</code> Marked text.</li>
<li><code>&lt;meter /&gt;</code> Used to display measures.</li>
<li><code>&lt;time /&gt;</code> Used to display dates and/or time.</li>
<li><code>&lt;canvas /&gt;</code> Used to show real-time renderized graphics, such as games. For example, <a href="http://www.undisciplinedbytes.com/2009/10/html-5-canvas-tag-demonstration-sierra-adventure-games/" target="_blank">Sierra adventure games.</a></li>
<li><code>&lt;command /&gt;</code> Related with commands a user can invoke.</li>
<li><code>&lt;datagrid /&gt;</code> Shows additional information if it is requested by the user.</li>
<li><code>&lt;datalist /&gt;</code> Used together with the new attribute for &lt;input /&gt; can be used to create comboboxes.</li>
<li><code>&lt;output /&gt;</code> Denotes what kind of output the page produces.</li>
<li><code>&lt;progress /&gt;</code> Represents a progress bar in a time consuming task, such as donwloading a file.</li>
</ul>
<h4>New local attributes</h4>
<p>There&#8217;s a few new attributes for some of the elements that were already present in HTML4.</p>
<ul>
<li><code>media</code>: for greater consistency with the <code>link</code> element.</li>
<li><code>ping</code>: whitespace-delimited URLs list to which a ping will be produced when the link is followed. For the elements <code>&lt;area /&gt;</code> and <code>&lt;a /&gt;</code>.</li>
<li><code>target</code>: for greater consistency the <code>&lt;a /&gt;</code> element.</li>
<li><code>autofocus</code>: indicates that the <code>&lt;input /&gt;, &lt;select /&gt;, &lt;textarea /&gt;</code> or <code>&lt;button /&gt;</code> element should get the focus at page load.</li>
<li><code>form</code>: attribute for <code>&lt;input /&gt;, &lt;ouput /&gt;, &lt;select /&gt; &lt;textarea /&gt;, &lt;button /&gt;</code> and <code>&lt;fieldset /&gt;</code> which allows them to be associated to a form. This way, they can now be placed anywhere on a page, not as children of the <code>form</code> element.</li>
<li><code>replace</code>: will affect the element once changes are performed to it. For elements <code>&lt;input /&gt;, &lt;button /&gt;</code> and <code>&lt;form /&gt;</code>.</li>
<li><code>data</code>: specifies data for the elements <code>&lt;form /&gt;, &lt;select /&gt;</code> and <code>&lt;datalist /&gt;</code>.</li>
<li><code>required</code>: denotes a required element, for <code>&lt;input /&gt;</code> and <code>&lt;textarea /&gt;</code>.</li>
<li><code>disabled</code>: for the <code>&lt;fieldset /&gt;</code> element.</li>
<li><code>autocomplete, min, max, pattern, step</code>: these attributes delimitate the possibilities of the <code>&lt;input /&gt;</code> element.</li>
<li><code>list</code>: for <code>&lt;datalist /&gt;</code> and <code>&lt;select /&gt; </code> elements.</li>
<li><code>template</code>: for <code>&lt;input /&gt;</code> and <code>&lt;button /&gt;</code> elements, it will be used to repeat templates.</li>
<li><code>scoped</code>: for the <code>&lt;style /&gt;</code> element, enables the use of scoped style sheets.</li>
<li><code>async</code>: for the <code>&lt;script /&gt;</code> element. AJAX turned into an attribute.</li>
</ul>
<h4>New global attributes</h4>
<p>Some attributes that apply to the whole web page document:</p>
<ul>
<li><code>contenteditable</code>: denotes an editable area.</li>
<li><code>contextmenu</code>: contextual menu supplied by the user.</li>
<li><code>draggable</code>: &#8230; needs explanation?</li>
<li><code>tabindex</code>: a numeric value representing the order of elements we will tour around when pressing the TAB key.</li>
<li><code>irrelevant</code>: &#8230; need I say more?</li>
<li><code>repeat, repeat-start, repeat-min, repeat-max</code>: these attributes refer to iterations.</li>
</ul>
<h4>HTMLDocument extensions</h4>
<p>There are some improvements, and some other elements that finally get standarized:</p>
<ul>
<li><code>getElementsByClassName()</code>: selects elements given a class. Time responses seem to be dramatically improved by using this function.</li>
<li><code>innerHTML</code>: present in all ECMAScript implementations, it was not a standard till now.</li>
<li><code>activeElement, hasFocus()</code>: will allow us to know which is element is active and which one has the focus.</li>
<li><code>getSelection()</code>: returns an object with the current selection.</li>
<li><code>designMode, execCommand()</code>: used to edit documents.</li>
</ul>
<h4>HTMLElement extensions:</h4>
<p>The DOM element has also had some changes:</p>
<ul>
<li><code>getElementsByClassName()</code>: returns the children of an element that has a given class.</li>
<li><code>innerHTML</code>: reads/changes the content of a node.</li>
<li><code>classList</code>: a very interesting implementation that, along with <code>className</code>, lets us interact with element classes, providing methods such as <code>has(), toggle(), add()</code> and <code>remove()</code>.</li>
<li><code>relList</code>: works as <code>classList</code> on the rel attributes of the elements <code>&lt;a /&gt;, &lt;area /&gt; and &lt;link /&gt;</code>.</li>
</ul>
<p>This is just a quick overview of the most important changes that HTML will bring. But there&#8217;s many more not mentioned here. For a complete reference guide, consult the <a href="http://dev.w3.org/html5/html4-differences/Overview.html" target="_blank">W3C official draft</a>.</p>
<p>HTML 5 is still a draft. Its definition is not finished yet. But all major browsers are already starting to implement some of its features. There&#8217;s still many years to wait for HTML 5 to be as widespread as HTML 4.01 is today, but the improvements this new version bring are so impressive that may affect its adoption speed. The originally proposed name for HTML 5 was <strong>Web Applications 1.0</strong>, which provides a very good idea about the goal of this new standard.</p>
<h4>Further reading</h4>
<ul>
<li> <a href="http://www.sitepoint.com/article/html-5-snapshot-2009/" target="_blank">Yes, you can use HTML 5 today!</a></li>
<li><a href="http://www.smashingmagazine.com/2009/07/06/html-5-cheat-sheet-pdf/" target="_blank">HTML 5 cheat sheet</a></li>
<li><a href="http://www.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/" target="_blank">Coding an HTML 5 layout from scratch</a></li>
<li><a href="http://molly.com/html5/html5-0709.html" target="_blank">A selection of supported features in HTML 5</a></li>
<li><a href="http://jontangerine.com/log/2008/03/preparing-for-html5-with-semantic-class-names" target="_blank">Preparing for HTML 5 with semantic class names</a></li>
</ul>


<h4>Related posts:</h4><p><ol><li><a href='http://www.undisciplinedbytes.com/2009/12/css-3-one-more-step-in-the-evolution-of-the-web/' rel='bookmark' title='Permanent Link: CSS 3: one more step in the evolution of the web'>CSS 3: one more step in the evolution of the web</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.undisciplinedbytes.com/2009/11/html-5-dramatic-improvements-in-the-web-language/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Semantic Web</title>
		<link>http://www.undisciplinedbytes.com/2009/11/the-semantic-web/</link>
		<comments>http://www.undisciplinedbytes.com/2009/11/the-semantic-web/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 15:00:31 +0000</pubDate>
		<dc:creator>Oliver Mezquita</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[Semantic web]]></category>

		<guid isPermaLink="false">http://www.undisciplinedbytes.com/?p=139</guid>
		<description><![CDATA[Semantics, as defined in Wikipedia:
Semantics is the study of meaning, usually in language. The word &#8220;semantics&#8221; itself denotes a range of ideas [...]. It is often used [...] to denote a problem of understanding that comes down to word selection or connotation.
The Semantic Web is an extended web, with a greater meaning, in which users [...]]]></description>
			<content:encoded><![CDATA[<p>Semantics, as <a href="http://en.wikipedia.org/wiki/Semantics" target="_blank">defined in Wikipedia</a>:</p>
<blockquote><p>Semantics is the study of meaning, usually in language. The word &#8220;semantics&#8221; itself denotes a range of ideas [...]. It is often used [...] to denote a problem of understanding that comes down to word selection or connotation.</p></blockquote>
<p>The Semantic Web is an extended web, with a greater meaning, in which users will be able to find answers to their questions faster and easier due to a better-defined information. This meaning-based web is supported by a set of standardized  languages that solve the problems the semantic-less web has, in which access to some information is a difficult and frustrating task.</p>
<p><span id="more-139"></span></p>
<p>The web has changed the way we communicate and do our work. Worldwide low-cost instantaneous communication is possible nowadays. We have access to millions of resources, regardless of our geographic location or language. These features have made the web tremendously successful&#8230; and at the same time they have provided its <strong>biggest problems: information overload and heterogeneity of information sources.</strong></p>
<p><strong>The Semantic Web aims at solving these two great problems</strong>, allowing software to perform some of the tasks the user must take care of now. Thanks to semantics in the web, software can process its contents and make logical decisions to solve everyday problems automatically.</p>
<p>Imagine you would want to find the nearest open pharmacy. You would go to your favorite web search engine and type <strong><em>&#8220;pharmacies open right now&#8221;</em></strong>. Today&#8217;s search engines would offer different information about pharmacies, but nothing related to what the user <strong>exactly</strong> wants to know. The next step would be to go through all the options listed and manually search for the precise information. Figure 1 shows the results a user would get with a regular search engine today.</p>
<p>By building semantics into the core of the web the search results would be accurate. Software would be able to properly understand what the user is asking for. Figure 2 shows results with a semantic search engine. These results give the user the exact information he was looking for. Geographic location would be detected automatically, and words like<em> &#8220;right now&#8221; </em>acquire greater sense and get translated to today&#8217;s date. All the information would be full of meaning.</p>
<table border="0">
<tbody>
<tr>
<td style="text-align: center;" colspan="2">Searching <strong>&#8220;pharmacies open right now&#8221;<strong> </strong></strong></td>
</tr>
<tr>
<td width="50%"><a href="javascript:;">How much does it cost to open a pharmacy &#8211; How much does it cost &#8230;</a><br />
How much does it cost to open a pharmacy? Can you please guide me. A little advice would go &#8230;</p>
<p><a href="javascript:;">Pharmacy: what it is and how it works</a><br />
One such time is right now, &#8230; the nation&#8217;s 37000 chain store pharmacies had almost 6000 open pharmacist jobs&#8230;</p>
<p><a href="javascript:;">E-Learning: Chemistry Central and Fully Open Access</a><br />
It is hard to tell exactly what this will mean for Open Access chemistry research. Right now the vast majority of articles &#8230;</td>
<td><a href="javascript:;">Mike&#8217;s pharmacy: open 8am &#8211; 10pm</a><br />
The pharmacy you can trust, right in your neighborhood. We open at 8am and close at 10pm to serve all your needs.</p>
<p><a href="javascript:;">The Best Drugstore</a><br />
&#8230; open till late, you will find all the medicines you are looking for &#8230;</p>
<p><a href="javascript:;">Your neighborhood pharmacy</a><br />
Just 5 minutes away, you&#8217;ll get special deals in most of our products. Come visit us any time, we are open 24/7.</td>
</tr>
<tr>
<td style="text-align: center;"><em>Figure 1: Results from a regular search engine</em></td>
<td style="text-align: center;"><em>Figure 2: Results from a semantic search engine</em></td>
</tr>
</tbody>
</table>
<p>The way information will be processed won&#8217;t be based on input/output parameters, but on its semantics. The Semantic Web provides an infrastructure based on metadata, allowing software to reason on the web, extending its capabilities.</p>
<p>It&#8217;s not about a magical artificial intelligence that will enable machines to understand human words&#8230; it&#8217;s just the skill of a machine to solve well-defined problems through well-defined operations that will be performed on a well-defined data set.</p>
<h4>Further reading</h4>
<p>This article covered just the very basics of the Semantic Web. If you&#8217;re still interested, you can expand your knowledge at:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Semantic_Web" target="_blank">Semantic Web</a></li>
<li><a href="http://en.wikipedia.org/wiki/Web_Ontology_Language" target="_blank">Web Ontology Language</a></li>
<li><a href="http://semanticweb.org/wiki/Main_Page" target="_blank">semanticweb.org</a></li>
<li><a href="http://swoogle.umbc.edu/" target="_blank">Swoogle: experimental semantic search engine</a> (if you&#8217;re going to use this, you might as well be interested in the <a href="http://swoogle.umbc.edu/index.php?option=com_swoogle_manual&amp;manual=faq" target="_blank">FAQ</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.undisciplinedbytes.com/2009/11/the-semantic-web/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Open Source Software</title>
		<link>http://www.undisciplinedbytes.com/2009/10/open-source-software/</link>
		<comments>http://www.undisciplinedbytes.com/2009/10/open-source-software/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 21:07:22 +0000</pubDate>
		<dc:creator>Oliver Mezquita</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[History]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.undisciplinedbytes.com/?p=8</guid>
		<description><![CDATA[There's no doubt that nowadays open source software is everywhere you look at... including this same blog. One could say that Information Technologies have gotten to where they are now partially because of open source software. Either if you are an active open source programmer or you think that open source software is the reincarnation of the Devil on Earth, a good outlook and a small synthesis of what it means is always good to have.]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s no doubt that nowadays open source software is everywhere you look at&#8230; including this same blog. One could say that Information Technologies have gotten to where they are now partially because of open source software. Either if you are an active open source programmer or you think that open source software is the reincarnation of the Devil on Earth, a good outlook and a small synthesis of what it means is always good to have.</p>
<p><span id="more-8"></span><br />
So I thought that this report I did for university could be a good starting point for my blog. Besides, it&#8217;s already linked at <a href="http://en.wikipedia.org/wiki/History_of_free_software" target="_blank">wikipedia</a>.</p>
<p><a href="http://www.undisciplinedbytes.com/wp-content/uploads/2009/10/OpenSourceSoftware.pdf">Open Source Software - History and overview</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.undisciplinedbytes.com/2009/10/open-source-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
