Noticias Weblogs Foros Wiki Código
Sponsors:

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Anunciarse aquí

PlanetaCódigo en inglés

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

Squeak en Mundo Linux de Noviembre

Octubre 31st, 2005 - [Enlace local]



En el número 84 (Noviembre) de la revista Mundo Linux, viene una nota de Squeak además de un CD-ROM con Squeak.




Es una adaptación del capítulo 1 del libro Squeak - Un Mundo para Aprender publicado recientemente.




Pondré el PDF para bajar en cuanto tenga el permiso para hacerlo.

» Leer más, comentarios, etc...

Solucionado… en parte

Octubre 30th, 2005 - [Enlace local]

No puedo decir que sea culpa del proveedor de internet… no, no lo es por no haber hecho copias de seguridad…. He perdido todos los comentarios. ¡Menos mal! Podría haber sido peor…

» Leer más, comentarios, etc...

Capelblog está de reparaciones

Octubre 30th, 2005 - [Enlace local]

Hola,
Parece ser que algo va mal en mi sitio. Por lo que se puede ver, parece ser que se han perdido dos tablas de la base de datos MySql. Estoy trabajando para repar este sitio y ponerlo en orden lo antes posible.
Disculpad las molestias

» Leer más, comentarios, etc...

El lenguaje Lua

Octubre 28th, 2005 - [Enlace local]

Por casualidad he llegado de nuevo a la página del lenguaje de script Lua. En su página, al ver las noticias he visto que se había publicado un libro relativamente «diferente»: Game Development with Lua, del cual también se puede ver su primer capítulo. De siempre me han fascinado este tipo de lenguajes de programación de desarrollo rápido de aplicaciones, y me encanta ver ejemplos como estos, en los que un lenguaje de script se utiliza embebido para ayudar al desarrollo de un programa tan complejo como un juego. Del primer capítulo:


In our company, we recently shipped our 13th game using Lua. Our team is
small, but it has the standard mix of programmers, artists, and designers.
When we get ready to start a new project, we first identify the technology
needs of the project (what are the new things that we need to implement that
we don’t already have?) and work to design the functionality we need. The
programmers can, armed with this technical design, hunker down and focus
on the issues they know best. Simultaneously, the designers and artists can lay
out the flow of the interface and the core functionality of the game—and they
can get started, right away. Often the artists (both 2D and 3D) spend some
time capturing the needed look and feel of the game. While this process is
going on, the three designers, who are all fluent in Lua as well, dive in and
begin constructing the foundation of the game, the game data, and the core
game systems. They don’t even have to wait for the programmers; if there is
some functionality they need, they can often “sub it in” in Lua and press on.
The end result is that we can develop games much more rapidly because we’ve
got the entire team working full force from the get-go.

One project in particular stands out: while working on an election simulator
for the 2004 presidential election, we were able to prototype nearly 100
percent of the game in Lua to test our approaches to AI and game flow, and
then later go back and re-engineer the mission-critical components into C++.
The ability to prototype allowed a single developer to work through the lion’s
share of the design and development process, which is a level of efficiency rare
in this industry.

Magnífico. Desarrollan casi entero el juego con Lua y luego reescriben las partes críticas en tiempo/eficiencia en C++. Este tipo de ideas también me gusta porque compite contra la fiebre que parece haberse instaurado en el desarrollo de software según la cual hay que sacar los programas cuanto antes y como sea. Con este paso intermedio, aparte de que tu programa tendrá menos errores (doble codificación), el desarrollo final será más rápido, porque la mayoría del programa que no tiene que ser crítico en el tiempo se ha desarrollado en un lenguaje mucho más rápido de escribir (por eso se llaman RAD, Rapid Application Development).

» Leer más, comentarios, etc...

¿Qué pasa con la Tira Cómica de ecol?

Octubre 28th, 2005 - [Enlace local]

Todo buen programador geek que se precie ve la tira cómica de escomposlinux.org cada semana sin falta… pero hace más de un mes que ecol no publica ninguna tira nueva. ¿Qué ha ocurrido? ¿Alguien lo sabe?

Espero que el apagón sea sólo temporal.

link

» Leer más, comentarios, etc...

Stubs DOS y Windows

