REST is a first-class citizen in the Rails world, though most of the hard work is done at the routing level. The controller stack has some niceties revolving around mime type handling with the respond_to facility but, to date, there’s not been a lot built into actionpack to handle the serving of resources. The addition of respond_with (and this follow-up) takes one step towards more robust RESTful support with an easy way to specify how resources are delivered. Here’s how it works:
Basic UsageIn your controller you can specify what resource formats are supported with the class method respond_*to*. Then, within your individual actions, you tell the controller the resource or resources to be delivered using respond_*with*:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | class UsersController < ApplicationController::Base respond_to :html, :xml, :json def index respond_with(@users = User.all) end def create @user = User.create(params[:user]) respond_with(@user, :location => users_url) end end |
This will match each supported format with an appropriate response. For instance, if the request is for /users.xml then the controller will look for a /users/index.xml.erb view template to render. If such a view template doesn’t exist then it tries to directly render the resource in the :xml format by invoking to_xml (if it exists). Lastly, if respond_with was invoked with a :location option the request will be redirected to that location (as in the case of the create action in the above example).
So here’s the equivalent implementation without the use of respond_with (assuming no index view templates):
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class UsersController < ApplicationController::Base def index @users = User.all respond_to do |format| format.html format.xml { render :xml => @users } format.json { render :json => @users } end end def create @user = User.create(params[:user]) respond_to do |format| format.html { redirect_to users_url } format.xml { render :xml => @user } format.json { render :json => @user } end end end |
You can see how much boilerplate response handling is now handled for you especially if it’s multiplied over the other default actions. You can pass in :status and :head options to respond_with as well if you need to send these headers back on resources rendered directly (i.e. via to_xml):
| 1 2 3 4 5 6 7 8 | class UsersController < ApplicationController::Base respond_to :html, :xml, :json def index respond_with(@users = User.all, :status => :ok) end end |
It’s also possible to override standard resource handling by passing in a block to respond_with specifying which formats to override for that action:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | class UsersController < ApplicationController::Base respond_to :html, :xml, :json # Override html format since we want to redirect to a different page, # not just serve back the new resource def create @user = User.create(params[:user]) respond_with(@user) do |format| format.html { redirect_to users_path } end end end |
You can also pass in :except and :only options to only support formats for specific actions (as you do with before_filter):
| 1 2 3 4 5 | class UsersController < ApplicationController::Base respond_to :html, :only => :index respond_to :xml, :json, :except => :show ... end |
If you’re still want to use respond_to within your individual actions this update has also bundled the :any resource format that can be used as a wildcard match against any unspecified formats:
| 1 2 3 4 5 6 7 8 9 10 11 12 | class UsersController < ApplicationController::Base def index @users = User.all respond_to do |format| format.html format.any(:xml, :json) { render request.format.to_sym => @users } end end end |
So all in all this is a small, but meaningful, step towards robust controller-level REST support. I should point out that the contributor of this patch is José Valim who has authored the very robust inherited_resources framework that already has support for respond_with-like functionality and many more goodies. If you’re on the search for a solid RESTful controller framework to accompany Rails’ native RESTful routing support I would suggest you take a look at his fine work.
tags: ruby, rubyonrails
basehttp://ryandaigle.com/Been considering a Motorola DROID but put off by the price tag? Amazon may tip your hand; the retailer has slashed the subsidized cost of the DROID to $109.99, saving $90 compared to buying the Android 2.0 smartphone from Verizon Wireless themselves.

Of course you’ll need to sign up to a service plan to get that price, but just think of it as getting a month’s service free. Over at Verizon they’re still offering the DROID for $199.99; however if you buy now you can get a free DROID Eris (as long as you sign up for another two-year agreement for it).
[Thanks Tom!]
typetext/htmlbasehttp://feeds.feedburner.com/AndroidCommunityCNET Asia had a chance to talk with Motorola’s Asia Pacific VP of Mobile Devices Spiro Nikolapoulos and has found out more about the company’s plans. Nikolapoulos stated that Moto is expecting to put out between 20 to 30 Android phones in 2010 on the global market.

