A development snapshot has been published at Nov. 12 2008
This snapshot includes bug fixes and removes the support of XML for the language files from the core and the administration application, in order to provide a faster way to load the languages tags. The default and only one format is a PHP Array. Also includes support to provide JSON-RPC services by the use of a new Annotation named @JSONRPC at the controller level, this feature allows to access all the methods of a controller from a JSON-RPC client.
You can download this snapshot from http://tlalokes.org/
Tue, 11. November 2008
The Configuration File (Part 4 - Default section)
The default section of the configuration file provides the following options:

controller. At this point you can set the controller class that the frameworks must load by default.
language. Here is where you set the name of the default language that the framework must load for your application. Obviously you must create this language file first. The name of the file must be based on the ISO 639-2 with the extension .php and located at the _lang directory in your application's directory, by example: myapp/_lang/eng.php for english. This languages file will be described in a future post.
charset (Characters set). The use of UTF-8 is recommended, but actually the following characters sets are supported:

controller. At this point you can set the controller class that the frameworks must load by default.
language. Here is where you set the name of the default language that the framework must load for your application. Obviously you must create this language file first. The name of the file must be based on the ISO 639-2 with the extension .php and located at the _lang directory in your application's directory, by example: myapp/_lang/eng.php for english. This languages file will be described in a future post.
charset (Characters set). The use of UTF-8 is recommended, but actually the following characters sets are supported:
- UTF-8
- ISO-8859-1
- ISO-8859-15
- cp866
- cp1251
- cp1252
- KOI8-R
- BIG5
- GB2312
- BIG5-HKSCS
- Shift_JIS
- EUC-JP
at
21:49
| No comments
Sat, 11. October 2008
Remembering Yngwie Malmsteen's Concerto Suite Live From Japan 2000
I will remember this moment for eternity. Is glorious. Enjoy.
Yngwie Malsmsteen Concerto Suite Live From Japan 2000 with the Japan Philharmonic
Vivace
Link to video
Blitzkrieg
Link to video
Trilogy Suite
Link to video
Prelude To April And Tocatta
Link to video
Sarabande
Link to video
Fugue
Link to video
Yngwie Malsmsteen Concerto Suite Live From Japan 2000 with the Japan Philharmonic
Vivace
Link to video
Blitzkrieg
Link to video
Trilogy Suite
Link to video
Prelude To April And Tocatta
Link to video
Sarabande
Link to video
Fugue
Link to video
at
22:39
| No comments
Awsome perico
Thu, 9. October 2008
Expectations
What happens when you expect something according on a first look, instead of just wait and enjoy, results can be good in some cases, like this one:
Mon, 6. October 2008
How to install and configure OpenX module for Drupal
Download, install, configure and use OpenX
Work through the following list to get up and running with OpenX in four easy-to-take steps.
Download
Installation
Create your first campaign
Using
Download, install, configure and use the OpenX module for Drupal
Download.
Download the module (according to which version of drupal you are using) from:
http://www.openx.org/openx-module-for-drupal
Decompress package.
Unzip the relevant Zip file into your Drupal/modules folder.
Activate the module at the admin console.
Login to your drupal admin console and go to Home > Administer > Site building
You should now see the OpenX module listed. Enable it

Add zones
You need to setup your zones in Home > Administer > Site configuration > OpenX AdServing
If you have an account on the hosted version of OpenX, you only need to put the zone ID's into the table. (You can also give the zones meaningful names here.)

If you want to serve ads from your existing OpenX installation, expand the "Don't have a hosted account?" section and enter the delivery URL to your OpenX installation

Blocks
You can then add the blocks to your layout in Home > Administer > Site building > Blocks

Finally At the page check that your banner appears in at your selected block.
Work through the following list to get up and running with OpenX in four easy-to-take steps.
Download
Installation
Create your first campaign
Using
Download, install, configure and use the OpenX module for Drupal
Download.
Download the module (according to which version of drupal you are using) from:
http://www.openx.org/openx-module-for-drupal
Decompress package.
Unzip the relevant Zip file into your Drupal/modules folder.
Activate the module at the admin console.
Login to your drupal admin console and go to Home > Administer > Site building
You should now see the OpenX module listed. Enable it

Add zones
You need to setup your zones in Home > Administer > Site configuration > OpenX AdServing
If you have an account on the hosted version of OpenX, you only need to put the zone ID's into the table. (You can also give the zones meaningful names here.)