Octubre 27th, 2005 - [Enlace local]

Hace algunos años comencé un proyecto para uso personal, que permitiera generar ejecutables duales con facilidad. Lo llamé en un arrebato de imaginación: DUAL. Casualmente hoy he encontrado un CD que contenía esos fuentes…

Un ejecutable dual, es aquel corre nativamente en DOS si se ejecuta bajo DOS, o en Win32 si se ejecuta bajo algún sistema operativo de esta familia.

El truco consisten en incluir en el mismo EXE, las dos versiones al mismo tiempo: la versión DOS en la parte MZ de la cabecera, y la versión Windows en la parte PE.

Si el sistema operativo es DOS, solamente cargará el ejecutable MZ, mientras que si es Win32 cargará el el PE.

Fue un recurso bastante utilizado hace algunos años, y debo decir que siempre me llamó la atención.

Seguro que os suena el clásico mensaje de "This program requires Microsoft Windows", o "This program cannot be run in DOS mode". No es más que el stub DOS que incluyen las aplicaciones Windows. Éste es ejecutado cuando lanzamos una aplicación Windows bajo DOS puro.

Comencé desarrollando los stubs genéricos para DOS, y para Windows, que me permitieran ir comprobando los progresos, y posteriormente distribuirlos junto al programa. Cuando los tenía terminados, comencé con el programa en si, que no llegó a avanzar demasiado, pues descubrí STUBEXE (Executable optimizer), que permitía realizar el mismo proceso que yo quería.

Me divirtió hacer que el stub Windows, sacara el mensaje de "This program cannot be run in Windows mode", e ir luchando para reducir su tamaño hasta llegar a los 224 bytes (736 en el ejecutable). El truco para conseguir esta reducción, era más las opciones de enlazado (combinar secciones del ejecutable, reducir alineamiento, …) que el propio código en si.

El stub DOS, fue más sencillo de programar, dejándolo en uno de los primeros intentos ya en 92 bytes. Un tamaño inferior en varias veces al que incluyen la mayoría de aplicaciones Windows.

Puedes descargar los fuentes (MASM 6.x y MASM 7.x), y los binarios (2 Kb. en formato ZIP).

» Leer más, comentarios, etc...

Stubs DOS y Windows

Octubre 27th, 2005 - [Enlace local]

Hace algunos años comencé un proyecto para uso personal, que permitiera generar ejecutables duales con facilidad. Lo llamé en un arrebato de imaginación: DUAL. Casualmente hoy he encontrado un CD que contenía esos fuentes…

Un ejecutable dual, es aquel corre nativamente en DOS si se ejecuta bajo DOS, o en Win32 si se ejecuta bajo algún sistema operativo de esta familia.

El truco consisten en incluir en el mismo EXE, las dos versiones al mismo tiempo: la versión DOS en la parte MZ de la cabecera, y la versión Windows en la parte PE.

Si el sistema operativo es DOS, solamente cargará el ejecutable MZ, mientras que si es Win32 cargará el el PE.

Fue un recurso bastante utilizado hace algunos años, y debo decir que siempre me llamó la atención.

Seguro que os suena el clásico mensaje de "This program requires Microsoft Windows", o "This program cannot be run in DOS mode". No es más que el stub DOS que incluyen las aplicaciones Windows. Éste es ejecutado cuando lanzamos una aplicación Windows bajo DOS puro.

Comencé desarrollando los stubs genéricos para DOS, y para Windows, que me permitieran ir comprobando los progresos, y posteriormente distribuirlos junto al programa. Cuando los tenía terminados, comencé con el programa en si, que no llegó a avanzar demasiado, pues descubrí STUBEXE (Executable optimizer), que permitía realizar el mismo proceso que yo quería.

Me divirtió hacer que el stub Windows, sacara el mensaje de "This program cannot be run in Windows mode", e ir luchando para reducir su tamaño hasta llegar a los 224 bytes (736 en el ejecutable). El truco para conseguir esta reducción, era más las opciones de enlazado (combinar secciones del ejecutable, reducir alineamiento, …) que el propio código en si.

El stub DOS, fue más sencillo de programar, dejándolo en uno de los primeros intentos ya en 92 bytes. Un tamaño inferior en varias veces al que incluyen la mayoría de aplicaciones Windows.