Spiro also said that not every phone would available in every market, so we’re guessing the actual number will be more somewhat less if you count regional variants like the CLIQ and the DEXT as a single model on the whole.
On launching the MotoRoi, “The MotoRoi will be launched in China, but it’ll be known as a different name because “MotoRoi” is specifically for the Korean market. The device will be delayed for a few weeks due to the recent Google fiasco in China, but the company remains committed to the platform.”
typetext/htmlbasehttp://feeds.feedburner.com/AndroidCommunity 
La Asociacion Senderista ??2 de Junio? nos envía fotografías de sus últimas rutas e información sobre sus actividades. Se localizan en San Roque (Cádiz) y fue fundada a mediados del 2007. Su nombre se debe a que su primera ruta se realizó un 2 de junio. Durante el periodo de junio del 2007 a junio del 2008 la Asociación se ha compuesto de 64 socios con edades comprendidas entre los 10 y 66 años. La mayoría son de Campamento, pedanía de San Roque, aunque también tienen socios de La Línea de la Concepción, Puente Mayorga y San Roque.

??Nuestro primer año como Asociacion Senderista ??2 de Junio? ha sido un éxito, y este año 2008/09 pretendemos ampliar un poco más nuestro cupo de socios. Esperamos continuar ??viento en popa? como hasta ahora y animamos a todo el mundo a la practica del senderismo. Hay una frase que un día cayó en mis manos y no se de quien es, que dice:?un día de andar un día de salud??, os mando fotos de nuestras últimas rutas.? , nos comenta Luís Mauricio, presidente de la asociación.