If you want to serve ads from your existing OpenX installation, expand the "Don't have a hosted account?" section and enter the delivery URL to your OpenX installation

Blocks
You can then add the blocks to your layout in Home > Administer > Site building > Blocks

Finally At the page check that your banner appears in at your selected block.
at
11:02
| No comments
Wed, 1. October 2008
From educational warning to soviet tactics
Some time ago I wrote (in Spanish) an article named "Alerta educativa" (Educational warning), the article was about the interference of the software corporations in the education, but today they are using soviet tactics with the children.
I have nothing but to reproduce the open letter my dear friend Gunnar Wolf just sent to the national newspaper El Universal. He wrote "The reason I contacted them is the publication, over a week ago, of a note where they invite children to take part in a contest by IMPI towards fighting piracy. But not only they engage in doublespeak and prior judgment by further pushing the term piracy for an action that has nothing to do with it, they also expect children to denounce their parents and teachers if they engage in such a destructive activity. Think Josef Stalin for a while, and you will get the picture".


Right here the open letter in Spanish:
Jorge Amigo Castañeda, Director General del Instituto Mexicano de Propiedad Intelectual;
Editores del periódico "El Universal";
Sociedad mexicana, presente.
El pasado día 19 de septiembre leí, con sorpresa y con indignación, el anuncio en el periódico El Universal acerca de un concurso infantil denominado -amañadamente- "contra la piratería". Pueden encontrar esta convocatoria en los archivos electrónicos de El Universal en la siguiente dirección:
http://www.eluniversal.com.mx/notas/vi_539801.html
Esta convocatoia cae en un sinnúmero de barbaridades, y solicito a los editores de este prestigioso diario el derecho de réplica.
Antes que otra cosa, si bien es cierto que la cifra de copias no autorizadas de medios digitales (entiéndase principalmente, si bien no limitado a estos conceptos, como música, películas y programas de computadora) son muy altos en nuestro país, bajo ningún concepto podemos equiparar esto con la piratería. Invito a ustedes a buscar la definición de la palabra "pirata" en su diccionario de confianza - Según la 22ª edición del Diccionario de la Real Academia Española, pirata es:
1. adj. pirático.
2. adj. clandestino.
3. com. Persona que, junto con otras de igual condición, se dedica al abordaje de barcos en el mar para robar.
4. com. Persona cruel y despiadada.
Lleno de curiosidad, busqué las definiciones relativas a los significados 1 (Perteneciente o relativo al pirata o a la piratería) y 2 (Secreto, oculto, y especialmente hecho o dicho secretamente por temor a la ley o para eludirla). Estas definiciones no me ayudaron en lo más mínimo a salir de mi indignación - ¿Resulta entonces que el IMPI nos está acusanado de ser una sociedad cruel y despiadada? La piratería en altamar es una plaga, sí, cerca de las costas de Somalia, Indonesia y Malasia, y merece reproche y condena unánimes - Especialmente por el riesgo de vida en el que ponen a la tripulación y a los pasajeros de las embarcaciones víctimas.
Y puede parecer que esto es una queja en tono de broma - Nada más lejos de la verdad. Al equiparar la copia no autorizada (un delito, sí, pero no un delito que ocasiona pérdidas materiales directas a nadie) con la piratería, la industria discográfica (la principal impulsora de este término) está llevándonos a ese futuro predicho magistralmente por George Orwell, en 1984, en que el lenguaje mismo iba siendo tergiversado, torcido, para manipular a la población. Y sencillamente, no hay paralelo válido entre la copia no autorizada y la actividad que lleva a cabo un pirata.
Pero dejemos un poco de lado este primer punto, que si bien es suficiente para causar enojo, palidece frente a la tiránica postura defendida por el IMPI. Si el IMPI se enorgullece por premiar a los niños por denunciar a sus padres y maestros, es imposible no hacer un paralelo con regímenes más represivos y más lacerantes de la dignidad individual de la historia de la humanidad: Nos lleva al triste ejemplo del niño héroe paradigmático de la Rusia soviética, Pavel Trofimovich Morozov.
Pavel (o "Pavlik") denunció a su padre ante las autoridades soviéticas por un delito fácilmente equiparable a la copia no autorizada: Por la falsificación de documentos de identidad. Esta denuncia llevó al arresto y fusilamiento del padre por parte de la autoridad. Dos años más tarde, su abuelo no aguantó más la rabia, y lo asesinó. Durante los 60 años siguientes, Pavlik fue recordado como "El Niño Héroe" en la Unión Soviética.
¿Queremos realmente transitar hacia una nueva edición de un estado represor? ¿No sería más adecuado meditar acerca de a quién impactan las supuestas pérdidas que reporta IMPI -claro está, sin cifras que las respalden- y cómo debe modificarse el régimen de propiedad para hacer frente a la nueva realidad de la humanidad?
La reproducción de la información ya no puede ser monopolio, y no debe ser criminalizada. Claro está, los creadores y los productores deben ser compensados por su trabajo, por su esfuerzo. Sin embargo, en esta época de medios digitales, en esta época donde contamos con Internet, que nos permite intercambiar toda esta información de manera completamente fidedigna y sin degradación, el modelo de negocios de los intermediarios es el que, por naturaleza, tenderá a desaparecer.
IMPI no representa a los creadores. No me representa a mí, que soy desarrollador de software (y, sí, de Software Libre). No representa a la gran mayoría de los artistas, no representa a los científicos. Representa únicamente a una industria que está en vías de extinción, y a los muy pocos artistas bendecidos por el rating de las grandes empresas de medios.
No podemos tolerar una criminalización tan tajante de la sociedad. Ni podemos permitir que estos atropellos nos lleven a una sociedad basada en el miedo y en la denuncia.
Gunnar Eyal Wolf Iszaevich
Académico del Instituto de Investigaciones Económicas, UNAM
Desarrollador de Debian GNU/Linux
I have nothing but to reproduce the open letter my dear friend Gunnar Wolf just sent to the national newspaper El Universal. He wrote "The reason I contacted them is the publication, over a week ago, of a note where they invite children to take part in a contest by IMPI towards fighting piracy. But not only they engage in doublespeak and prior judgment by further pushing the term piracy for an action that has nothing to do with it, they also expect children to denounce their parents and teachers if they engage in such a destructive activity. Think Josef Stalin for a while, and you will get the picture".
Right here the open letter in Spanish:
Jorge Amigo Castañeda, Director General del Instituto Mexicano de Propiedad Intelectual;
Editores del periódico "El Universal";
Sociedad mexicana, presente.
El pasado día 19 de septiembre leí, con sorpresa y con indignación, el anuncio en el periódico El Universal acerca de un concurso infantil denominado -amañadamente- "contra la piratería". Pueden encontrar esta convocatoria en los archivos electrónicos de El Universal en la siguiente dirección:
http://www.eluniversal.com.mx/notas/vi_539801.html
Esta convocatoia cae en un sinnúmero de barbaridades, y solicito a los editores de este prestigioso diario el derecho de réplica.
Antes que otra cosa, si bien es cierto que la cifra de copias no autorizadas de medios digitales (entiéndase principalmente, si bien no limitado a estos conceptos, como música, películas y programas de computadora) son muy altos en nuestro país, bajo ningún concepto podemos equiparar esto con la piratería. Invito a ustedes a buscar la definición de la palabra "pirata" en su diccionario de confianza - Según la 22ª edición del Diccionario de la Real Academia Española, pirata es:
1. adj. pirático.
2. adj. clandestino.
3. com. Persona que, junto con otras de igual condición, se dedica al abordaje de barcos en el mar para robar.
4. com. Persona cruel y despiadada.
Lleno de curiosidad, busqué las definiciones relativas a los significados 1 (Perteneciente o relativo al pirata o a la piratería) y 2 (Secreto, oculto, y especialmente hecho o dicho secretamente por temor a la ley o para eludirla). Estas definiciones no me ayudaron en lo más mínimo a salir de mi indignación - ¿Resulta entonces que el IMPI nos está acusanado de ser una sociedad cruel y despiadada? La piratería en altamar es una plaga, sí, cerca de las costas de Somalia, Indonesia y Malasia, y merece reproche y condena unánimes - Especialmente por el riesgo de vida en el que ponen a la tripulación y a los pasajeros de las embarcaciones víctimas.
Y puede parecer que esto es una queja en tono de broma - Nada más lejos de la verdad. Al equiparar la copia no autorizada (un delito, sí, pero no un delito que ocasiona pérdidas materiales directas a nadie) con la piratería, la industria discográfica (la principal impulsora de este término) está llevándonos a ese futuro predicho magistralmente por George Orwell, en 1984, en que el lenguaje mismo iba siendo tergiversado, torcido, para manipular a la población. Y sencillamente, no hay paralelo válido entre la copia no autorizada y la actividad que lleva a cabo un pirata.
Pero dejemos un poco de lado este primer punto, que si bien es suficiente para causar enojo, palidece frente a la tiránica postura defendida por el IMPI. Si el IMPI se enorgullece por premiar a los niños por denunciar a sus padres y maestros, es imposible no hacer un paralelo con regímenes más represivos y más lacerantes de la dignidad individual de la historia de la humanidad: Nos lleva al triste ejemplo del niño héroe paradigmático de la Rusia soviética, Pavel Trofimovich Morozov.
Pavel (o "Pavlik") denunció a su padre ante las autoridades soviéticas por un delito fácilmente equiparable a la copia no autorizada: Por la falsificación de documentos de identidad. Esta denuncia llevó al arresto y fusilamiento del padre por parte de la autoridad. Dos años más tarde, su abuelo no aguantó más la rabia, y lo asesinó. Durante los 60 años siguientes, Pavlik fue recordado como "El Niño Héroe" en la Unión Soviética.
¿Queremos realmente transitar hacia una nueva edición de un estado represor? ¿No sería más adecuado meditar acerca de a quién impactan las supuestas pérdidas que reporta IMPI -claro está, sin cifras que las respalden- y cómo debe modificarse el régimen de propiedad para hacer frente a la nueva realidad de la humanidad?
La reproducción de la información ya no puede ser monopolio, y no debe ser criminalizada. Claro está, los creadores y los productores deben ser compensados por su trabajo, por su esfuerzo. Sin embargo, en esta época de medios digitales, en esta época donde contamos con Internet, que nos permite intercambiar toda esta información de manera completamente fidedigna y sin degradación, el modelo de negocios de los intermediarios es el que, por naturaleza, tenderá a desaparecer.
IMPI no representa a los creadores. No me representa a mí, que soy desarrollador de software (y, sí, de Software Libre). No representa a la gran mayoría de los artistas, no representa a los científicos. Representa únicamente a una industria que está en vías de extinción, y a los muy pocos artistas bendecidos por el rating de las grandes empresas de medios.
No podemos tolerar una criminalización tan tajante de la sociedad. Ni podemos permitir que estos atropellos nos lleven a una sociedad basada en el miedo y en la denuncia.
Gunnar Eyal Wolf Iszaevich
Académico del Instituto de Investigaciones Económicas, UNAM
Desarrollador de Debian GNU/Linux
at
09:49
| No comments
Mon, 29. September 2008
PHP and JSON-RPC
JSON (JavaScript Object Notation) is a nice solution for the people who needs interoperation with low costs, especially in parsing time. The problem is that you have to specify your interoperation rules manually, and sometimes that is not appreciated by your service's consumers. I can hear them saying "Don't waste your time! use SOAP or XML-RPC like everyone else", and that what your are doing, not wasting parsing time, yes you are right, you know that, but they don't care, their answer is "who cares?, buy more processor or more memory, but don't waste my developer's time on your hand made services". So, what you need is a lightweight remote procedure call protocol similar to XML-RPC but in JSON format, and then provide them of already implemented object to interoperate with your RPCed JSON service.
The first answer to your first question is yes, already exist such thing, and is named JSON-RPC, very creative name isn't it? I'm sure you don't see that coming ;-), and you can find the project at http://json-rpc.org/.
Principal features?
- Inspired in the XML-RPC protocol.
- Request and Response are serialized in JSON.
- Data transported via HTTP.
- Very often used asynchronously, to avoid frozen applications while request are in process.
How it works?
Request. The request is a single object with the following properties:
- method. A string containing the name.
- params. An array of parameters.
- id. A request's unique identifier.
Response. The response is a single object with the following properties:
- result. The result of the method call.
- error. An error object. If occurred.
- id. The request's unique identifier.
In JSON code:

OK this post's title and category are about PHP, so the question is: There is a PHP implementation of the JSON-RPC project? and the answer is yes, there are more than one, so here is the list of recomendations:
- PHP-O-Lait
- JSON-RPC PHP
- JSON/XML-RPC Client and Server Implementations
The first answer to your first question is yes, already exist such thing, and is named JSON-RPC, very creative name isn't it? I'm sure you don't see that coming ;-), and you can find the project at http://json-rpc.org/.
Principal features?
- Inspired in the XML-RPC protocol.
- Request and Response are serialized in JSON.
- Data transported via HTTP.
- Very often used asynchronously, to avoid frozen applications while request are in process.
How it works?
Request. The request is a single object with the following properties:
- method. A string containing the name.
- params. An array of parameters.
- id. A request's unique identifier.
Response. The response is a single object with the following properties:
- result. The result of the method call.
- error. An error object. If occurred.
- id. The request's unique identifier.
In JSON code:

OK this post's title and category are about PHP, so the question is: There is a PHP implementation of the JSON-RPC project? and the answer is yes, there are more than one, so here is the list of recomendations:
- PHP-O-Lait
- JSON-RPC PHP
- JSON/XML-RPC Client and Server Implementations
at
12:35
| No comments
Sun, 28. September 2008
The Configuration File (Part 3 - DSN section)
As you may saw in the previous post about, there is a Database Source Name (DSN) section in the configuration file.