Puedes descargar los fuentes (MASM 6.x y MASM 7.x), y los binarios (2 Kb. en formato ZIP).

» Leer más, comentarios, etc...

código escrito

Aprenda C++ como si estuviera en primero

Octubre 26th, 2005 - [Enlace local]

Como ya he dicho alguna vez, el lenguaje que estamos aprendiendo este año en la carrera es C++. Recuerdo haber leído en algún sito que es muy recomendable aprender C antes de C++, pero teniendo en cuenta que el profesor...

» Leer más, comentarios, etc...

hackers y pintores

Octubre 26th, 2005 - [Enlace local]

hackear y pintar tienen mucho en común las grandes compañías ganan al fracasar menos que las otras compañías grandes una forma de escribir software genial es arrancar con tu propia iniciativa el trabajo de día hace referencia al fenómeno presente…

» Leer más, comentarios, etc...

La luna ilumina por igual a culpables e inocentes

Soporte de expresiones regulares en Java

Octubre 26th, 2005 - [Enlace local]

Saludos.

Existen muy buenas herramientas libres para trabajar con expresiones regulares en Java, como (http://lucene.apache.org/). Sin embargo, a partir de la versión 1.4, el kit estándar de Java incluye su propio soporte para expresiones regulares.
En el paquete 'java.util.regexp' encontramos las clases Matcher y Pattern. La primera clase permite aplicar una expresión sobre una cadena de texto. La segunda clase representa una expresión regular compilada para ganar en eficiencia.

La manera más sencilla y rápida de comprobar si una cadena satisface una expresión regular es mediante el método estático 'boolean Pattern.matches(cadena, expresión regular)'. Es posible conseguir el mismo efecto invocando el método matches sobre un objeto String. A continuación se muestra un sencillo ejemplo.


import java.util.regex.*;

public class EjemploRegExp {

// Números de 2 cifras que empiecen por 1 o 2
static String re = "\\b[1][0-9]|[2][0-9]";
static String cadena1 = "10";
static String cadena2 = "110";

public static void main(String[] args) {
if (Pattern.matches(cadena1, re))
System.out.println(cadena1+" cumple: "+re);
else
System.out.println(cadena1+" no cumple: "+re);
if (cadena2.matches(re))
System.out.println(cadena2+" cumple: "+re);
else
System.out.println(cadena2+" no cumple: "+re);
}
}

Además, la clase String también nos ofrece la manera de dividir un String mediante una expresión regular con el método:

String[] split(String regex)
String[] split(String regex, int limit)

En el próximo mensaje veremos una aplicación práctica extendiendo la herramienta JUnit (www.junit.org) para que soporte expresiones regulares.

» Leer más, comentarios, etc...

La luna ilumina por igual a culpables e inocentes

Soporte de expresiones regulares en Java

Octubre 26th, 2005 - [Enlace local]

Saludos.

Existen muy buenas herramientas libres para trabajar con expresiones regulares en Java, como (http://lucene.apache.org/). Sin embargo, a partir de la versión 1.4, el kit estándar de Java incluye su propio soporte para expresiones regulares.
En el paquete 'java.util.regexp' encontramos las clases Matcher y Pattern. La primera clase permite aplicar una expresión sobre una cadena de texto. La segunda clase representa una expresión regular compilada para ganar en eficiencia.

La manera más sencilla y rápida de comprobar si una cadena satisface una expresión regular es mediante el método estático 'boolean Pattern.matches(cadena, expresión regular)'. Es posible conseguir el mismo efecto invocando el método matches sobre un objeto String. A continuación se muestra un sencillo ejemplo.


import java.util.regex.*;

public class EjemploRegExp {

// Números de 2 cifras que empiecen por 1 o 2
static String re = "\\b[1][0-9]|[2][0-9]";
static String cadena1 = "10";
static String cadena2 = "110";

public static void main(String[] args) {
if (Pattern.matches(cadena1, re))
System.out.println(cadena1+" cumple: "+re);
else
System.out.println(cadena1+" no cumple: "+re);
if (cadena2.matches(re))
System.out.println(cadena2+" cumple: "+re);
else
System.out.println(cadena2+" no cumple: "+re);
}
}

Además, la clase String también nos ofrece la manera de dividir un String mediante una expresión regular con el método:

String[] split(String regex)
String[] split(String regex, int limit)

En el próximo mensaje veremos una aplicación práctica extendiendo la herramienta JUnit (www.junit.org) para que soporte expresiones regulares.

» Leer más, comentarios, etc...

Qué pasa con MPO…

Octubre 26th, 2005 - [Enlace local]

Hace mucho que no hablo de MPO. MPO para quién no lo sepa es
una aplicación que llevo un tiempo desarrollando. Se encuentra
segunda en el ránking de descarga de javaHispano.net.

Pues bien, hace mucho que no hablo de ella, pero eso no significa que no
siga desarrollándola. Os quiero enseñar una demo para que veais lo mucho
que ha cambiado. MPO ahora soporta herencia, relaciones, colecciones,
componenetes (a la Hibernate), y estoy trabajando para que genere código para muchos
frameworks. La demo es muy, muy sencilla y hay cosas por depurar.
Es simplemente para que os hagais
una idea y me digais qué os parece.
ver demostración.

Un saludo.

» Leer más, comentarios, etc...

Gimenoblog

Qué pasa con MPO…

Octubre 26th, 2005 - [Enlace local]

Hace mucho que no hablo de MPO. MPO para quién no lo sepa es una aplicación que llevo un tiempo desarrollando. Se encuentra segunda en el ránking de descarga de javaHispano.net.

Pues bien, hace mucho que no hablo de ella, pero eso no significa que no siga desarrollándola. Os quiero enseñar una demo para que veais lo mucho que ha cambiado. MPO ahora soporta herencia, relaciones, colecciones, componenetes (a la Hibernate), y estoy trabajando para que genere código para muchos frameworks. La demo es muy, muy sencilla y hay cosas por depurar. Es simplemente para que os hagais una idea y me digais qué os parece. ver demostración.

Un saludo.

» Leer más, comentarios, etc...

MySQL 5 está aquí!

Octubre 25th, 2005 - [Enlace local]

Así reza en la web de MySQL. En el trabajo ya usábamos MySQL 5 (RC) aunque para servidores no importantes, y la verdad es que no dieron ningún tipo de problemas, sin ser la versión estable.

Entre sus principales novedades:
- Procedimientos almacenados
- Triggers
- Vistas
- Diccionario de Datos

link

» Leer más, comentarios, etc...

más que código - articulo - programacion

Lecturas de programador (28/10/05)

Octubre 25th, 2005 - [Enlace local]

Resumen de lecturas interesantes de la semana:

» Leer más, comentarios, etc...

Lecturas de programador (28/10/05)

Octubre 25th, 2005 - [Enlace local]

Resumen de lecturas interesantes de la semana:

» Leer más, comentarios, etc...

shareware sin protección

Octubre 24th, 2005 - [Enlace local]

Hace unos dias en el foro de Planeta Código planteaba la pregunta de si es mejor hacer versiones de evaluación limitadas en prestaciones o versiones gratuitas. El hilo del mensaje está aquí. En el impagable foro de the business of…

» Leer más, comentarios, etc...

Testing de XPlorer

Octubre 24th, 2005 - [Enlace local]

Llevo casi un año y medio trabajando de forma más o menos constante en el desarrollo de XPlorer.

XPlorer es un sustituto gratuito para el Explorador de Windows con soporte multipestaña, y algunas funcionalidades avanzadas.

En este tiempo he podido implementar nuevas funcionalidades, mejorar la accesibilidad de las opciones básicas, mejorar el rendimiento general de la aplicación, y detectar multitud de errores y problemas de estabilidad.

A pesar de que el desarrollo se ha alargado más de lo deseable, XPlorer está apunto de entrar en fase beta, por lo que os agradecería muchísimo vuestra ayuda. Lo ideal sería comenzar el ciclo beta con la mínima cantidad de problemas y errores, así que agradecería vuestros reportes al respecto.

Cuanto más detallados sean estos informes, mejor que mejor. Un formato conveniente sería:

Versión de XPlorer

0.40.113

Descripción del problema

Se cuelga al acceder a determinadas carpetas FAT16.

Hardware y software

AMD Ahtlon XP 2400+ con 1024 Mb de RAM corriendo Windows XP SP2 con permisos de administrador.

Discos duros C: Seagate UDMA-133 de 80 Gb, y D: Seagate UDMA-133 de 60 Gb.

[Más información en caso de aplicarse al problema]

Con vuestros comentarios, espero ser capaz de reproducir el problema, para corregirlo lo antes posible.

- Página oficial: http://guti.webcindario.com/static.php?page=XPlorer

- Descarga (ZIP): http://guti.webcindario.com/images/XPlorer.zip

- Descarga (Instalador EXE): http://guti.webcindario.com/images/Setup.exe

Las sugerencias son también bienvenidas, pero de momento solamente serán agregadas en el roadmap.

Muchas gracias.

» Leer más, comentarios, etc...

Testing de XPlorer

Octubre 24th, 2005 - [Enlace local]

Llevo casi un año y medio trabajando de forma más o menos constante en el desarrollo de XPlorer.

XPlorer es un sustituto gratuito para el Explorador de Windows con soporte multipestaña, y algunas funcionalidades avanzadas.

En este tiempo he podido implementar nuevas funcionalidades, mejorar la accesibilidad de las opciones básicas, mejorar el rendimiento general de la aplicación, y detectar multitud de errores y problemas de estabilidad.

A pesar de que el desarrollo se ha alargado más de lo deseable, XPlorer está apunto de entrar en fase beta, por lo que os agradecería muchísimo vuestra ayuda. Lo ideal sería comenzar el ciclo beta con la mínima cantidad de problemas y errores, así que agradecería vuestros reportes al respecto.

Cuanto más detallados sean estos informes, mejor que mejor. Un formato conveniente sería:

Versión de XPlorer

0.40.113

Descripción del problema

Se cuelga al acceder a determinadas carpetas FAT16.

Hardware y software

AMD Ahtlon XP 2400+ con 1024 Mb de RAM corriendo Windows XP SP2 con permisos de administrador.

Discos duros C: Seagate UDMA-133 de 80 Gb, y D: Seagate UDMA-133 de 60 Gb.

[Más información en caso de aplicarse al problema]

Con vuestros comentarios, espero ser capaz de reproducir el problema, para corregirlo lo antes posible.

- Página oficial: http://guti.webcindario.com/static.php?page=XPlorer

- Descarga (ZIP): http://guti.webcindario.com/images/XPlorer.zip

- Descarga (Instalador EXE): http://guti.webcindario.com/images/Setup.exe

Las sugerencias son también bienvenidas, pero de momento solamente serán agregadas en el roadmap.

Muchas gracias.

» Leer más, comentarios, etc...

Yet Another Programming Weblog

Visita guiada al nuevo intérprete de comandos de Microsoft

Octubre 24th, 2005 - [Enlace local]

En Ars Technica han publicado un análisis bastante profundo del nuevo interprete de comandos de Microsoft, Monad. Desde luego es una de las cosas que uno echa de menos cuando se sienta delante de uno de sus sistema, algo que les hacía falta hace tiempo. Lo cierto es que tiene muy buena pinta...

Se puede leer más en diversos sitios (Slashdot:" A Guided Tour of the Microsoft Command Shell", OSNews :"A Guided Tour of the Microsoft Command Shell", El valle del Viento Helado: "MSH: El nuevo Shell de Microsoft, un tour guiado" (Actualización:) y en Barrapunto: "Visita guiada al nuevo intérprete de comandos de Microsoft")

La misma entrada en BP

» Leer más, comentarios, etc...

Thefull

Tree Store

Octubre 24th, 2005 - [Enlace local]

Implementacion de Tree Store en POO....

» Leer más, comentarios, etc...

Problemas con el Planeta

Octubre 24th, 2005 - [Enlace local]

Quizá hayáis notado que Planeta Código lleva unas horas sin actualizarse.

El problema lo tengo con unos nuevos límites al número de ficheros abiertos que mi proveedor de hosting ha puesto en las últimas horas. Esto hace que el software planetplanet haya dejado de funcionar.

La solución puede ser algún parche al software o buscar algún otro software alternativo que no se encuentre con este problema. O cambiar el proveedor de hosting, aunque por coste no creo que vaya a coger esta última solución.

Intentaré solucionarlo lo antes posible.

» Leer más, comentarios, etc...

Manipulando imágenes (2)

Octubre 23rd, 2005 - [Enlace local]

No me gusta quedarme con una primera impresión, por eso estoy dedicando unos días a analizar con detalle las posibilidades de usar APIs/componentes/plug-ins externos a REALBasic para manipular imágenes bitmap.

Ampliando lo comentado en mi anterior post, creo que otra opción a valorar es la posibilidad de usar un DLL o un objeto COM y llamarlos desde el código REALbasic.

Esto de entrada ofrece dos ventajas: Evita inventos como las llamadas al Shell (comentado en el anterior post) y permite el uso de APIs como GD Image Library o GraphicsMagick más evolucionadas y potentes que algunos componentes, de terceros, disponibles para REALbasic.

En principio no tiene que existir ningún problema, ya que REALbasic dispone de la función Declare Statement para realizar llamadas a funciones de un DLL. También tiene una clase para entenderse con objetos COM, o sea que ahora de lo que se trata es de experimentar con todas estas opciones y analizar sus pros y contras en función de les necesidades concretas de la aplicación que estoy desarrollando.

Para curiosos:

-GD Image Library es la API de facto desde hace tiempo para crear/manipular imágenes en Perl, PHP, C …

-GraphicsMagick es una derivación de ImageMagick con un enfoque a más lenguajes de programación.

» Leer más, comentarios, etc...

vnsjava

Como hacer un JDBC Datasources con Database Connec…

Octubre 23rd, 2005 - [Enlace local]

Durante la creación de mi projecto campusip, agregé esta caracteristica al projecto, para mejorar el rendimiento en cuanto a el manejo de session y transacciones con la base de datos (cualquiera que sea esta).

Un pool de conecciones se encarga de crear y manegar las conecciones a un a base de datos determinada. la ventaja es que se recicla y se reusa las conecciones a las DB, siendo esto más eficiente que crear una nueva cada vez. El componente utilizado aqui es Jakarta-Commons DBCP el cual hace lo que acabamos de describir.

Tomcat 5.5.X ha hecho cambio de como se hace una configuración JNDI para una conección JDBC. Ya no se cambia el archivo server.xml, todos los cambios se hacen en el directorio de la webapp y se debe tomar en cuenta el nombre de la webapp. (en nuestro caso campusip)

  1. Modificar web.xml, context.xml y hibernate.cfg.xml segun ejemplos dados debajo.
  2. Instalar los driver de JDBC: se debe copiar el driver JDBC de la base de datos usada (En mi caso postgresql ) a esta dirección $CATALINA_HOME/common/lib, donde CATALINA_HOME es la dirección de instalacion de Tomcat. (Es un archivo *.jar )
  3. Instalar los driver de DBCP connection pool, entonces se debe copiar a la direccion $CATALINA_HOME/common/lib/naming-factory-dbcp.jar.
  4. Copiar el archivo webapps/campusip/META-INF/context.xml con el nombre cambiado para %Tomcat 5.5%\conf\Catalina\localhost/campusip.xml - el archivo no sufre cambios.
  5. Cualquier otra ver documentación.
Estos procedimiento (NI pienses que lo hago manual :-D) son de manera automátizada atravez de una herramienta de la cual ya he hablado llamada Ant, utilizando el build.xml del projecto.

Y ya solo es cuestión de probar la aplicación web.

context.xml :


<Context path="/campusip" docBase="campusip"
debug="5" reloadable="true" crossContext="true">

<Resource name="jdbc/campusipDB" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/jcolegioip"
username="postgres" password="postgres" maxActive="20" maxIdle="10"
maxWait="-1"/>

</Context>


----


web.xml (solo la parte de resource ):



<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">



...

<resource-ref>
<description>Connection to my DB.</description>
<res-ref-name>jdbc/campusipDB</res-ref-name>
<res-type>javax.sql.DataSource </res-type>
<res-auth>Container</res-auth>



</resource-ref>

...

</web-app>

------

hibernate.cfg.xml (solo la parte de la DB):


<session-factory>
<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

<property name="connection.datasource">java:/comp/env/jdbc/campusipDB</property>

...

</session-factory>
</hibernate-configuration>
----

Nota : Tomcat viene con un sistema de JNDI de sólo lectura. . ver documentación

» Leer más, comentarios, etc...

Sitios MultiIdioma - Smarty

Octubre 22nd, 2005 - [Enlace local]

Primero que nada, esta parte está lejos de ser un tutorial de Smarty, ya que sólo utilizaremos algunas cosas, adaptándolo a nuestro ejemplo (un pequeño sistema de noticias), los que quieran conocer más a fondo esta herramienta, en mi opinión, no hay nada mejor que el manual de la página oficial.

Smarty, como ya había mencionado en la introducción, es un motor de plantillas para PHP, esta herramienta facilita la manera de separar la lógica aplicación, de la presentación de la misma.

Para empezar primero hay que descargar el código fuente de Smarty, la única carpeta que nos interesa del mismo, es la carpeta libs. La estructura que tendrá nuestro ejemplo (denominaremos aplicación al ejemplo que estamos haciendo) es la siguiente:

Una vez con nuestra estructura definida, pasamos a establecer el archivo de configuración y algunas inicializaciones (esta es mi forma de trabajar, no necesariamente tienen que hacerlo así), definimos el archivo config.php en el directorio bc-news:

php:
<?php
	# Archivo config.php
	# ——————
	
	# Directorio donde está ubicado Smarty
	define(‘SMARTY_PATH’, ‘/var/www/smarty/’);
 
	# Define la ruta física del sitio
	define(“APP_PHISICAL_PATH”,$_SERVER[‘DOCUMENT_ROOT’] . “/”);
	# Define la ruta base del sitio
	define(“BASE_PATH”, APP_PHISICAL_PATH . “bc-news/”);
	# Lugar donde se ubican las funciones, clases, etc.
	define(“INCLUDE_PATH”, BASE_PATH . “includes/”);
	# Define el URL base
	define(“BASE_URL”,“http://” . $HTTP_SERVER_VARS[‘HTTP_HOST’] . “/bc-news/”);
	
	/* Para los estilos e imágenes */
	define(“IMAGES_URL”,BASE_URL . “images/”);
	define(“STYLES_URL”,BASE_URL . “css/”);
	define(“SCRIPTS_URL”,BASE_URL . “js/”);
	
	# El directorio donde se ubican las traducciones
	define(“LOCALE”, INCLUDE_PATH . “locale/”);
	
	# El idioma por defecto bajo el cual se deben llenar obligatoriamente todos los datos
	define(“DEFAULT_LANG”, “es”);
	
	# Parámetros de la base de datos
	$db_params[‘db_host’]=“localhost”;
	$db_params[‘db_name’]=“bc-news”;
	$db_params[‘db_user’]=“bc-news”;
	$db_params[‘db_pass’]=“bc”;
?>

Creamos el archivo smarty-instance.php dentro del directorio includes, el cual tiene el objetivo de crear una instancia de Smarty y hacer algunas configuraciones del mismo:

php:
<?php
	# Instancia un objeto de la clase Smarty y define sus atributos
	
	# Carga la clase
	include_once (SMARTY_PATH . ‘Smarty.class.php’); 
	
	# Instancia un nuevo objeto de la clase
	$smarty = new Smarty;
	
	# Define las rutas de trabajo
	$smarty->template_dir 	= SMARTY_PATH . “plantillas”;
	$smarty->compile_dir 	= SMARTY_PATH . “plantillas_c”; # Necesita permisos de escritura
	# Definir un directorio para hacer cache
	#$smarty->cache_dir 		= SMARTY_PATH . "cache"; # Necesita permisos de escritura
?>

Finalmente, creamos el archivo init.php que se encargará de incluir el archivo config.php y todos los archivos del directorio includes, por el momento sólo contiene estas líneas:

php:
<?
	include_once(‘config.php’);
	include_once(INCLUDE_PATH . ’smarty-instance.php’);
?>

En la siguiente entrega, tocaremos un poco de Gettext e implementaremos un plugin para Smarty que se encargue de invocar a las funciones de php-gettext .

» Leer más, comentarios, etc...