Muchas gracias por compartir con nosotros vuestras experiencias.
Si quieres colaborar con nosotros y enviarnos tu material gráfico puedes hacerlo a través de colaboradores@descubrerural.com
Hace unos días en gran-angular, publicaban un excelente artículo sobre el correo gmail de google y el correo para dominios Google Apps for Domains.
En el se descubren nuevas formas de escribir tu misma dirección de correo electrónico, que puedes comenzar a utilizar sin hacer ninguna configuración y sin que se vea afectada tu cuenta de gmail.
Partiendo de que tu dirección sea similar a: rubendomfer@gmail.com
Para sacar todo el partido a las direcciones anteriores podemos combinarlas con las opciones de configuración de filtros que nos ofrece gmail.
Compártelo
Las plantillas de código (code templates en inglés) son pequeños snippets de código fuente que se expanden automáticamente permitiéndonos modificar determinadas partes, mientras que otras partes se mantienen fijas. Aunque son una funcionalidad disponible en todo editor que se precie, no todo el mundo parece darse cuenta de su potencial: las plantillas de código son a los editores / IDEs lo que el DRY es a la programación.
Las plantillas se invocan normalmente escribiendo una pequeña palabra en el editor y pulsando una tecla o una combinación de teclas para ??dispararlas?. Para quien no conozca el mecanismo, las dos siguientes imágenes sirven como ejemplo: al escribir en el editor del NetBeans la palabra def y pulsar a continuación la tecla tab (primera imagen), obtenemos la expansión de una definición de un método en Ruby (segunda imagen).
El cursor queda situado automáticamente en method_name, permitiéndonos escribir el nombre que queramos, y una vez pulsamos enter o bien tab de nuevo, el cursor pasa al cuerpo del método, para que podamos seguir codificando.
NetBeans trae una serie de plantillas definidas por defecto, pero a través del menú Tools > Options > Editor > Code templates podemos acceder a un panel en el que, además de poder ver todas esas plantillas predefinidas, podemos crear las nuestras propias. Hay bastantes opciones a la hora de controlar cómo se expande la plantilla; para una descripción más exhaustiva de todas ellas, aquí está la página del wiki de NetBeans dedicada a las RubyCodeTemplates.
Aquí sólo vamos a mostrar la definición de la plantilla def tal y como viene ??de serie? con el NetBeans:
La sintaxis es sencilla:
Las posibilidades son muchas (no tantas como en el TextMate, quizás, pero muchas al fin y al cabo :P). Como ejemplo, sirvan un par de plantillas que utilizamos muy a menudo en nuestros editores:
Plantilla b <% ${0 default="block"} do %> ${selection}${cursor} <% end %>
Con esta plantilla definimos bloques en Erb, algo que hacemos muy a menudo ya que normalmente usamos helpers de este tipo para capturar las distintas partes de nuestro layout.
Una cosa que hemos aprendido con la experiencia: algunas plantillas, se utilizan tanto para rodear código ya existente como para generar código desde cero. En esos casos el truco de poner ${selection}${cursor} permite utilizar la plantilla para ambos fines. ¡Y otra cosa importante! Las plantillas que incluyen el parámetro ${selection} se pueden invocar de dos maneras: utilizando una tecla (p.e. tab), en cuyo caso contarán con una selección vacía, o utilizando la combinación Alt+Enter. En funcionamiento:
Plantilla t <${0 default="div"} id="${1 default=""}">${selection}${cursor}</${0}>
Esta plantilla la utilizamos para generar tags HTML con un id. En este caso el parámetro 0 se sustituye con el nombre del tag, tanto en la apertura como en el cierre. El parámetro 1 se sustituye por el id del elemento. Y de nuevo utilizamos el truquillo de la selección para poder rodear HTML si lo deseamos.
Son sólo dos ejemplos, pero en nuestro trabajo diario utilizamos un buen puñado de plantillas que nos permiten acelerar las tareas de codificación y evitar errores al teclear. Pensad en el código que repetís constantemente y definid vuestras propias plantillas para facilitaros la tarea; una vez lo hagáis no podréis vivir sin ellas.
Zygoat Doggiebox is a versatile percussion sequencer (drum machine application) for Mac OS X. Using Doggiebox, you can create realistic-sounding drum tracks in moments, ranging from the style of a human drummer on a full kit to imaginatively bizarre experimental pieces.
Whether you want to produce a demo without taking the time to set up and record real drums or just need a click track for recording guitar, Doggiebox is the perfect tool to fill the gap. With Doggiebox, you can:
Zygoat Doggiebox is a versatile percussion sequencer (drum machine application) for Mac OS X. Using Doggiebox, you can create realistic-sounding drum tracks in moments, ranging from the style of a human drummer on a full kit to imaginatively bizarre experimental pieces.
Whether you want to produce a demo without taking the time to set up and record real drums or just need a click track for recording guitar, Doggiebox is the perfect tool to fill the gap. With Doggiebox, you can:
Zygoat Doggiebox is a versatile percussion sequencer (drum machine application) for Mac OS X. Using Doggiebox, you can create realistic-sounding drum tracks in moments, ranging from the style of a human drummer on a full kit to imaginatively bizarre experimental pieces.
Whether you want to produce a demo without taking the time to set up and record real drums or just need a click track for recording guitar, Doggiebox is the perfect tool to fill the gap. With Doggiebox, you can:
Es algo normal que estemos muy interesado en saber los pormenores fiscales de nuestros ingresos, hoy gracias a la calculadora de sueldo bruto, podremos a partir de la cantidad que recibimos por nuestra nómina cada mes, saber otros datos como la cantidad de retenciones tanto en conceptos de IRPF, de Seguridad Social y como no el sueldo bruto anual.
Esta calculadora puede ayudarnos de forma muy clara para ser capaces de tener nuestros gastos un poco más ajustados, si es que estamos sufriendo un poco con esta crisis. Por ejemplo si vamos a intentar cambiarnos de trabajo a otro mejor y nos ofrecen 1.600 euros mensuales, sabiendo nuestro sueldo bruto actual, podremos gracias a esta calculadora hallar el nuevo y así compararlos de forma real.
No es muy complicado, simplemente debemos rellenar los datos más sencillos respecto a nuestra persona y nuestra realidad jurídico laboral que es la que nos ayudará a conocer cual es el tratamiento fiscal que se le da a nuestro sueldo bruto.
Para usar esta calculadora primeros debemos rellenar nuestro estado civil, la cuantía que recibimos cada mes en nuestra entidad bancaria en concepto de nómina, así como el número de pagas con las que contamos según nuestro convenio colectivo o contrato laboral sin olvidar si estamos llevando a cabo algún tipo de reducción por vivienda habitual.
En segundo lugar y para calcular el nivel de retenciones de la Seguridad Social debemos marcar nuestra categoría profesional. En muchas ocasiones debemos estar atentos a esto, ya que no siempre se corresponde la que tenemos realmente y la que tenemos suscrita en al seguridad social cuando nuestra empresa nos ha dado de alta.
A continuación rellenaremos unos pequeños datos personales que son los que nos ayudan a conseguir reducciones en las bases de las retenciones que afectan a nuestro sueldo bruto. Los datos que debemos rellenar son: fecha de nacimiento, si tenemos descendientes y su edad, así como si tenemos ascendientes y su edad. Estos últimos datos son los más importantes si queremos pagar lo menos posible y podemos hacerlo gracias a contar con algún hijo menor de 25 años o un ascendiente mayor de 65.
Los resultados son inmediatos y podemos gracias a ellos saber:
Si contamos con pagas extras, cual será el importe de las mismas.
Cuánto nos han retenido en cuanto a IRPF de forma anual
Cuánto nos ha retenido la Seguridad Social.
Por último, cuales son las cifras de nuestra retribución neta y brutal anual.
En definitiva una forma muy sencilla de calcular cuanto ha de ser nuestro sueldo mensual para que no sólo nos salgan las cuentas de nuestra economía familiar sino para que además podamos hallar nuestro bruto anual para poder pedir un aumento a dicha cifra o quizá buscar otro tipo de opciones laborales que no ayuden a llegar a ella.
Más Información | Calculadora sueldo bruto
En Actibva | Calcula tu sueldo neto
Miguel Lopez, editor de Pymes y Autónomos y El Blog Salmón
Si queréis entreteneros con el iPhone instalando y probando cosillas, no dudeis en descargarlos el siguiente pack con más de 300 aplicaciones y juegos.