In the type option you can set the name of your RDBMS, actually you can use any of the following: pgsql, mysql, mysqli, sqlite, odbc, oracle and mssql.
Also you can set the host name of the server where your database is allocated, the username you will use to access your database and its current password.

In the type option you can set the name of your RDBMS, actually you can use any of the following: pgsql, mysql, mysqli, sqlite, odbc, oracle and mssql.
Also you can set the host name of the server where your database is allocated, the username you will use to access your database and its current password.
at
04:16
| No comments
Tue, 23. September 2008
The Configuration File (Part 2 - Database modes)
In a previous post I wrote about the modes section in the Tlalokes framework configuration's file. But the topic about the database mode was pending.
Tlalokes uses the Propel as ORM in order to work with databases in the same way you work with other classes and objects in PHP. Propel uses an XML schema to define the object-database relation. But it requires write this XML and then run a Phing command provided at the Propel generator in order to build objects, database tables, etc.
Tlalokes provides a simplified way to use Propel, instead of running Phing "tasks" manually throw the CLI Tlalokes runs them for you, the only thing you have to do is to specify the database mode, and then, before your application loads Propel runs its "tasks" and that's all.
Tlalokes simplifies the way to define the relation between tables and mapping objects, instead of using and XML schema it uses annotated classes named Definition-Objects.

