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

<channel>
	<title>pedels, desde la amígdala &#187; Informática</title>
	<atom:link href="http://pedels.net/category/informatica/feed/" rel="self" type="application/rss+xml" />
	<link>http://pedels.net</link>
	<description>Desde lo más primitivo de mi cerebro</description>
	<lastBuildDate>Sun, 08 May 2011 16:51:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Enviar escaneado a email usando gmail (o google apps) en una Samsung CLX-3170fn</title>
		<link>http://pedels.net/2011/03/14/informatica/enviar-escaneado-a-email-usando-gmail-o-google-apps-en-una-samsung-clx-3170fn/</link>
		<comments>http://pedels.net/2011/03/14/informatica/enviar-escaneado-a-email-usando-gmail-o-google-apps-en-una-samsung-clx-3170fn/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 17:34:42 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://pedels.net/?p=122</guid>
		<description><![CDATA[Después de calentarme la cabeza y haberlo dejado por imposible, he dado igualmente con el problema y la solución. Para ahorrar a otros la perdida de tiempo en el futuro he decidido publicarlo. Problema: las impresoras multifunción Samsung como la CLX-3170fn o 3185 y similares pueden enviar el documento escaneado directamente a una dirección de [...]]]></description>
			<content:encoded><![CDATA[<p>Después de calentarme la cabeza y haberlo dejado por imposible, he dado igualmente con el problema y la solución. Para ahorrar a otros la perdida de tiempo en el futuro he decidido publicarlo.</p>
<p><strong>Problema:</strong> las impresoras multifunción Samsung como la CLX-3170fn o 3185 y similares pueden enviar el documento escaneado directamente a una dirección de correo (o varias). Esta característica no funciona, a priori, con cuentas de gmail o Google Apps con la configuración que Google te proporciona.</p>
<p><strong>Motivo:</strong> el cliente de correo que lleva integrada la multifunción no permite utilizar conexión segura TLS o SSL. Para Google que permita conexión segura es un requisito, por tanto, cuando intentamos enviar un correo desde la impresora los servidores SMTP de Google rechazan la conexión &#8220;<code>Error de conexión SMTP</code>&#8220;.</p>
<p><strong>Solución:</strong> tenemos que modificar la configuración de la impresora del siguiente modo. Después de conectar al cliente web de configuración de la impresora, vamos a la pestaña &#8220;<strong>Ajustes del equipo</strong>&#8221; y a la sección &#8220;<strong>Configuración de correo > Configuración servidor SMTP</strong>&#8220;.<br />
La configuración que nos permitirá enviar emails usando a los amigos de la gran G es la siguiente:</p>
<hr/>
<code><em>>Configuración servidor SMTP</em><br />
    Dirección IP o nombre de servidor: <strong>Nombre del servidor</strong><br />
    Servidor y puerto SMTP: <strong>aspmx.l.google.com  25</strong><br />
    SMTP requiere autenticación: <strong>NO!</strong></p>
<p>...</p>
<p><em>>Configuración de POP antes que SMTP</em><br />
    SMTP requiere POP3 antes de la autenticación SMTP: <strong>no</strong></p>
<p>...</code></p>
<hr/>
Las opciones que no he puesto o está deshabilitadas o deberían funcionar con cualquier valor.</p>
<p>Lo que hacemos es poner directamente uno de los servidores de correo de Google Apps. La lista completa de servidores en orden de prioridad es:</p>
<ul>
<li>ASPMX.L.GOOGLE.COM</li>
<li>ALT1.ASPMX.L.GOOGLE.COM</li>
<li>ALT2.ASPMX.L.GOOGLE.COM</li>
<li>ASPMX2.GOOGLEMAIL.COM</li>
<li>ASPMX3.GOOGLEMAIL.COM</li>
</ul>
<p><strong>Notas:</strong><br />
Se asume que la impresora está conectada a una toma de red ethernet.<br />
Para que funcione la impresora debe tener algún servidor de DNS configurado en la pestaña &#8220;Ajustes de red&#8221;, sección &#8220;TCP/IP&#8221;. En general si se ha puesto con DHCP debería funcionar y si no siempre se puede probar la dirección IP del router (puerta de enlace y además servidor de DNS habitualmente) o las DNS de Google (primaria 8.8.8.8, secundaria 8.8.4.4)</p>
<p><strong>Fuente:</strong><br />
<a href="http://www.google.co.uk/support/forum/p/gmail/thread?tid=3c4c871a767bafc8&#038;hl=en">hilo de soporte de google.co.uk.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2011/03/14/informatica/enviar-escaneado-a-email-usando-gmail-o-google-apps-en-una-samsung-clx-3170fn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>UML Jokes: en busca del límite humorístico entre los lenguajes humanos y de ordenadores.</title>
		<link>http://pedels.net/2008/01/28/informatica/uml-jokes-en-busca-del-limite-humoristico-entre-los-lenguajes-humanos-y-de-ordenadores/</link>
		<comments>http://pedels.net/2008/01/28/informatica/uml-jokes-en-busca-del-limite-humoristico-entre-los-lenguajes-humanos-y-de-ordenadores/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 21:37:02 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Informática]]></category>

		<guid isPermaLink="false">http://pedels.net/2008/01/28/informatica/uml-jokes-en-busca-del-limite-humoristico-entre-los-lenguajes-humanos-y-de-ordenadores/</guid>
		<description><![CDATA[¿Aburrido del UML? Pasas horas modelando clases, herencias e implementaciones hasta que las corneas se te agrietan. Pues diviertete con unos apasionantes chistes UML, sí, es cierto. Chistes UML. ¿Dónde está el límite entre el lenguaje &#8220;humano&#8221; y el de los &#8220;ordenadores&#8221;? Eso se preguntan en esta web donde invitan a enviar chistes, la única [...]]]></description>
			<content:encoded><![CDATA[<p>¿Aburrido del <acronym title="Unified Modelling Language, Lenguaje Unificado de Modelado"><a href="http://es.wikipedia.org/wiki/Lenguaje_Unificado_de_Modelado" rel="nofollow">UML</a></acronym>? Pasas horas modelando clases, herencias e implementaciones hasta que las corneas se te agrietan.</p>
<p>Pues diviertete con unos apasionantes chistes UML, sí, es cierto. <strong><a href="http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&#038;TIPO_BUS=3&#038;LEMA=chiste">Chistes</a> <a href="http://www.uml.org/" rel="nofollow">UML</a>.</strong></p>
<p>¿Dónde está el límite entre el lenguaje &#8220;humano&#8221; y el de los &#8220;ordenadores&#8221;? Eso se preguntan en esta web donde invitan a enviar chistes, la única condición es que deben estar construidos usando UML, toda una proeza. Lo peor es que tienen gracia y todo.</p>
<p>Como motivación: puedes ganar un portatil.</p>
<p>Enlace: <a href="http://www.umljokes.com/" title="UML Jokes" rel="nofollow">UML Jokes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2008/01/28/informatica/uml-jokes-en-busca-del-limite-humoristico-entre-los-lenguajes-humanos-y-de-ordenadores/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Acertado mensaje de advertencia de Windows</title>
		<link>http://pedels.net/2008/01/20/informatica/acertado-mensaje-de-advertencia-de-windows/</link>
		<comments>http://pedels.net/2008/01/20/informatica/acertado-mensaje-de-advertencia-de-windows/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 22:42:09 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Tonterías]]></category>

		<guid isPermaLink="false">http://pedels.net/2008/01/20/informatica/acertado-mensaje-de-advertencia-de-windows/</guid>
		<description><![CDATA[Nuevos mensajes de advertencia. Debe ser cosa de la actualización al Service Pack 3:]]></description>
			<content:encoded><![CDATA[<p>Nuevos mensajes de advertencia. Debe ser cosa de la actualización al Service Pack 3:<br />
<a href="http://www.flickr.com/photos/91083811@N00/2206953985/" title="equipo_en_riesgo por Pedels, en Flickr"><img src="http://farm3.static.flickr.com/2001/2206953985_ae6feb7574_o.jpg" width="572" height="249" alt="equipo_en_riesgo" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2008/01/20/informatica/acertado-mensaje-de-advertencia-de-windows/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JSqlParser: un parser (analizador sintáctico) para SQL en Java (continuación)</title>
		<link>http://pedels.net/2008/01/16/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java-continuacion/</link>
		<comments>http://pedels.net/2008/01/16/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java-continuacion/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 19:06:46 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://pedels.net/2008/01/16/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java-continuacion/</guid>
		<description><![CDATA[En el último artículo analizamos las posibilidades que se nos presentaban al buscar un parser de SQL para Java e hicimos un recorrido de posibles soluciones de mayor a menor dificultad de adopción. Para una introducción y puesta en situación para este artículo, podría ser recomendable su lectura. Ahora concretamos en la solución encontrada como [...]]]></description>
			<content:encoded><![CDATA[<p>En el <a href="http://pedels.net/2007/12/27/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java/">último artículo</a> analizamos las posibilidades que se nos presentaban al buscar un parser de SQL para Java e hicimos un recorrido de posibles soluciones de mayor a menor dificultad de adopción. Para una introducción y puesta en situación para este artículo, podría ser recomendable su lectura.</p>
<p>Ahora concretamos en la solución encontrada como más adecuada: <a href="http://jsqlparser.sourceforge.net/"><strong>JSqlParser</strong></a>.<br />
Este parser es un proyecto de <a href="http://es.wikipedia.org/wiki/Software_libre" rel="nofollow">Software Libre</a> alojado en <a href="http://sourceforge.net/" rel="nofollow">SourceForge</a> bajo <a href="http://www.gnu.org/licenses/lgpl.html" rel="nofollow">licencia LGPL</a>.</p>
<p>Al <a href="http://sourceforge.net/projects/jsqlparser/" rel="nofollow">descargarlo de SourceForge</a>, nos encontraremos con un archivo .jar. Este archivo contiene la libreria .jar que necesitamos y, además, tanto la documentación como el código fuente. Una forma sencilla de extraer el contenido es renombrar el archivo, cambiando su extensión por .zip. Entonces, lo extraemos con cualquier utilidad para descompresión de este tipo de ficheros.</p>
<p>Encontramos una estructura de carpetas donde nos interesan:</p>
<ul>(si estas en Windows, tus barras serán así: \)</p>
<li>Librería: &#8220;jsqlparser/lib/jsqlparser.jar&#8221;</li>
<li>Documentación: &#8220;jsqlparser/docs&#8221; también en <a href="http://jsqlparser.sourceforge.net/docs/" rel="nofollow">los Javadocs de la página web</a>.</li>
<li>Código fuente: &#8220;jsqlparser/src/net/sf/jsqlparser&#8221;</li>
<li>Archivos SQL de prueba: &#8220;jsqlparser/testfiles&#8221;</li>
</ul>
<p>Es interesante saber también que existe un <a href="http://sourceforge.net/forum/forum.php?forum_id=360150" rel="nofollow">foro en SourceForge</a> donde es posible encontrar (u ofrecer) ayuda. En la página web podemos encontrar un <a href="http://jsqlparser.sourceforge.net/example.php" rel="nofollow">ejemplo</a> que nos será de extrema utilidad para empezar a trabajar con JSqlParser.</p>
<p>Dependiendo del entorno de desarrollo que use deberá agregar la libreria jsqlparser.jar para que esté disponible. A partir de ahí ya podemos usar la librería en nuestro código pero antes necesitamos saber unas cuantas cosas. Explicaremos a continuación una serie de conceptos que pueden facilitarnos la comprensión e la forma de trabajar de esta librería.<br />
<span id="more-96"></span></p>
<hr/>
<strong>El patrón del visitador</strong><br />
Este parser hace uso extensivo del <a href="http://es.wikipedia.org/wiki/Visitor_%28patr%C3%B3n_de_dise%C3%B1o%29" rel="nofollow">Patrón del Visitador</a> (o también, <a href="http://en.wikipedia.org/wiki/Visitor_pattern" rel="nofollow">Visitor Pattern [en inglés pero mucho mejor que la versión española y con ejemplos]</a>).<br />
Intentemos explicar en forma sencilla que es lo que ocurre en este patrón de diseño software. Tenemos dos elementos:</p>
<ul>
<li>Objeto visitador (Visitor): implementa diversas versiones del <a href="http://es.wikipedia.org/wiki/M%C3%A9todos_%28programaci%C3%B3n_orientada_a_objetos%29" rel="nofollow">método </a>visit(objeto_a_visitar) haciendo un uso extensivo del <a href="http://es.wikipedia.org/wiki/Polimorfismo_%28programaci%C3%B3n_orientada_a_objetos%29" rel="nofollow">polimorfismo</a>. Visitor es en realidad un interfaz que debe ser implementado por un objeto pero ahora veremos eso.</li>
<li>Objetos visitables: tienen un método accept(objeto_visitador).</li>
</ul>
<p>El funcionamiento es el siguiente. Si tenemos un objeto denominado Objeto1 que tiene un método <code>accept()</code>. Cuando invocamos <code>Objeto1.accept(Objeto_visitador)</code>, estamos llamando al método <code>accept()</code> y pasándole un objeto que es el Objeto_visitador. Dentro del método <code>accept()</code> lo que ocurre es que se usa el Objeto_visitador, y se invoca su método <code>visit()</code>. De este modo hacemos: <code>Objeto_visitador.visit(Objeto1)</code>.<br />
En Objeto_visitador tenemos muchas versiones de <code>visit()</code>, una para cada tipo de objeto que podemos tratar, de este modo, con un unico Objeto_visitador podemos actuar sobre múltiples objetos distintos.<br />
Todos los objetos implementan el método <code>accept()</code>, que provoca que el objeto acabe siendo pasado como parámetro al objeto_visitador, que usará el método <code>visit()</code> adecuado para cada tipo de objeto que reciba.</p>
<p>En <strong>resumen</strong>, cuando invocamos accept(Objeto_visitador) en un objeto, lo que estamos provocando es que Objeto_visitador reciba el objeto como parámetro en un método que se encargará de tratarlo.</p>
<p>El <a href="http://en.wikipedia.org/wiki/Visitor_pattern" rel="nofollow">artículo de la wikipedia</a> puede ser bastante más clarificador que estos párrafos.</p>
<p>Creo que la forma en que queda más claro es con un ejemplo y el <a href="http://en.wikipedia.org/wiki/Visitor_pattern#Example" rel="nofollow">ejemplo en Java de la Wikipedia</a> es bastante bueno. Aunque yo hubiera usado personas en lugar de piezas de coche por que queda mucho más clara la analogía de la visita:</p>
<p>Imaginemos que el visitador es un médico y el visitable un paciente (hombre, mujer o niño) y el médico puede tratar a los tres.<br />
El paciente enferma y usa su metodo accept(médico) porque necesita un médico, igualmente puede tener accept(fontanero) si lo que necesita es un fontanero. Cuando acepta al médico, lo llama y le pide que le visite, esto es, dentro de accept usa el método visit del médico pasandose a si mismo como argumento.<br />
El médico recibe la petición de visita y dependiendo de que fuera quién ha llamado hará una visita para hombre, mujer o niño porque, aunque la llamada es la misma, se ejecuta un método distinto para cada uno.<br />
El médico tratá al paciente con lo que tenga que hacerle y fin del proceso.</p>
<p>Es posible rizar esto un poco más: el médico puede curarse a si mismo, visitador y visitado pueden ser el mismo; puede haber, al igual que distintos pacientes, distintos médicos que apliquen tratamientos distintos, clases distintas que implementan el mismo interfaz (la forma de llamar al médico es siempre la misma).</p>
<p>Este patrón combinado con un uso jerárquico de llamadas nos da una capacidad y una flexibilidad sorprendente para tratar una estructura más o menos compleja como puede ser una consulta SQL.</p>
<p>En JSqlParser, existen múltiples interfaces <em>Visitor</em>. Que debemos implementar adecuadamente en una clase para tratar ese tipo de objetos. Usar los interfaces nos asegurará que implementamos todos los métodos necesarios para tratar esa parte de la estructura de la consulta.</p>
<hr/>
<strong><br />
Estructura de las sentencias SQL en JSqlParser</strong><br />
He extraido de la documentación la estructura de una consulta <em>Select</em> y la he expresado como un mapa mental de <a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page" rel="nofollow">FreeMind</a> (programa recomendado, tremendamente útil). Ponemos aquí la versión exportada html, aunque si alguién está interesado en el archivo original de FreeMind (recomendado) sólo tiene que pedirlo en los comentarios.<br />
Pincha en las fotos para una versión ampliada:<br />
<a href="http://www.flickr.com/photos/91083811@N00/2177265623/" title="Select Statement por Pedels, en Flickr" rel="nofollow"><img src="http://farm3.static.flickr.com/2378/2177265623_674b0caceb.jpg" width="500" height="352" alt="Select Statement" /></a><br />
<a href="http://www.flickr.com/photos/91083811@N00/2178055340/" title="Expression in Statement por Pedels, en Flickr" rel="nofollow"><img src="http://farm3.static.flickr.com/2179/2178055340_25855dc2d1.jpg" width="424" height="500" alt="Expression in Statement" /></a></p>
<p>No me voy a extender mucho aquí. La estructura corresponde a una descomposición desde arriba hacia abajo de la estructura de la consulta Select, el resto son similares. Para la descomposición se han ido tomando los campos de cada objeto sucesivamente, los que tienen una flecha roja indican que están descompuestos en otra parte del esquema (son enlaces en el archivo original). Para ver los métodos de cada objeto acudid a la documentación original.</p>
<p>Solo comentar que es cada cosa en las imagenes:</p>
<ul>
<li>Texto gris claro con imagen bombilla o campana: <strong>Documentación</strong>. Anotaciones útiles.</li>
<li>Texto marrón con imagen clip: <strong>Interfaz</strong>. Cuando aparece un interfaz se descompone en todos los objetos que implementan ese interfaz.</li>
<li>Texto rojo con imagen carpeta azul: <strong>Objeto</strong>. Se descompone en sus campos que pueden s er tipos de datos primitivos, objetos e interfaces.</li>
<li>Texto azul: <strong>listas de objetos o interfaces</strong>. Muy usadas en toda la libreía.</li>
<li>Texto rojo oscuro: <strong>Tipo de dato primitivo</strong>. Como un entero o una cadena.</li>
</ul>
<p>Una de las imagenes contiene la estructura general y la otra la expansión del interfaz Expression que por su tamaño e importancia (y legibilidad) merece su propia imagen.</p>
<hr/>
<p><strong>Cómo usar todo esto junto sin volverse loco</strong></p>
<p>Partimos del supuesto que tenemos una consulta SQL en una cadena y queremos extraer sus partes. El procedimiento que podemos seguir pasa por crear una clase visitador que reciba la consulta, la analice con el parser que trae JSqlParser y entonces empieza el proceso maravilloso:<br />
Tomamos la consulta completa, la cual tiene metodos para extraer sus partes. Bien, las extraemos y en cada parte usamos el método <code>accept(visitor)</code> esto hará que nuestro visitador vuelva a recibir las partes, que irán a su método <code>visit()</code> gracias al poliformismo de estos.<br />
Una vez recibida cada parte podemos descomponerla en sus partes usando sus propios métodos y llamar en cada una <code>accept(visitor)</code> de nuevo.<br />
Este proceso puede continuar hasta los elementos más elementales de la consulta: cadenas de texto que representan nombres de columnas y tablas, enteros, etc&#8230;.</p>
<p>¿Y qué tiene esto de divertido? Lo divertido es que podemos incluir lo que necesitemos hacer en el proceso y modificar  o extraer los datos que necesitemos de la consulta sin esfuerzo.</p>
<p>En el <a href="http://jsqlparser.sourceforge.net/example.php" target="_blank" rel="nofollow">ejemplo</a> de la web realiza un visitador que va recorriendo la consulta de arriba hacia abajo y cuando encuentra un nombre de tabla lo guarda en un ArrayList donde, al terminar el proceso, estarán todas las tablas que aparecen en la consulta. ¿Y cómo sabe cuando ha llegado a un nombre de tabla¿ Es tan sencillo como que en <code>visit(Table tableName)</code> sólo entrarán tablas, extreamos su nombre y lo guardamos.</p>
<p>Mi recomendación es que intentéis entender la estructura de la consulta, tomeis el ejemplo de la web, terminéis de implementar los interfaces que faltan, en caso de que los veais necesarios, del mismo modo que están los del ejemplo y uséis esa clase como padre para las que os serán de verdadera utilidad. De este modo ocultamos la clase &#8220;fea&#8221; y obtendremos una clase &#8220;bonita&#8221; donde sólo está la tarea que nos interesa.</p>
<p>Yo necesitaba extraer todos los nombres de columnas y tablas. Lo que hice fue terminar de implementar la clase del ejemplo que recorría la consulta de arriba hasta abajo. Esta es la clase padre.</p>
<p>Hecho esto, cree una clase que extendía la anteriormente creada. en esta nueva clase incluí sólo dos métodos que sobreescribían a los de la clase padre: <code>visit(Column columnName)</code> y <code>visit(Table tableName)</code> que recogían los nombres de las tablas y columnas que recibían y los iban guardando en unas listas destianadas para eso.</p>
<p>Y este es el final. Enhorabuena si has llegado hasta aquí leyendo y enhorabuena de nuevo si has entendido algo. El funcionamiento es confuso en un inicio si no estás familiarizado con este tipo de estructuras (para mi lo fue) pero, tras leer un poco y algo de esfuerzo, se pueden conseguir unos resultados muy buenos tanto en la descomposición como en la composición de consultas.</p>
<p>¡Suerte!</p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2008/01/16/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java-continuacion/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>JSqlParser: un parser (analizador sintáctico) para SQL en Java</title>
		<link>http://pedels.net/2007/12/27/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java/</link>
		<comments>http://pedels.net/2007/12/27/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java/#comments</comments>
		<pubDate>Thu, 27 Dec 2007 11:32:10 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://pedels.net/2007/12/27/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java/</guid>
		<description><![CDATA[Por necesidades de mi PFC he tenido que buscarme un]]></description>
			<content:encoded><![CDATA[<p>Por necesidades de mi <acronym title="Proyecto Final de Carrera">PFC</acronym> he tenido que buscarme un <a href="http://es.wikipedia.org/wiki/Analizador_sint%C3%A1ctico" rel=nofollow">parser </a> de <acronym title="Structured Query Language">SQL</acronym> para Java y quiero ahorrarle al resto del mundo tan tediosa tarea.</p>
<p>Podría parecer que un parser SQL para Java es una cosa poco exótica (bueno, depende de dónde te muevas, probablemente para la mayor parte de la gente lo sea :P) pero no hay una solución que podríamos considerar ampliamente aceptada. En lugar de eso podemos encontrar múltiples soluciones parciales más o menos incomodas.</p>
<p>Podemos resumir que todo fue un poco infernal hasta que me decidí a probar <strong><a href="http://jsqlparser.sourceforge.net/">JSqlParser</a></strong>, un <strong>parser de Sql para Java basado en una gramática para JavaCC</strong> creada por un tal <a href="http://www2.informatik.hu-berlin.de/~draheim/java/jjtree.html">Guido Draheim</a>. Yo hasta hace poco tampoco entendía nada de esto :)</p>
<p>En un <a href="http://pedels.net/2008/01/16/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java-continuacion/">artículo posterior</a> profundizaremos en JSqlParser. En este articulo se comentan las posibilidades que existen y la dificultan que conllevan, así como algunos conceptos sobre parsers, gramáticas y trabajo innecesario: ¿quieres saber más? pues sigue leyendo:    <span id="more-95"></span></p>
<p>En realidad tenemos múltiples opciones, que vamos a ir recorriendo de mayor a menor dificultad:</p>
<p><strong>Puedes programar tu propio parser desde cero</strong>. Si no estás metido en lingüistica Computacional y sabes de que estás hablando, mejor que descartemos esta opción.</p>
<p>Una propuesta que se puede encontrar facilmente es: &#8220;Puedes <strong>hacerte tu propio parser utilizando una generador</strong> como <acronym title="Java Compiler-Compiler"><a href="https://javacc.dev.java.net/" rel="nofollow">JavaCC</a></acronym> , <acronym title="ANother Tool for Language Recognition"><a href="http://www.antlr2.org" rel="nofollow">ANTLR</a></acronym> o <acronym title="LALR Parser Generator"><a href="http://sourceforge.net/projects/lpg/" rel="nofollow">LPG</a></acronym>&#8220;. Bueno, la expresión equivalente podría ser algo como: &#8220;Si quieres ir al trabajo comodamente puedes construirte tu propia bicicleta con cualquier caja de herramientas&#8221;.</p>
<p>Los generadores de parser son complejos y si el parser no es algún aspecto central de tu tarea, no creo que valga la pena aprender. Estas herramientas funcionan del siguiente modo: una persona escribe un conjunto de reglas (normalmente llamadas gramática) y el generador, usando estas reglas, da como salida código en un lenguaje de programación concreto que permite <em>parsear</em>(permitidme la licencia, &#8220;analizar sintácticamente&#8221; es mucho más largo) el lenguaje de programación deseado. El lenguage de salida puede ser definido mediante la gramatica (como en ANTLR) o estar definido de antemano (como en JavaCC). Si os gustan los compiladores y teneis mucho tiempo libre, ¡adelante!. En otro caso, seguid leyendo.</p>
<p>Una opción más moderada es <strong>buscar una gramática que alguién haya creado ya y utilizar el generador</strong> de parsers para crear nuestra ansiada herramienta. Esta opción me pareció muy interesante al principio, pero encontramos dos problemas:</p>
<ol>
<li>
Encontrar la gramatica: no estan fácil encontrar una gramática completa para SQL estándar. Encontramos múltiples para subconjuntos o implementaciones concretas pero la gran gramática que buscamos es esquiva y se oculta bien.
</li>
<li>
El parser generado no es precisamente <em>user friendly</em>. De repente tendrás entre tus manos un maremagnum de clases y métodos y ninguna idea de como meterle mano (ni documentación, dicho sea de paso).
</li>
</ol>
<p>Como ejemplo mi experiencia, encontré una referencia (que no localizo ahora) acerca del parser de SQL que <a href="http://db.apache.org/derby/" rel="nofollow">Derby</a> usa internamente. Bien, destripé a Derby, extraje la gramática para JavaCC que contiene y generé el parser: el infierno es más sencillo de controlar. Huelga decir que, después de eso, destripar un plugin de <a href="http://squirrel-sql.sourceforge.net/" rel="nofollow">SQuirreL </a>no era una posibilidad.</p>
<p>Como tercera opción tenemos <strong>usar un parser completito, existente y, a ser posible, con una licencia generosa</strong>. Encontramos unos cuantos en la busqueda:</p>
<ul>
<li>
<a href="http://www.experlog.com/gibello/zql/" rel="nofollow"·><strong>ZQL</strong></a>: basado en un parser generado con JavaCC. Descartado por su falta de garantías y porque la batería &#8220;exhaustiva&#8221; de pruebas que muestra deja mucho que desear.
</li>
<li><a href="http://www.cs.toronto.edu/~jglu/sql4j/" rel="nofollow"><strong>SQL4J</strong></a>: demasiado bonito para ser cierto, es sencillo y parece funcionar muy bien para la mayor parte de los casos. Perdió su oportunidad cuando se atascó en un caso sencillo y habitual como el de encontrar una función como <code>SUM(tabla.columna1) </code> en la consulta. Esto sumado a la total falta de documentación provocaron su caída de la lista.
</li>
<li><a href="http://www.eclipse.org/datatools/project_sqldevtools/" rel="nofollow"><strong>sql development tools project</strong></a> dentro de <a href="http://www.eclipse.org/" rel="nofollow">Eclipse</a>: basado en LPG, muy interesante si usas Eclipse pero no pude  llegar a probarlo porque es incompatible con la versión que usamos en la empresa. Me quede con las ganas.
</li>
</ul>
<p>El último elemento de esta lista es el que titula este artículo: <a href="http://jsqlparser.sourceforge.net/"><strong>JSqlParser</strong></a>. Basado en un parser generado con JavaCC. Este parser asusta en un primer momento por su complejidad aparente (sobre todo si no has estudiado informatica o sabes bastante de <acronym title="Programación Orientada a Objetos">POO</acronym> como es mi caso) pero vale la pena el esfuerzo. Su curva de aprendizaje es un poco abrupta, lo que quiere decir que un pequeño esfuerzo inicial se ve compensado con un dominio más que suficiente de la herramienta en poco tiempo.<br />
La documentación no es maravillosa pero sí aceptable y hay una cierta comunidad alrededor que puede dar respuestas.</p>
<p>Es útil tanto para analizar como para generar consultas SQL de una complejidad asombrosa, sin duda una gran opción y mi recomendación.</p>
<p>En el <strong>proximo artículo</strong> abordaremos un poco la <strong>estructura y la forma de trabajar de JSqlParser</strong>. Lo cual ahorrará a muchos el trabajo inicial de entender y empezar a trabajar con JSqlParser.</p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2007/12/27/informatica/jsqlparser-un-parser-analizador-sintactico-para-sql-en-java/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CD de recuperación Toshiba: &#8220;Terminator&#8221;</title>
		<link>http://pedels.net/2007/09/10/informatica/cd-de-recuperacion-toshiba-terminator/</link>
		<comments>http://pedels.net/2007/09/10/informatica/cd-de-recuperacion-toshiba-terminator/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 22:08:13 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Informática]]></category>

		<guid isPermaLink="false">http://pedels.net/2007/09/10/informatica/cd-de-recuperacion-toshiba-terminator/</guid>
		<description><![CDATA[Esto ocurrio hace algún tiempo (semanas) y ahora una vez superada la carga emocional puedo contarlo. Todo empieza cuando decido poner en orden mi disco duro. Tengo un Toshiba Satellite M70 (con el que estoy muy contento) y traía su Windows Xp preinstalado como es habitual, posteriormente había repartido el sitio y había instalado Ubuntu, [...]]]></description>
			<content:encoded><![CDATA[<p>Esto ocurrio hace algún tiempo (semanas) y ahora una vez superada la carga emocional puedo contarlo.</p>
<p>Todo empieza cuando decido poner en orden mi disco duro. Tengo un <a href="http://es.computers.toshiba-europe.com/cgi-bin/ToshibaCSG/jsp/SUPPORTSECTION/discontinuedProductPage.do?service=ES&#038;BV_UseBVCookie=yes&#038;PRODUCT_ID=116586" rel="nofollow">Toshiba Satellite M70</a> (con el que estoy muy contento) y traía su Windows Xp preinstalado como es habitual, posteriormente había repartido el sitio y había instalado <a href="http://es.wikipedia.org/wiki/Ubuntu_%28distribuci%C3%B3n_Linux%29" rel="nofollow">Ubuntu</a>, todo en orden. Afirmaba con orgullo que mi windows no había sido reinstalado nunca desde que tengo el ordenador pero el hecho de que estuviera ya algo achacoso y el uso que estaba haciendo de Linux me llevaron a la idea de repartir el espacio de nuevo, disminuyendo el espacio para Windows y creando una nueva partición en <a href="http://es.wikipedia.org/wiki/FAT32" rel="nofollow">FAT32</a> (soy conservador respecto a Linux y <a href="http://es.wikipedia.org/wiki/NTFS" rel="nofollow">NTFS</a>, con calma) para que los datos fueran accesibles desde Win y Linux (para lo que uso Windows ahora no se si ha valido la pena todo esto).</p>
<p>Primero de todo, muchas copias de seguridad.</p>
<p>Luego reparto del sitio con un <a href="http://es.wikipedia.org/wiki/Livecd" rel="nofollow">LiveCD</a> y <a href="http://es.wikipedia.org/wiki/GParted" rel="nofollow">GParted,</a> reinstalación de Linux. He de confesar que hasta este punto no estaba seguro de reinstalar Windows, ya que funcionaba bien y todo el mundo sabe lo tremendamente aburrido que es. Si no, habría instalado Windows antes de Linux. Pues bien, me dije: &#8220;ya que tienes el CD de recuperación de Toshiba, puedes tener una instalación bastante completa de Windows en sólo unos minutos ¡Vamos Allá!&#8221;.</p>
<p>Seguro que queréis saber que paso.<span id="more-86"></span></p>
<p>Situación en ese momento: cinco <a href="http://es.wikipedia.org/wiki/Partici%C3%B3n_de_disco" rel="nofollow">particiones</a>, Windows, Linux /, <a href="http://es.wikipedia.org/wiki/Espacio_de_intercambio#En_Linux" rel="nofollow">Linux swap</a>, Linux /home y FAT32. Todo funcionando perfectamente.<br />
Decido meter el CD de recuperación de Toshiba&#8230;reinicio&#8230;.iniciando Windows 98&#8230;recuperando 1%, 2%, 3%&#8230;. En este momento lo supe, estaba machacando el disco duro de forma cruel e imparable, pero era tarde y le deje hacer.<br />
Volvía a tener una instalación limpia de Windows&#8230;y nada más. Me resultaba extraño, ¿el cd no me preguntó nada?, ¿machacó todos mis datos sin avisar?! ¡Que raro! Volví a reiniciar con el CD de recuperación y ahí estaba el menu:<br />
 1->Machacar todo<br />
 2->Menu avanzado, incluso te dejaba recuperar la imagen de windows a una partición.<br />
Algo no iba bien.</p>
<p>Bueno, volvía a la tarea de reparticionar, rehice las particiones. Reinstalé Ubuntu y el mundo parecía ser de nuevo un lugar en orden.</p>
<p>He de confesar que caí de nuevo. Tenía que saberlo. Volví a insertar el CD de recuperacón de Toshiba. Yo había visto el menu, sabía que existía. Con todo listo y ordenado de nuevo, metí el CD de recuperación de Toshiba y volvió a pasar, no había menu, no había esperanza, esta vez lo corte cuando iba por un 1% o 2%.</p>
<p>¿Qué ha pasado? Sigamos investigando. Arranque con el CD de instalación de Ubuntu, GParted, rehago las particiones y ¡sorpresa! las particiones de linux se montan bien. Quizá no sea necesario reinstalarlo, solo recuperar el <a href="http://en.wikipedia.org/wiki/GNU_GRUB" rel="nofollow">grub</a>.<br />
Una vez particionado, arranqué con el CD de recuperación de Toshiba y ahí estaba, AHÍ ESTABA EL MENU. Modo Avanzado, recuperar a una partición, aceptar&#8230;perfecto, windows recuperado en su partición. Reiniciar&#8230;.no funciona, descubró que no tenía partición activa (boot), uso GParted y marco la de Windows. Bien Windows ya arranca en su partición, ahora solo tengo que arreglar grub. Tras investigar un poco encontré como hacerlo, lo recuperé pero el sistema de archivos se había ido a la porra y tuve que reinstalar Linux de nuevo. Y por fin todo quedó en orden.</p>
<p>Es decir, el menu del CD de recuperación de Toshiba sólo te pregunta si encuentra un sector de arranque de Windows, si encuentra Linux lo machaca todo, SIN PREGUNTAR SIQUIERA si estás seguro. El CD de recuperación es un recocido del <a href="http://en.wikipedia.org/wiki/Norton_Ghost" rel="nofollow">Norton Ghost (en)</a> para Toshiba. Al usarlo en modo avanzado, cuando reinstalé Windows a una partición, podía ver perfectamente las otras particiones e incluso las identificaba como particiones Linux, entonces ¿por qué no puedes reconococer otro sector de arranque? Supongo que buscará el de Windows y si no está, asume que el disco esta sin formato, corrupto o a saber y machaca. He de hacer notar que Toshiba es pro Windows en sus equipos.</p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2007/09/10/informatica/cd-de-recuperacion-toshiba-terminator/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Renovación de tema y conversión de codificación a UTF-8 al actualizar a WordPress 2.2.2</title>
		<link>http://pedels.net/2007/08/09/informatica/renovacion-de-tema-y-conversion-de-codificacion-a-utf-8-al-actualizar-a-wordpress-222/</link>
		<comments>http://pedels.net/2007/08/09/informatica/renovacion-de-tema-y-conversion-de-codificacion-a-utf-8-al-actualizar-a-wordpress-222/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 13:15:53 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Creación web]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://pedels.net/2007/08/09/meta/renovacion-de-tema-y-conversion-de-codificacion-a-utf-8-al-actualizar-a-wordpress-222/</guid>
		<description><![CDATA[Bien después de una entrenida busqueda y recorrer las 111 páginas de temas de wordpress (en serio) encontré una que me gustaba y, más tarde, una versión modificada que me gustaba aún más. Aunque aún no se que hacer con ese espacio para mi foto y un comentario ombliguero, se aceptan sugerencias. Me quedan algunas [...]]]></description>
			<content:encoded><![CDATA[<p>Bien después de una entrenida busqueda y recorrer las 111 páginas de temas de wordpress (en serio) encontré una que me gustaba y, más tarde, una versión modificada que me gustaba aún más. Aunque aún no se que hacer con ese espacio para mi foto y un comentario ombliguero, se aceptan sugerencias.</p>
<p>Me quedan algunas tareas como poner los scripts para el recuento de visitas y alguna más pero son cosas de las que no sereis testigos :P Si alguien ha visitado este sitio en las últimas horas, habrá tenido la oportunidad de ver cambios de tema, entradas mutiladas, codificaciones de caracteres incorrectas y muchas más cositas ¿y eso porqué?</p>
<p>Pues porque las versiones anteriores de WordPress usaban una codificación de caracteres latin1 (idiomas de Europa occidental, sin el simbolo de Euro que está en latin9) pero la versión actual usa codificación UTF-8, una codificación universal. Bien el problema surge cuando descubres que si actualizas desde versiones anteriores de WordPress puedes tener ciertas incoherencias entre lo que debería ser y lo que es. Ya que la codificación de la base de datos y de los post puede no ser la que debiera o la que idealmente dedería ser.</p>
<p>Si es una instalación nueva de WordPress, no hay de que preocuparse. Todo esta bien. En otro caso, puedes seguir leyendo.</p>
<p>No se mucho de todo esto pero al final ha salido bien. Hay varias soluciones al problema, existe una <a href="http://www.uniondebloggershispanos.com/2007/05/28/el-problema-con-la-codificacion-utf-8-en-wordpress-22/">sencilla y previsiblemente temporal</a>, un <a href="http://codex.wordpress.org/Converting_Database_Character_Sets" rel="nofollow">borrador de una solución en el codex de wordpress</a> que es solución definitiva pero muy engorrosa y una <a href="http://g30rg3x.com/2007/06/06/una-solucion-formal-al-problema-con-wordpress-22-y-utf-8/">solución formal y elegante mediante el plug-in &#8220;UTF-8 Database converter&#8221;</a>.</p>
<p>La solución del plug-in me ha llevado al huerto y me he decidido a probarla con catastófrico resultado&#8230; por eso hay que hacer un backup, por ejemplo mediante el <a href="http://wordpress.org/extend/plugins/wp-db-backup/" rel="nofollow">plug-in WP-DB-Backup</a> ¡MUY IMPORTANTE!</p>
<p>No sabría deciros los pasos poruqe me he equivocado un par de veces o más, obeteniendo entradas truncadas o sembradas de simbolitos raros. Pero creo que podría deciroslos:</p>
<ol>
<li>Haz un backup de todos tus datos y ponlo a buen recaudo en tu ordenador</li>
<li>Sigue las instrucciones para usar el plug-in &#8220;UTF-8 Database converter&#8221;, esta todo en castellano. A leer un poquito. Tienes que editar el wp-config.php que no se olvide.</li>
<li>¿Se te ha roto todo? Si es así sigue leyendo, si no pués ya está</li>
<li>Importa de nuevo el back-up de tu base de datos, asegurate de que indicas que la base de datos está codificada como latin1 al importar los datos</li>
<li>¿Se ven simbolitos raros? Intentemos arreglarlo.</li>
<li>Dentro de la administración de WordPress, ve a Opciones->Lectura->Codificación para páginas y feeds. Introduce el valor UTF-8</li>
<li>Si se ve todo bien, enhorabuena,</li>
</ol>
<p>Como os decía he tenido algún problema y no se si esta solución es la buena. Si además añadimos que no se mucho del tema, pues bueno, de ahí la utilidad del backup.</p>
<p>Si alguien prueba esto, pro favor que me diga los resultados, las condiciones de partida y lo pasos que ha dado para mejorar la recetilla.</p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2007/08/09/informatica/renovacion-de-tema-y-conversion-de-codificacion-a-utf-8-al-actualizar-a-wordpress-222/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cursos PHP y MySQL</title>
		<link>http://pedels.net/2007/08/07/informatica/cursos-php-y-mysql/</link>
		<comments>http://pedels.net/2007/08/07/informatica/cursos-php-y-mysql/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 22:38:59 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Creación web]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://pedels.net/2007/08/07/creacion-web/cursos-php-y-mysql/</guid>
		<description><![CDATA[Últimamente con esto de que me sobra el tiempo me estoy dedicado a cultivarme (de forma geek que no agraria) y a cubrir algunas cositas que me quedaba por aprender o dominar. En este camino he encontrado un sitio donde aparecen unos cursos que puede que resulten interesantes a más de uno. Estos cursos parten [...]]]></description>
			<content:encoded><![CDATA[<p>Últimamente con esto de que me sobra el tiempo me estoy dedicado a cultivarme (de forma geek que no agraria) y a cubrir algunas cositas que me quedaba por aprender o dominar. En este camino he encontrado un sitio donde aparecen unos cursos que puede que resulten interesantes a más de uno.</p>
<p>Estos cursos parten prácticamente de cero en la mayor parte de los casos, en ocasiones sólo son necesarias nociones en algunos campos, claro está que un dominio medio en cosas como HTML o saber algo de bases de datos puede allanar bastante el camino.</p>
<p>Están organizados en forma de lección sencilla, ejemplo y ejercicio de cada parte con lo que te obligas a practicar lo aprendido. Una gran ventaja es que el código se escribe y se interpreta directamente en la web, así que las excusas de que hay que instalar <a href="http://es.wikipedia.org/wiki/Servidor_HTTP_Apache">Apache</a> o que es una pesadez tener que subir cada archivo por <acronym title="File Transfer Protocol">ftp</acronym> al servidor para probarlo se acabaron.</p>
<p>Las lecciones van aumentando la complejidad progresivamente y de forma bastante gradual, de forma que el curso completo forma un solo bloque, esto se echa en falta en otros cursos construidos mediante colaboración de muchas personas en los que las lecciones van dando saltos de dificultad y estilo, lo que puede llevarte a confusión. ¡Ah! Están completamente en español.</p>
<p>Cada curso está alojado bajo un dominio distinto del tipo www.&#8221;materiadeinteres&#8221;ya.com.ar, por ejemplo, para php el curso se encuentra en <a href="http://www.phpya.com.ar">www.phpya.com.ar</a> y para mysql es <a href="http://www.mysqlya.com.ar">www.mysqlya.com.ar</a>.</p>
<p>Los cursos cubren otras materias como:</p>
<ul>
<li><a href="http://www.htmlya.com.ar">HTML</a></li>
<li><a href="http://www.cssya.com.ar">CSS</a></li>
<li><a href="http://www.javascriptya.com.ar">Javascript</a></li>
<li><a href="http://www.dhtmlya.com.ar">DHTML</a></li>
<li><a href="http://www.ajaxya.com.ar">AJAX</a></li>
<li><a href="http://www.sqlserverya.com.ar">SQLserver</a></li>
<li><a href="http://www.aspya.com.ar">ASP</a></li>
</ul>
<p>Ya no teneis excusas para aprender. ¡Qué os sean útiles!</p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2007/08/07/informatica/cursos-php-y-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>En busca del CMS perfecto&#8230;</title>
		<link>http://pedels.net/2007/07/28/informatica/en-busca-del-cms-perfecto/</link>
		<comments>http://pedels.net/2007/07/28/informatica/en-busca-del-cms-perfecto/#comments</comments>
		<pubDate>Sat, 28 Jul 2007 12:28:11 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Creación web]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://pedels.net/2007/07/28/creacion-web/en-busca-del-cms-perfecto/</guid>
		<description><![CDATA[Mi quest en busca de un CMS (Sistema de Manejo de Contenido, podriamos decir) sigue en pie, mi último descubrimiento ha sido Joomla. Por ahora tiene muy buena pinta, la instalación es fácil, como la de la mayoría, pero en este caso todas las instrucciones estan dadas a un nivel más alto, queriendo decir menos [...]]]></description>
			<content:encoded><![CDATA[<p>Mi quest en busca de un CMS (Sistema de Manejo de Contenido, podriamos decir) sigue en pie, mi último descubrimiento ha sido <a href="http://www.joomlaspanish.org/">Joomla.</a></p>
<p>Por ahora tiene muy buena pinta, la instalación es fácil, como la de la mayoría, pero en este caso todas las instrucciones estan dadas a un nivel más alto, queriendo decir menos técnico. Esto tiene ventajas y desventajas, si sabes un poco que estas haciendo todo resulta sencillo, si tienes algún problema puede que no sepas de que te estén hablando y te encuentres perdido. Intuyo que todo estará resulto en la web de forma más o menos clara, no he tenido ocasión de comprobarlo porque por ahora ha ido como la seda.</p>
<p>La interfaz es una monada(tanto la web como la administración) y por ahora parece bastante intuitivo. La orientación parece clara hacia comunidades y viene con funciones para gestionar publicidad y estadísticas de serie.</p>
<p>Parece que la idea es que puedas hacer mucho sin saber una etiqueta de html, me reitero, tiene sus ventajas y sus inconvenientes.</p>
<p>Todo esto son primeras impresiones , ya que, como he dicho, es un descubrimiento (muy) reciente pero me ha causado buena sensación y, por ahora, recomiendo a todo el que esté interesado que le eche un vistazo.</p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2007/07/28/informatica/en-busca-del-cms-perfecto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De la añoranza al vicio en un par de clicks: Supaplex</title>
		<link>http://pedels.net/2006/06/26/informatica/de-la-anoranza-al-vicio-en-un-par-de-clicks-supaplex/</link>
		<comments>http://pedels.net/2006/06/26/informatica/de-la-anoranza-al-vicio-en-un-par-de-clicks-supaplex/#comments</comments>
		<pubDate>Mon, 26 Jun 2006 21:25:27 +0000</pubDate>
		<dc:creator>pedels</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Juegos]]></category>

		<guid isPermaLink="false">http://pedels.net/2006/06/26/informatica/de-la-anoranza-al-vicio-en-un-par-de-clicks-supaplex/</guid>
		<description><![CDATA[¿Quién no se acuerda del amigo Supaplex? Todo un clasico: 1991. Lo disfrute cuando aún era demasiado jovén para apreciar tremenda obra de arte y os voy a decir como estar jugando dentro de 5 minutos. Bien, el juego no funciona en WindowsXP. Lo que no es de extrañar dado que es un programita para [...]]]></description>
			<content:encoded><![CDATA[<p>¿Quién no se acuerda del amigo <a href="http://amiga.emucamp.com/emerald/s/supaplex.html">Supaplex</a>?<br />
Todo un clasico: 1991. Lo disfrute cuando aún era demasiado jovén para apreciar tremenda obra de arte y <strong>os voy a decir como estar jugando dentro de 5 minutos.</strong></p>
<p>Bien, el juego no funciona en WindowsXP. Lo que no es de extrañar dado que es un programita para MS-<abbr title="Dirty Operating System">DOS</abbr> y usará todas esas tripas feas que tenía aquel sistemita operativo de <a href="http://www.windowsreinstall.com/install/msdos/msdos/ods/historyofdos.html">nacimiento algo turbio</a>.</p>
<p>Asumo que casi todos los que me leen tienen buenos conocimientos informáticos pero por si acaso llega un alma cándida curioseante que cree que el MS-DOS es la segunda parte de la pelicula MS, intentare ser muy claro (se que no lo conseguiré).</p>
<ol>
<li>Debeis bajaros el <a href="http://dosbox.sourceforge.net/news.php?show_news=1">DOSBox</a>, una pequeña maravilla que te permite ejecuta muchas muchas cosas hechar para MS-DOS pero en muchos otros SO, como WindowsXP. Vamos a Downloads y cogemos la versión Windows (está la primerita) que es Win32 installer. Lo bajamos del mirror que nos pille mas cerca o del que nos de mas coraje. Lo instalamos y ya tenemos donde ejecutar el juego.</li>
<li>Nos bajamos el Supaplex, por ejemplo de su <a href="http://www.elmerproductions.com/sp/">página web</a>, arriba tenemos &#8220;Free Download&#8221; de donde podemos bajar el juego comprimido en archivo .zip. Mi recomendacion es que creéis una carpeta sencilla en C:, tal y como C:\JUEGOSDOS y dentro otra carpeta llamada SUPAPLEX. Dentro de esta última carpeta procedemos a descomprimir el juego. Esto nos permitirá guardar más juegos dentro de la carpeta JUEGOSDOS, lo que resultará muy comodo por lo que ya vereis.<br />
Tenemos entonces C:\JUEGOSDOS\SUPAPLEX con todo el Supaplex dentro :D</li>
<li>Último paso. Ejecutamos DOSBox, nos saldrá una ventana que imita a la perfección una de MS-DOS y otra por detrás que no nos interesa. Tenemos que montar una unidad, que será donde estarán nuestros juegos. Nos encontramos con el promt &#8220;Z:\>_&#8221;, escribimos: <code>mount c c:\juegosdos</code> e Intro. Si has usado otro nombre para la carpeta que contiene la carpeta del Supaplex pues sustituye juegosdos por el nombre que hayas usado.<br />
Tachán, tenemos una nueva unidad C:, si escribes: <code>c:</code> cambiarás de unidad, y escribiendo <code>dir</code> vemos como todos los contenidos de nuestra carpeta JUEGOSDOS son ahora los de la unidad C:, podemos tener distintas carpetas con distintos juegos que nos proporcionarán la dicha y la felicidad más grandes.<br />
Tan sólo queda <code>cd Supaplex</code> para entrar en la carpeta y <code>spfix63</code> (o el archivo .exe que haya si ya es otra versión) para iniciar este juego terrible.</li>
</ol>
<p><em>¿Qué no te funciona bien el teclado?</em>, los &#8220;:&#8221; están en la &#8220;Ñ&#8221; y la &#8220;\&#8221; está en &#8220;ç&#8221;.</p>
<p>Espero que lo disfruteis porque nadie puede decir que ha jugado a videojuegos toda su vida si no ha perdido antes unas horas con el amigo Supaplex.</p>
<p><strong>Actualización</strong>: El <a title="Megaplex" target="_blank" href="http://www.infordigital.com/Megaplex/index.html">Megaplex</a> funciona perfectamente en WindowsXP, aunque echo en falta la música y parece que los efectos de sonido tampoco andan bien del todo. Trae algunas carácteristicas interesantes (o muy interesantes) como el editor de niveles, el zoom, control de velocidad. Espero que lo sigan mejorando porque aunque el nuevo interfaz y el aspecto gráfico es una actualización excelente, se echan de menos cosas como el cronómetro de tiempo real (no en frames), y la gestión de niveles y usuarios del original. Y por que no, el otro tiene encanto, que a uno le gusta alimentar la vena nostálgica escribiendo &#8220;cd supaplex&#8221; y jugando con esos graficos de punto gordo. Podemos retitular este post &#8220;La renovación del vicio en un click: Megaplex&#8221;. Gracias a aquellos que me han avisado de su existencia y al resto: ¡Probadlo!</p>
]]></content:encoded>
			<wfw:commentRss>http://pedels.net/2006/06/26/informatica/de-la-anoranza-al-vicio-en-un-par-de-clicks-supaplex/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