Descarga el Pack aqui
Tags: Aplicaciones, crack, crackeados, ipa, juegos
Network is working, installations sees the sata disk and creates ESX on it, BUT we don't see the controller in the configuration zone, thus we can't create a datastore in this disk.
It has BIOS 113. Is this the problem ?

Ya tenemos en España dos de los móviles más esperados después del boom de Iphone, uno de ellos, el Nokia n97 que junto con la pantalla táctil resistiva de 3,5 pulgadas, dispone también de un teclado QWERTY deslizable que a día de hoy se presenta como la mejor alternativa para escribir en un teléfono móvil. 32 Gb de capacidad de almacenamiento que se puede extender a través de tarjetas microSDHC. Cámara de 5Mpx con óptica Carl Zeiss. Conexiones HSDPA, GPS, Wifi y S60 hacen del Nokia n97 un teléfono con todas las posibilidades de cara a la navegación por Internet.
Por otro lado el HTC Magic, con pantalla tactil capacitativa de 480×320 píxeles, sin memoria interna pero con posibilidad de ampliación en tarjetas microSD. GPS y buena bateria de 1.400 mAh permitirán disfrutar de su conectividad HSDPA (hasta 7,2 Mbps), wifi y bluetooth. Sú cámara de 3.2 megapíxeles (sin flash) completara el paquete que ofrece este móvil, siendo su principal referencia y atractivo el sistema operativo Android de Google.
Precios
El HTC Magic se vende ya en España con exclusiva Vodafone desde 19 €, pero no nos dejemos engañar, los planes de precios y permanencia a la que nos obliga la operadora, recuerdan y mucho a la acción comercial realizada por Movistar con el Iphone. No se puede encontrar libre de momento.
El Nokia n97 se podrá comprar en España a partir del lunes 4 de mayo, directamente en la tienda de Nokia a un precio todavía por definir pero con la singularidad de que se podrá adquirir de inicio libre. Eso si, la rumorología nos acerca a los 500€. Veremos en que condiciones llega a las operadoras.
Comparativa
Si en algo podemos decir que es superior el HTC Dream al Nokia n97, es en su software Android y su soporte a través de una pantalla táctil capacitativa, que se diferencia de la resistiva del Nokia en que la experiencia del usuario es mucho más intuitiva, similar a la del IPhone, mientras que el terminal de Nokia requerirá mayor presión sobre la misma para realizar las diferentes acciones que permite el aparato.
Por contra, el Nokia n97 supera claramente a su competidor en experiencia multimedia y en mejor calidad de fotografías y vídeos, gracias a la cámara de 5 mpx de óptica Carl Zeiss.
Empate técnico en conectividad. Ambos teléfonos están diseñados para navegar por Internet y soportan las tecnologías más usadas en estos momentos.
En el apartado estético punto para el Nokia, nada que ver con el robusto diseño del HTC Magic, y otro punto para Nokia al incorporar teclado deslizante que permitirá escribir de manera más cómoda y sencilla que con el teclado virtual del Magic.
Conclusiones
Dos buenos teléfonos que vienen a plantar cara a la soberanía del Iphone en teléfonos táctiles, intuitivos y que ofrecen una adecuada experiencia en Internet. Quizá el decidirnos por uno u otro dependa de gustos o de alguna característica específica de alguno de los dos modelos. Para ofrecer algo más de luz sobre el tema, os dejo un par de vídeos sobre ambos teléfonos, eso si, no sin antes pedir perdón por la herejía a los amantes del Iphone ;)
Especificaciones y vídeos vistos en: Xataka y Engadget en español
basehttp://www.voolive.net/feed/DivX is pleased to announce an update to our developer-centric bundle of free applications specifically designed to create the next generation of DivX video: DivX Plus HD.
These tools are free for developers to integrate into freeware or open source projects. More information on how to download and use these tools is located in their respective tutorials.
Enjoy!
| DivX H.264 Encoder Beta 2 - 08/11/2009 | |
|
|
This free multi-threaded command-line encoder produces high definition H.264 video bitstreams that are compatible with the DivX Plus HD profile. Tutorial and download instructions... |
| DivX AAC Encoder Beta 1 - 08/11/2009 | |
|
|
This free command-line encoder produces high quality AAC audio bitstreams that are compatible with the DivX Plus HD profile from uncompressed mono, stereo, or 5.1 surround audio input sources. Tutorial and download instructions... |
Aumento de las contrataciones en esa época.
Android comes with a wide variety of widgets, small visual construction blocks you can glue together to present the users with complex and useful interfaces. However applications often need higher level visual components. A component can be seen as a complex widget made of several simple stock widgets. You could for instance reuse a panel containing a progress bar and a cancel button, a panel containing two buttons (positive and negative actions), a panel with an icon, a title and a description, etc. Creating new components can be done easily by writing a custom View but it can be done even more easily using only XML.
In Android XML layout files, each tag is mapped to an actual class instance (the class is always a subclass of View.) The UI toolkit lets you also use three special tags that are not mapped to a View instance: <requestFocus />, <merge /> and <include />. The latter, <include />, can be used to create pure XML visual components. (Note: I will present the <merge /> tag in the next installment of Android Layout Tricks.)
The <include /> does exactly what its name suggests; it includes another XML layout. Using this tag is straightforward as shown in the following example, taken straight from the source code of the Home application that currently ships with Android:
<com.android.launcher.Workspace android:id="@+id/workspace" android:layout_width="fill_parent" android:layout_height="fill_parent" launcher:defaultScreen="1"> <include android:id="@+id/cell1" layout="@layout/workspace_screen" /> <include android:id="@+id/cell2" layout="@layout/workspace_screen" /> <include android:id="@+id/cell3" layout="@layout/workspace_screen" /> </com.android.launcher.Workspace>In the <include /> only the layout attribute is required. This attribute, without the android namespace prefix, is a reference to the layout file you wish to include. In this example, the same layout is included three times in a row. This tag also lets you override a few attributes of the included layout. The above example shows that you can use android:id to specify the id of the root view of the included layout; it will also override the id of the included layout if one is defined. Similarly, you can override all the layout parameters. This means that any android:layout_* attribute can be used with the <include /> tag. Here is an example:
<include android:layout_width="fill_parent" layout="@layout/image_holder" /> <include android:layout_width="256dip" layout="@layout/image_holder" />This tag is particularly useful when you need to customize only part of your UI depending on the device's configuration. For instance, the main layout of your activity can be placed in the layout/ directory and can include another layout which exists in two flavors, in layout-land/ and layout-port/. This allows you to share most of the UI in portrait and landscape.
Like I mentioned earlier, my next post will explain the <merge />, which can be particularly powerful when combined with <include />.
Android comes with a wide variety of widgets, small visual construction blocks you can glue together to present the users with complex and useful interfaces. However applications often need higher level visual components. A component can be seen as a complex widget made of several simple stock widgets. You could for instance reuse a panel containing a progress bar and a cancel button, a panel containing two buttons (positive and negative actions), a panel with an icon, a title and a description, etc. Creating new components can be done easily by writing a custom View but it can be done even more easily using only XML.
In Android XML layout files, each tag is mapped to an actual class instance (the class is always a subclass of View.) The UI toolkit lets you also use three special tags that are not mapped to a View instance: <requestFocus />, <merge /> and <include />. The latter, <include />, can be used to create pure XML visual components. (Note: I will present the <merge /> tag in the next installment of Android Layout Tricks.)
The <include /> does exactly what its name suggests; it includes another XML layout. Using this tag is straightforward as shown in the following example, taken straight from the source code of the Home application that currently ships with Android:
<com.android.launcher.Workspace android:id="@+id/workspace" android:layout_width="fill_parent" android:layout_height="fill_parent" launcher:defaultScreen="1"> <include android:id="@+id/cell1" layout="@layout/workspace_screen" /> <include android:id="@+id/cell2" layout="@layout/workspace_screen" /> <include android:id="@+id/cell3" layout="@layout/workspace_screen" /> </com.android.launcher.Workspace>In the <include /> only the layout attribute is required. This attribute, without the android namespace prefix, is a reference to the layout file you wish to include. In this example, the same layout is included three times in a row. This tag also lets you override a few attributes of the included layout. The above example shows that you can use android:id to specify the id of the root view of the included layout; it will also override the id of the included layout if one is defined. Similarly, you can override all the layout parameters. This means that any android:layout_* attribute can be used with the <include /> tag. Here is an example:
<include android:layout_width="fill_parent" layout="@layout/image_holder" /> <include android:layout_width="256dip" layout="@layout/image_holder" />This tag is particularly useful when you need to customize only part of your UI depending on the device's configuration. For instance, the main layout of your activity can be placed in the layout/ directory and can include another layout which exists in two flavors, in layout-land/ and layout-port/. This allows you to share most of the UI in portrait and landscape.
Like I mentioned earlier, my next post will explain the <merge />, which can be particularly powerful when combined with <include />.
Android comes with a wide variety of widgets, small visual construction blocks you can glue together to present the users with complex and useful interfaces. However applications often need higher level visual components. A component can be seen as a complex widget made of several simple stock widgets. You could for instance reuse a panel containing a progress bar and a cancel button, a panel containing two buttons (positive and negative actions), a panel with an icon, a title and a description, etc. Creating new components can be done easily by writing a custom View but it can be done even more easily using only XML.
In Android XML layout files, each tag is mapped to an actual class instance (the class is always a subclass of View.) The UI toolkit lets you also use three special tags that are not mapped to a View instance: <requestFocus />, <merge /> and <include />. The latter, <include />, can be used to create pure XML visual components. (Note: I will present the <merge /> tag in the next installment of Android Layout Tricks.)
The <include /> does exactly what its name suggests; it includes another XML layout. Using this tag is straightforward as shown in the following example, taken straight from the source code of the Home application that currently ships with Android:
<com.android.launcher.Workspace android:id="@+id/workspace" android:layout_width="fill_parent" android:layout_height="fill_parent" launcher:defaultScreen="1"> <include android:id="@+id/cell1" layout="@layout/workspace_screen" /> <include android:id="@+id/cell2" layout="@layout/workspace_screen" /> <include android:id="@+id/cell3" layout="@layout/workspace_screen" /> </com.android.launcher.Workspace>In the <include /> only the layout attribute is required. This attribute, without the android namespace prefix, is a reference to the layout file you wish to include. In this example, the same layout is included three times in a row. This tag also lets you override a few attributes of the included layout. The above example shows that you can use android:id to specify the id of the root view of the included layout; it will also override the id of the included layout if one is defined. Similarly, you can override all the layout parameters. This means that any android:layout_* attribute can be used with the <include /> tag. Here is an example:
<include android:layout_width="fill_parent" layout="@layout/image_holder" /> <include android:layout_width="256dip" layout="@layout/image_holder" />This tag is particularly useful when you need to customize only part of your UI depending on the device's configuration. For instance, the main layout of your activity can be placed in the layout/ directory and can include another layout which exists in two flavors, in layout-land/ and layout-port/. This allows you to share most of the UI in portrait and landscape.
Like I mentioned earlier, my next post will explain the <merge />, which can be particularly powerful when combined with <include />.