The database mode provides you the following options:
build-conf. Generates the Propel's configuration files.
build-tables. Generates the tables at the database based in Definition-Objects. Previously you must setup the DSN section in the configuration file.
build-all. Generates the database tables, and the ORM objects.
build-from-db. Generates the ORM objects from existent database.
build-om. Generates only the ORM objects from Definition-Objects.
alter-tables. Actually in development, regenerates and execute alteration SQL files in order to modify your database tables according to your Definition-Objects. Right now just works with PostgreSQL.
production. This mode skips any Propel task.
Tlalokes uses the Propel as ORM in order to work with databases in the same way you work with other classes and objects in PHP. Propel uses an XML schema to define the object-database relation. But it requires write this XML and then run a Phing command provided at the Propel generator in order to build objects, database tables, etc.
Tlalokes provides a simplified way to use Propel, instead of running Phing "tasks" manually throw the CLI Tlalokes runs them for you, the only thing you have to do is to specify the database mode, and then, before your application loads Propel runs its "tasks" and that's all.
Tlalokes simplifies the way to define the relation between tables and mapping objects, instead of using and XML schema it uses annotated classes named Definition-Objects.

The database mode provides you the following options:
build-conf. Generates the Propel's configuration files.
build-tables. Generates the tables at the database based in Definition-Objects. Previously you must setup the DSN section in the configuration file.
build-all. Generates the database tables, and the ORM objects.
build-from-db. Generates the ORM objects from existent database.
build-om. Generates only the ORM objects from Definition-Objects.
alter-tables. Actually in development, regenerates and execute alteration SQL files in order to modify your database tables according to your Definition-Objects. Right now just works with PostgreSQL.
production. This mode skips any Propel task.
at
22:57
| No comments
Fri, 19. September 2008
The configuration file.
Tlalokes was written in order to provide some features that I consider another frameworks in PHP are not providing, or not in a way I liked. One of the most important files in Tlalokes is the configuration file named config.php.

I will describe every section of this file in the following posts, but right now I want to focus this post at the section named mode.

