sábado, 23 de julho de 2011

Good Things to know - How to extract multiple RAR files

I found this little tool very cool and free (you can donate if you want).

Extract Now

It's as easy as drag the rars inside of it and just press exactrat they will be extracted to the same folder where the original .rar is. (you can configure for different folders in settings)

And that's it, no more openig hundreds of rar to take diferent little things. I use it allot for free VST machines wich are KB in size but I have thousands of them :)

Stay cool :p

sábado, 9 de julho de 2011

Software Architecture Part I

About: This is the first post about software architecture that I'm trying to compile in kind of an handbook of easy access.

This is a very abstract knowledge, so please clear your mind out and try to see everything as the most generic as it can get so that you can adapt these definitions to real world problems solving, in deductive manner.

A software architecture is basically a system. That said it means there are inputs outputs and some kind of transfer function, that translates the outputs from the inputs.
  • Run-time Software Architecture abstraction
A software architecture is an abstraction of the run-time elements of a software system during some phase of its operation. A system may be composed of many levels of abstraction and many phases of operation, each with its own software architecture.

At the heart of software architecture is the principle of abstraction: hiding some of the details of a system through encapsulation in order to better identify and sustain its properties. A complex system will contain many levels of abstraction, each with its own architecture.

An architecture represents an abstraction of system behavior at that level, such that architectural elements are delineated by the abstract interfaces they provide to other elements at that level. Within each element may be found another architecture, defining the system of sub-elements that implement the behavior represented by the parent element's abstract interface. This recursion of architectures continues down to the most basic system elements: those that cannot be decomposed into less abstract elements.

To look to Software Architecture a run-time abstraction must be taken in account. So its not a static process and it involves taking into account the  multiple operational phases that a software can go through, such as start-up, initialization, normal processing, re-initialization, and shutdown. Which of them containing its own individual architecture.

So there are three major characteristics that a software architecture must comprise:

  1. Encapsulation - architecture can contain blocks of architectures
  2. Multiple operational phases - an architecture for each software operational states
  3. Elements - architecture is compose of them and builds up on top of those
  • Elements
A software architecture is defined by a configuration of architectural elements--components, connectors, and data--constrained in their relationships in order to achieve a desired set of architectural properties.


A software architecture is a collection of elements arranged in a certain logic, the number of elements, the way they are connected and the properties they have give a form to the architecture. This form is explained by a rationale (you can interpret rationale as the business rules), but for Fielding, rationale doesn't constitutes an architecture paradigm:
The presence or absence of rationale can influence the evolution of an architecture, but, once constituted, the architecture is independent of its reasons for being.  
That being stated we can identify 4 elements that constitute an software architecture: Components, connectors, datum and configuration.
  • Components
component is an abstract unit of software instructions and internal state that provides a transformation of data via its interface.


So components are processing elements that supply the transformation on the data elements nevertheless a component is defined by its interface and the services it provides to other components, rather than by its implementation behind the interface.
  • Connector
connector is an abstract mechanism that mediates communication, coordination, or cooperation among components.


A connector is an abstract mechanism that mediates communication, coordination, or cooperation among components. They act as mediators on the exchange of data between interfaces without changing it.


Internally, a connector may consist of a subsystem of components that transform the data for transfer, perform the transfer, and then reverse the transformation for delivery (and in this sense acts as in integration device). However, the external behavioral abstraction captured by the architecture ignores those details. In contrast, a component may, but not always will, transform data from the external perspective.
  • Datum
datum is an element of information that is transferred from a component, or received by a component, via a connector.


Data elements are simply documents with info that circle through the architectural elements. Data can be provided by outside systems and it can be generated by internal components (like datetime fields added for logging purposes).
  • Configuration
A configuration is the structure of architectural relationships among components, connectors, and data during a period of system run-time.

The configuration is the syntax that gives a meaning to the architecture. It is the set of rules on how elements should behave.

Strictly speaking, one might think of a configuration as being equivalent to a set of specific constraints on component interaction applied to an operational phase.





This was mostly taken from Roy Thomas Fielding Doctoral Dissertation for which we should give many thanks for its contribution on creating a model for better web applications development, this is not my work and there's allot of copy paste I just digged the main ideas and arranged them it in a topic manner, I also include some of my thought on the matter.
You can find Fielding's Dissertation here.