The modes section provides three configuration options: language, templates and database.
The language mode allows you to choose the format of your locale files, right now this options are: array and XML, I suggest to use array instead of XML, because arrays are PHP native and do not require any parsing, in fact is possible that the XML will be removed as a supported option in order to save time.
The templates mode provides you of two options: debug and production. Debug mode renders your pages every time they are requested, and production mode looks for actually rendered pages in order to save time.
The database mode provides your of the following options: build-conf, build-tables, build-all, build-from-db, build-om, alter-tables and production. This is a more extensive topic, so I'm going to describe this options at the next post.

I will describe every section of this file in the following posts, but right now I want to focus this post at the section named mode.

The modes section provides three configuration options: language, templates and database.
The language mode allows you to choose the format of your locale files, right now this options are: array and XML, I suggest to use array instead of XML, because arrays are PHP native and do not require any parsing, in fact is possible that the XML will be removed as a supported option in order to save time.
The templates mode provides you of two options: debug and production. Debug mode renders your pages every time they are requested, and production mode looks for actually rendered pages in order to save time.
The database mode provides your of the following options: build-conf, build-tables, build-all, build-from-db, build-om, alter-tables and production. This is a more extensive topic, so I'm going to describe this options at the next post.
at
19:35
| No comments
Tue, 16. September 2008
Why another framework?
Write a new framework maybe sounds like reinventing the wheel. But, imagine a world with nobody reinventing the wheel, the actual airplanes will be landing with wood wheels?, what about the different kinds of tires? for snow, for hot pavement, for raining days, etc. so, thank you "wheel reinventors"!.
Yes, writing a new framework is reinventing the wheel, and reinventing the wheel is good. For sure you will not be using a tire for snow in the hot pavement, and the same logic apply to software tools and specifically to frameworks. At the place I work, our project manager have a simple solution, "use Drupal". And I don't think Drupal is a bad tool, but for some projects is like using an airplane tire for your car, and in other projects is like using a bicycle tire for a hummer. Actually he accept to use Tlalokes framework for an internal application instead of Drupal, and Tlalokes is doing it's work nice.
I will not expend time writing about others frameworks, the developers of that frameworks simply do what think is good, that's it, and now we have more tires, some of it are good, others not, but you are the one who use it, so make a good choose and enjoy.
Tlalokes is being developed in an effort to provide the following features:
- Time saving.
- Easy to use.
- Easy to code.
- Fast run time.
- Secure.
- Flexible.
- Extensible.
In the future posts I will define each one of this features an link them.
Yes, writing a new framework is reinventing the wheel, and reinventing the wheel is good. For sure you will not be using a tire for snow in the hot pavement, and the same logic apply to software tools and specifically to frameworks. At the place I work, our project manager have a simple solution, "use Drupal". And I don't think Drupal is a bad tool, but for some projects is like using an airplane tire for your car, and in other projects is like using a bicycle tire for a hummer. Actually he accept to use Tlalokes framework for an internal application instead of Drupal, and Tlalokes is doing it's work nice.
I will not expend time writing about others frameworks, the developers of that frameworks simply do what think is good, that's it, and now we have more tires, some of it are good, others not, but you are the one who use it, so make a good choose and enjoy.
Tlalokes is being developed in an effort to provide the following features:
- Time saving.
- Easy to use.
- Easy to code.
- Fast run time.
- Secure.
- Flexible.
- Extensible.
In the future posts I will define each one of this features an link them.
at
13:23
| No comments
Mon, 15. September 2008
Santa Lucía Internacional Festival at Monterrey, Mexico
In September 20 to 26, 2008 Monterrey will make a good effort to provide cultural events in a festival named "Festival Internacional de Santa Lucía". The program looks nice, and the expectations are high. So if you are around Monterrey at that dates, don't doubt and unite to the festival.

The link to the festival site is here.
The program in PDF format is here.
The contact's web form is here.

The link to the festival site is here.
The program in PDF format is here.
The contact's web form is here.
at
12:59
| 2 Comments
Yngwie Malmsteen's Perpetual Flame
Yngwie Malmsteen will release a new album named "Perpetual Flame" in October 2008. All his fans (including me) will be waiting for it.
According to the Yngwie Malmsteen's site the new album "Perpetual Flame" will be released in October 13 for Europe and 14 for Canada and U.S.A. containing the following track list:
01. Death Dealer
02. Damnation Game
03. Live to Fight (Another Day)
04. Red Devil
05. Four Horsemen (Of the Apocalypse)
06. Priest of the Unholy
07. Be Careful What You Wish For
08. Caprici Di Diablo
09. Lament
10. Magic City
11. Eleventh Hour
12. Heavy Heart
The cover of the disc will look like this:
According to the Yngwie Malmsteen's site the new album "Perpetual Flame" will be released in October 13 for Europe and 14 for Canada and U.S.A. containing the following track list:
01. Death Dealer
02. Damnation Game
03. Live to Fight (Another Day)
04. Red Devil
05. Four Horsemen (Of the Apocalypse)
06. Priest of the Unholy
07. Be Careful What You Wish For
08. Caprici Di Diablo
09. Lament
10. Magic City
11. Eleventh Hour
12. Heavy Heart
The cover of the disc will look like this:
at
12:27
| No comments
Sun, 14. September 2008
The AspectO project
Some years ago (2005), I was reading about Aspect Oriented Programming (AOP), but I am very slow to understand how "new" programming paradigms work, so I began a personal project to understand how to implement AOP.
The first task was to choose a programming language, Java was a option, especially because AspectJ is the most mature project about AOP, but I don't like Java very much, so I choose PHP, because its an easy to learn and teach language and one of the most popular in the internet, among other good and more reasonable reasons I will talk about in another post, with the language chosen, now I need to take a look at the AOP projects in PHP.
Looking for AOP projects for PHP, I found some of them in a very immature state (at that moment). One of the most interesting parts of the AOP is the weaver, so I was looking for one that doesn't need a binary extension to work, thinking in all the users that cannot install extensions at their web hoster's servers. The projects that I found for AOP in PHP with no binary extension for the weaver were what I expected, a giant failure. So I began (in my free time) what I named the AspectO project.

In general, AspectO is a free (LGPL) set of classes written in PHP5 to bring support to AOP. This classes provides a very simple and easy to learn syntax, doesn't requires binary extensions additional to a common PHP5 installation, obtains the content of classes using PCRE and the PHP5's Object Oriented Reflection, and finally weaves your Aspects preprocessing source code.
It was September 9th, 2006 when AspectO was released as a 0.1a version, but a more stable version (0.2b) was released in February 27, 2007.
How it works.
AspectO uses three basic directories, one for your Aspects files, another for your classes and a final one for the weaved classes. The way it works is setting the paths of your directories as properties of the AspectOConf object, the AspectO object receives the AspecOConf object and calls the AspectOParser and the AspectoClassParser to compare your Aspects versus your Classes, checks if they are compatible and finally return them as fixed objects to the AspectOWeaver, it weaves both objects (classes and aspects) and returns weaved classes in the weaved classes directory.

The syntax of an Aspect in AspectO is very simple and consists of joinpoints, pointcuts and advices. AspectO provides three types of joinpoints: execution, call and construction; and three types of advices: after, before and around. Let's see a example.
The Aspect
The source class
Executing AspectO
The results using the weaved class
Inter-types and wildcard
AspectO also provides inter-type declarations and the wildcard character asterisk *. The inter-type declarations allows you to declare new properties, methods and inheritance (implementation of interfaces and extends of parent classes). The wildcard character * can be applied over existent classes and methods, but not to new ones.
Inter-type declarations
AspectO's future
AspectO will be reviewed in order to release a more stable and useful version. The project has provided a lot of ideas for the development of a new framework named Tlalokes and possibly it will be used to bring AOP to this framework.
If you are interested in testing AspectO you can download it from its web site. If your need more information or want to contribute, please feel yourself free to send me a message using this web form.
The first task was to choose a programming language, Java was a option, especially because AspectJ is the most mature project about AOP, but I don't like Java very much, so I choose PHP, because its an easy to learn and teach language and one of the most popular in the internet, among other good and more reasonable reasons I will talk about in another post, with the language chosen, now I need to take a look at the AOP projects in PHP.
Looking for AOP projects for PHP, I found some of them in a very immature state (at that moment). One of the most interesting parts of the AOP is the weaver, so I was looking for one that doesn't need a binary extension to work, thinking in all the users that cannot install extensions at their web hoster's servers. The projects that I found for AOP in PHP with no binary extension for the weaver were what I expected, a giant failure. So I began (in my free time) what I named the AspectO project.

In general, AspectO is a free (LGPL) set of classes written in PHP5 to bring support to AOP. This classes provides a very simple and easy to learn syntax, doesn't requires binary extensions additional to a common PHP5 installation, obtains the content of classes using PCRE and the PHP5's Object Oriented Reflection, and finally weaves your Aspects preprocessing source code.
It was September 9th, 2006 when AspectO was released as a 0.1a version, but a more stable version (0.2b) was released in February 27, 2007.
How it works.
AspectO uses three basic directories, one for your Aspects files, another for your classes and a final one for the weaved classes. The way it works is setting the paths of your directories as properties of the AspectOConf object, the AspectO object receives the AspecOConf object and calls the AspectOParser and the AspectoClassParser to compare your Aspects versus your Classes, checks if they are compatible and finally return them as fixed objects to the AspectOWeaver, it weaves both objects (classes and aspects) and returns weaved classes in the weaved classes directory.

The syntax of an Aspect in AspectO is very simple and consists of joinpoints, pointcuts and advices. AspectO provides three types of joinpoints: execution, call and construction; and three types of advices: after, before and around. Let's see a example.
The Aspect
aspect AspectExample {
pointcut PointcutOneExe : execution( * ClassOne methodOne () );
pointcut PointcutTwoCall : call( ClassOne methodTwo () );
before : PointcutOneExe {
echo 'This is before.';
}
after : PointcutTwoCall {
echo 'This is after.';
}
around : PointcutOneExe {
if ( $foo ) {
echo 'Here';
proceed();
echo 'around.';
}
echo "It has been 'arounded'.";
}
}
pointcut PointcutOneExe : execution( * ClassOne methodOne () );
pointcut PointcutTwoCall : call( ClassOne methodTwo () );
before : PointcutOneExe {
echo 'This is before.';
}
after : PointcutTwoCall {
echo 'This is after.';
}
around : PointcutOneExe {
if ( $foo ) {
echo 'Here';
proceed();
echo 'around.';
}
echo "It has been 'arounded'.";
}
}
The source class
class ClassOne {
public static function methodOne () {
echo 'I am at the method one.';
}
public function methodTwo () {
echo 'I am at the method two.';
}
}
public static function methodOne () {
echo 'I am at the method one.';
}
public function methodTwo () {
echo 'I am at the method two.';
}
}
Executing AspectO
// the first argument (boolean) indicates if AspectO has to weave or not
$aConf = new AspectOConfig( true, 'aspects/', 'classes/', 'weaved_classes/' );
$aspecto = new AspectO( $aConf );
$aConf = new AspectOConfig( true, 'aspects/', 'classes/', 'weaved_classes/' );
$aspecto = new AspectO( $aConf );
The results using the weaved class
ClassOne::methodOne();
// returns: This is before. Here I am method one around. It has been 'arounded'.
$one = new ClassOne();
$one->MethodTwo();
// returns: I am at the method two. This is after.
// returns: This is before. Here I am method one around. It has been 'arounded'.
$one = new ClassOne();
$one->MethodTwo();
// returns: I am at the method two. This is after.
Inter-types and wildcard
AspectO also provides inter-type declarations and the wildcard character asterisk *. The inter-type declarations allows you to declare new properties, methods and inheritance (implementation of interfaces and extends of parent classes). The wildcard character * can be applied over existent classes and methods, but not to new ones.
Inter-type declarations
// The following declaration will add a new property to the Actions (or any other coincidence using the wildcard) class named $myNewVar with public visibility
public A*ions $myNewVar = 'something';
// The following declaration will add a new method to the Actions class named newMethod with static access, private visibility and the arguments $newVar and $newVarTwo
private static Actions newMethod ( $newVar, $newVarTwo ) {
echo 'someAction in new method';
}
// The following declaration extends the Account class into the Actions class
declare parent : Actions extends Account;
// The following declaration implements the InterfaseTest interfase into the Actions class
declare parent : Actions implements InterfaceTest;
public A*ions $myNewVar = 'something';
// The following declaration will add a new method to the Actions class named newMethod with static access, private visibility and the arguments $newVar and $newVarTwo
private static Actions newMethod ( $newVar, $newVarTwo ) {
echo 'someAction in new method';
}
// The following declaration extends the Account class into the Actions class
declare parent : Actions extends Account;
// The following declaration implements the InterfaseTest interfase into the Actions class
declare parent : Actions implements InterfaceTest;
AspectO's future
AspectO will be reviewed in order to release a more stable and useful version. The project has provided a lot of ideas for the development of a new framework named Tlalokes and possibly it will be used to bring AOP to this framework.
If you are interested in testing AspectO you can download it from its web site. If your need more information or want to contribute, please feel yourself free to send me a message using this web form.
at
23:21
| 2 Comments
(Page 1 of 1, totaling 15 entries)


Programmers have a life


