<?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>v.codeweblog &#187; VictorR</title>
	<atom:link href="http://weblog.v-code.org/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://weblog.v-code.org</link>
	<description>Blog personal de Victor Rodriguez sobre programación y mis aficiones</description>
	<lastBuildDate>Thu, 20 May 2010 11:42:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Crop de imágenes JPG con Java Advanced Imaging API (JAI)</title>
		<link>http://weblog.v-code.org/2010/05/crop-de-imagenes-jpg-con-java-advanced-imaging-api-jai/</link>
		<comments>http://weblog.v-code.org/2010/05/crop-de-imagenes-jpg-con-java-advanced-imaging-api-jai/#comments</comments>
		<pubDate>Thu, 20 May 2010 11:42:51 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[problemas]]></category>
		<category><![CDATA[Soluciones]]></category>
		<category><![CDATA[tutoriales]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=340</guid>
		<description><![CDATA[Hoy la entrada será de nuevo una solución a un problema encontrado en el proyecto en el que trabajo actualmente. Y es que cuando quieres editar imágenes con Java las alternativas no son muchas y tampoco fáciles. Nosotros nos decidimos por utilizar Java Advanced Imaging API, una librería que no se actualiza desde 2007&#8230; bueno, [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy la entrada será de nuevo una solución a un problema encontrado en el proyecto en el que trabajo actualmente. Y es que cuando quieres editar imágenes con Java las alternativas no son muchas y tampoco fáciles. Nosotros nos decidimos por utilizar <a href="http://java.sun.com/javase/technologies/desktop/media/jai/">Java Advanced Imaging API</a>, una librería que no se actualiza desde 2007&#8230; bueno, no toca entrar a discutir este tema.</p>
<p>Vamos a entrar en materia. El código:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> cropImage<span style="color: #009900;">&#40;</span><span style="color: #003399;">InputStream</span> is, <span style="color: #000066; font-weight: bold;">int</span> topLeftmx, <span style="color: #000066; font-weight: bold;">int</span> topLeftmy, <span style="color: #000066; font-weight: bold;">int</span> roiWidth, <span style="color: #000066; font-weight: bold;">int</span> roiHeight, <span style="color: #003399;">String</span> tipoImagen<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// 1 - generar el crop</span><br />
&nbsp; &nbsp; SeekableStream s <span style="color: #339933;">=</span> SeekableStream.<span style="color: #006633;">wrapInputStream</span><span style="color: #009900;">&#40;</span>is, <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; RenderedOp image <span style="color: #339933;">=</span> JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;stream&quot;</span>, s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>OpImage<span style="color: #009900;">&#41;</span>image.<span style="color: #006633;">getRendering</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setTileCache</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003399;">ParameterBlock</span> pb <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ParameterBlock</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">addSource</span><span style="color: #009900;">&#40;</span>image<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>topLeftmx<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>topLeftmy<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>roiWidth<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>roiHeight<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; image <span style="color: #339933;">=</span> JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;crop&quot;</span>,pb<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// 2 - codificar la imagen resultado del crop</span><br />
&nbsp; &nbsp; <span style="color: #003399;">ByteArrayOutputStream</span> baos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ByteArrayOutputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;encode&quot;</span>, image, baos, tipoImagen, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> baos.<span style="color: #006633;">toByteArray</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Básicamente esta función tiene 2 partes, la primera (1) donde se genera el crop de la imagen, y la segunda (2) donde se codifica la imagen resultado del crop realizado. Es decir, informar si la imagen es JPEG, PNG, TIFF&#8230;</p>
<p>Cuál es el problema que nos encontramos, si vamos a la línea marcada (3):</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;encode&quot;</span>, image, baos, tipoImagen, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3</span></div></div>
<p>estamos creando la codificación, indicando con la variable tipoImagen si se trata de una &#8220;JPEG&#8221; (&#8220;JPG&#8221; no funciona), &#8220;PNG&#8221;, &#8220;TIFF&#8221; o demás formatos soportados.</p>
<p>Funcionar funciona correctamente con cada uno de los tipos de imagen que le pasemos, excepto con &#8220;JPEG&#8221;. Con este tipo las coordenadas elegidas para realizar el crop sobre la imagen simplemente se pierden. No se porqué, pero se pierden.</p>
<p>La solución encontrada en <a href="http://forums.java.net/">java.net Forums</a>, <a href="http://forums.java.net/jive/thread.jspa?messageID=393038&#393038">Thread: The crop operation seems to ignore (x,y) offset</a> es la siguiente:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;encode&quot;</span>, image.<span style="color: #006633;">getAsBufferedImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, baos, tipoImagen, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3</span></div></div>
<p>La solución es pasar la variable image (de tipo RenderedOp) a tipo BufferedImage en la función create de la clase JAI. Milagrosamente todo vuelve a funcionar, incluido el tipo &#8220;JPEG&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2010/05/crop-de-imagenes-jpg-con-java-advanced-imaging-api-jai/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>unixkcd</title>
		<link>http://weblog.v-code.org/2010/04/unixkcd/</link>
		<comments>http://weblog.v-code.org/2010/04/unixkcd/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 16:08:41 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[curiosidades]]></category>
		<category><![CDATA[freak]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=338</guid>
		<description><![CDATA[Hola, aún no se exactamente que es, una web friki, de humor, geek, o muchas más cosas a la vez&#8230; Pero la acabo de descubrir y la quiero compartir y no volver a olvidar&#8230; Simplemente me gusta&#8230;
unixkcd
]]></description>
			<content:encoded><![CDATA[<p>Hola, aún no se exactamente que es, una web friki, de humor, geek, o muchas más cosas a la vez&#8230; Pero la acabo de descubrir y la quiero compartir y no volver a olvidar&#8230; Simplemente me gusta&#8230;</p>
<p><a href="http://xkcd.com/unixkcd/">unixkcd</a></p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2010/04/unixkcd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XSD to Java o cómo crear un WebService a partir de schemas</title>
		<link>http://weblog.v-code.org/2010/03/xsd-to-java-o-como-crear-un-webservice-a-partir-de-schemas/</link>
		<comments>http://weblog.v-code.org/2010/03/xsd-to-java-o-como-crear-un-webservice-a-partir-de-schemas/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 15:49:10 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Soluciones]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[util]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=335</guid>
		<description><![CDATA[Hoy un post &#8220;tecky&#8221;. Pero esta vez, y recordando lo que yo mismo predico, sólo va a ser una referencia a otro blog.
Llevo unos días peleándome con la creación de un web service. En concreto, tengo el schema que debe seguir, pero no tengo el WSDL. Bien, tras mucho buscar, he encontrado la manera de [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy un post &#8220;tecky&#8221;. Pero esta vez, y recordando lo que <a href="http://weblog.v-code.org/2008/10/dont-copy-please/" alt="Don't Copy, please!">yo mismo predico</a>, sólo va a ser una referencia a otro <a href="http://jubyvictor.blogspot.com/" alt="Victor blogs">blog</a>.</p>
<p>Llevo unos días peleándome con la creación de un web service. En concreto, tengo el <a href="http://en.wikipedia.org/wiki/XML_schema" alt="XML Schema">schema</a> que debe seguir, pero no tengo el <a href="http://en.wikipedia.org/wiki/Web_Services_Description_Language" alt="Web Services Description Language">WSDL</a>. Bien, tras mucho buscar, he encontrado la manera de generar, sí, generar, el <a href="http://en.wikipedia.org/wiki/Web_Services_Description_Language" alt="Web Services Description Language">WSDL</a>. </p>
<p>Aquí la referencia:</p>
<p><a href="http://jubyvictor.blogspot.com/2008/09/build-contract-first-web-services-using.html" alt="Victor blogs: Build contract first web services using CXF+JAXWS+JAXB &#038; Spring">Build contract first web services using CXF+JAXWS+JAXB &#038; Spring</a></p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2010/03/xsd-to-java-o-como-crear-un-webservice-a-partir-de-schemas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails 3.0 Beta released!</title>
		<link>http://weblog.v-code.org/2010/02/ruby-on-rails-3-0-beta-released/</link>
		<comments>http://weblog.v-code.org/2010/02/ruby-on-rails-3-0-beta-released/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 19:47:32 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=333</guid>
		<description><![CDATA[Hoy me ha llegado a mi email el anuncio que la versión Beta de la esperada versión 3 de Ruby on Rails fue presentada el pasado viernes 5. A ver si esta es la vez que de una vez puedo aprender este framework!
Os dejo un enlace al anuncio en el blog de ruby on rails [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy me ha llegado a mi email el anuncio que la versión Beta de la esperada versión 3 de Ruby on Rails fue presentada el pasado viernes 5. A ver si esta es la vez que de una vez puedo aprender este framework!<br />
Os dejo un enlace al anuncio en el blog de ruby on rails <a href="http://weblog.rubyonrails.org/2010/2/5/rails-3-0-beta-release/">Raisls 3.0: Beta release</a></p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2010/02/ruby-on-rails-3-0-beta-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Si Google lo dice&#8230; IE6 Not Supported</title>
		<link>http://weblog.v-code.org/2010/02/si-google-lo-dice-ie6-not-supported/</link>
		<comments>http://weblog.v-code.org/2010/02/si-google-lo-dice-ie6-not-supported/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 08:56:00 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[navegadores]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=331</guid>
		<description><![CDATA[¿Por qué todo va tan rápido en el mundo de las telecomunicaciones excepto para Internet Explorer 6? Y es que ya era hora que, tras varios movimientos en contra de Internet Explorer 6, llega la hora de que Google Apps deje de dar soporte a tan maligno sufrido navegador. Google está enviando a todos los [...]]]></description>
			<content:encoded><![CDATA[<p>¿Por qué todo va tan rápido en el mundo de las telecomunicaciones excepto para <a href="http://en.wikipedia.org/wiki/Internet_Explorer_6">Internet Explorer 6</a>? Y es que ya era hora que, tras varios <a href="http://www.techcrunch.com/2008/03/25/save-the-developers-stop-using-internet-explorer-6/">movimientos</a> en contra de <a href="http://en.wikipedia.org/wiki/Internet_Explorer_6">Internet Explorer 6</a>, llega la hora de que <a href="http://en.wikipedia.org/wiki/Google_Apps">Google Apps</a> deje de dar soporte a tan <del datetime="2010-02-03T08:35:20+00:00">maligno</del> sufrido navegador. Google está enviando a todos los administradores de Googel Apps el aviso (Important notice: Google Apps browser support) de que el próximo 1 de Marzo <a href="http://en.wikipedia.org/wiki/Google_Docs">Google Docs</a> y el editor de <a href="http://en.wikipedia.org/wiki/Google_site">Google Sites</a> dejarán de soportarlo para apostar por una ejecución más rápida de javascript en el navegador y del nuevo <a href="http://en.wikipedia.org/wiki/Html5">HTML5</a>. El resto de las <a href="http://en.wikipedia.org/wiki/Google_Apps">Google Apps</a> lo dejarán de soportar durante el resto del presente año.</p>
<p>Ya hace tiempo que Google avisa a los usuarios de sus páginas que se actualicen el navegador, si desean tener una mejor experiencia utilizando sus servicios, que lo incluya ahora en las apps es otro paso. A ver si esto ayuda a que los usuarios de <a href="http://en.wikipedia.org/wiki/Internet_Explorer_6">IE6</a> cambien de una vez de navegador. Quiero recordar que <a href="http://en.wikipedia.org/wiki/Internet_Explorer_6#Supported_platforms">Windows Vista ya no lo soporta, y mucho menos Windows 7</a>. ¿Por qué entonces tenemos que seguir haciendo que las páginas web se sigan viendo en este navegador? Por favor, que tiene 9 añazos!! demasiado en cualquier tecnología sin renovarse estos días&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2010/02/si-google-lo-dice-ie6-not-supported/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zen Coding</title>
		<link>http://weblog.v-code.org/2010/01/zen-coding/</link>
		<comments>http://weblog.v-code.org/2010/01/zen-coding/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:42:23 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[Soluciones]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[util]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=326</guid>
		<description><![CDATA[Desde Smashing Magazine encuentro Zen Coding, que como dice el artículo se trata de:
a handy set of tools for high-speed HTML and CSS coding
Pues eso. Una vez presentado, ¿cómo funciona? muy facil, yo te lo explico   Sólo tienes que poner selectores CSS, sí, sí, selectores CSS para generar la estructura html que deseas [...]]]></description>
			<content:encoded><![CDATA[<p>Desde <a href="http://www.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/">Smashing Magazine</a> encuentro <a href="http://code.google.com/p/zen-coding/">Zen Coding</a>, que como dice el artículo se trata de:</p>
<blockquote><p>a handy set of tools for high-speed HTML and CSS coding</p></blockquote>
<p>Pues eso. Una vez presentado, ¿cómo funciona? muy facil, yo te lo explico <img src='http://weblog.v-code.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  Sólo tienes que poner selectores CSS, sí, sí, selectores CSS para generar la estructura html que deseas en tu editor (lista de editores soportados más abajo), y lanzar el shortcut correspondiente (en Aptana alt+E) para generar el código html.</p>
<p>Enlace a la noticia en <a href="http://www.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/">Smashing Magazine, Zen Codign: A Speedy Way To Write HTML/CSS Code.</a></p>
<p>Editores soportados:<br />
    &#8211; Aptana (cross-platform)<br />
    &#8211; Coda (Mac)<br />
    &#8211; Espresso (Mac)</p>
<p>Editores semi-soportados:<br />
    &#8211; TextMate (Mac, la alternativa para Windows es E-text);<br />
    &#8211; TopStyle<br />
    &#8211; Sublime Text<br />
    &#8211; GEdit<br />
    &#8211; editArea online editor</p>
<p>A disfrutar.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2010/01/zen-coding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Una Wacom? no el trackpad del mac!</title>
		<link>http://weblog.v-code.org/2010/01/una-wacom-no-el-trackpad-del-mac/</link>
		<comments>http://weblog.v-code.org/2010/01/una-wacom-no-el-trackpad-del-mac/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 10:46:34 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[curiosidades]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Soluciones]]></category>
		<category><![CDATA[util]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=322</guid>
		<description><![CDATA[El otro día, leyendo una de mis suscripciones rss (tuaw), me encontré con esta aplicación, Inklet Trackpad Tablet. 
Es muy curiosa, porque aprovechando las características táctiles del trackpad de los MacBooks de última generación, convierte el trackpad en algo así como una Tabla digitalizadora, a.k.a Wacom. Con unas limitaciones, es cierto. No &#8220;sabe&#8221; diferenciar entre [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día, leyendo una de mis suscripciones rss (<a href="http://www.tuaw.com">tuaw</a>), me encontré con esta aplicación, <a href="http://tenonedesign.com/inklet.php">Inklet Trackpad Tablet</a>. </p>
<p>Es muy curiosa, porque aprovechando las características táctiles del trackpad de los MacBooks de última generación, convierte el trackpad en algo así como una <a href="http://es.wikipedia.org/wiki/Tableta_digitalizadora">Tabla digitalizadora, a.k.a Wacom</a>. Con unas limitaciones, es cierto. No &#8220;sabe&#8221; diferenciar entre una mayor o menor presión (léase sensibilidad), pero también es cierto que proponen otro producto, <a href="http://tenonedesign.com/sketch.php">Pogo Sketch</a>, de la misma compañía <a href="http://tenonedesign.com">Ten 1 Design</a> para solucionar esta cuestión.</p>
<p>Más información en <a href="http://www.tuaw.com/2010/01/12/inklet-turns-your-trackpad-into-a-wacom-style-tablet/">Inklet turns your trackpad into a Wacom-style tablet</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2010/01/una-wacom-no-el-trackpad-del-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manifiesto: En defensa de los derechos fundamentales en Internet</title>
		<link>http://weblog.v-code.org/2009/12/manifiesto-en-defensa-de-los-derechos-fundamentales-en-internet/</link>
		<comments>http://weblog.v-code.org/2009/12/manifiesto-en-defensa-de-los-derechos-fundamentales-en-internet/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 09:58:06 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Derecho]]></category>
		<category><![CDATA[Piratería]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=314</guid>
		<description><![CDATA[Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…
1.- [...]]]></description>
			<content:encoded><![CDATA[<p>Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…</p>
<p><strong>1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos</strong>, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.</p>
<p><strong>2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial</strong>. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.</p>
<p><strong>3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español</strong>, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.</p>
<p><strong>4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural</strong>. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.</p>
<p><strong>5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones</strong>. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.</p>
<p><strong>6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas</strong> modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.</p>
<p><strong>7.- Internet debe funcionar de forma libre y sin interferencias políticas</strong> auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.</p>
<p><strong>8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España</strong>, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.</p>
<p><strong>9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin</strong>: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.</p>
<p><strong>10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas</strong>. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.</p>
<p><em>NOTA: aunque tarde, yo tambíen quiero sumarme al manifiesto. Sin embargo, y aunque la copia privada sea legal, ¿es correcto dejar a un amigo un cd para que lo copie? ¿No debe pagarse los derechos de autor por un trabajo realizado?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2009/12/manifiesto-en-defensa-de-los-derechos-fundamentales-en-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validando Cif, Nif y Nie</title>
		<link>http://weblog.v-code.org/2009/06/validando-cif-nif-y-nie/</link>
		<comments>http://weblog.v-code.org/2009/06/validando-cif-nif-y-nie/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 13:29:39 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tips & tricks]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=292</guid>
		<description><![CDATA[Del proyecto en el que trabajo en la actualidad he &#8220;sacado&#8221; estas tres piezas de código. Nada fuera de lo común, pero que sin duda sirven y servirán para una parte de las pequeñas tareas que se realizan en cada proyecto. Esto es, validar datos.
Como todo el mundo sabe, para que una aplicación, web, cosa&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>Del proyecto en el que trabajo en la actualidad he &#8220;sacado&#8221; estas tres piezas de código. Nada fuera de lo común, pero que sin duda sirven y servirán para una parte de las pequeñas tareas que se realizan en cada proyecto. Esto es, validar datos.</p>
<p>Como todo el mundo sabe, para que una aplicación, web, cosa&#8230; funcione, debe mantener un conjunto discreto de datos (esto siempre me gustó de las clases de mates), información, de una manera poco ambigua. Y por eso es necesario validar la mayoría de datos que la aplicación, web, cosa&#8230; acepta.</p>
<p>Básicamente hay dos maneras de validar los datos, una es en el navegador del cliente, con tecnologías tipo javascript, y la otra es en el servidor, por ejemplo con java, php&#8230; Poco más queda decir a parte de que la manera más fácil de controlar los datos y más segura es validar los datos a nivel de servidor. Ya sabes, desactivas el javascripi y te quedas sin validar.</p>
<p>Sim embargo, lo que os traigo aquí es javascript, ¿por qué? Porque a modo de &#8220;repositorio&#8221; quiero guardar estas &#8220;perlas&#8221; para futuros trabajos y que sirva a otros <del datetime="2009-06-29T13:08:12+00:00">vagos</del> de ayuda.</p>
<p><strong>Validar CIF</strong></p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">testCIF</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> pares <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> impares <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> suma<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> ultima<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> unumero<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> uletra <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;J&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;A&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;B&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;C&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;D&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;E&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;F&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;G&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;H&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;I&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> xxx<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; texto <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> regular <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^[ABCDEFGHKLMNPQS]\d{7}[0-9,A-J]$/g</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>regular.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>texto<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; ultima <span style="color: #339933;">=</span> texto.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">8</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> cont <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span> <span style="color: #339933;">;</span> cont <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">7</span> <span style="color: #339933;">;</span> cont <span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xxx <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span> <span style="color: #339933;">*</span> parseInt<span style="color: #009900;">&#40;</span>texto.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span>cont<span style="color: #339933;">++,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;0&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; impares <span style="color: #339933;">+=</span> parseInt<span style="color: #009900;">&#40;</span>xxx.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> parseInt<span style="color: #009900;">&#40;</span>xxx.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pares <span style="color: #339933;">+=</span> parseInt<span style="color: #009900;">&#40;</span>texto.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span>cont<span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; xxx <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span> <span style="color: #339933;">*</span> parseInt<span style="color: #009900;">&#40;</span>texto.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span>cont<span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;0&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; impares <span style="color: #339933;">+=</span> parseInt<span style="color: #009900;">&#40;</span>xxx.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> parseInt<span style="color: #009900;">&#40;</span>xxx.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; suma <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>pares <span style="color: #339933;">+</span> impares<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; unumero <span style="color: #339933;">=</span> parseInt<span style="color: #009900;">&#40;</span>suma.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span>suma.<span style="color: #660066;">length</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; unumero <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #CC0000;">10</span> <span style="color: #339933;">-</span> unumero<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>unumero <span style="color: #339933;">==</span> <span style="color: #CC0000;">10</span><span style="color: #009900;">&#41;</span> unumero <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>ultima <span style="color: #339933;">==</span> unumero<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>ultima <span style="color: #339933;">==</span> uletra<span style="color: #009900;">&#91;</span>unumero<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p><strong>Validar DNI</strong></p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">testDNI</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; dni <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; numero <span style="color: #339933;">=</span> dni.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>dni.<span style="color: #660066;">length</span><span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; let <span style="color: #339933;">=</span> dni.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span>dni.<span style="color: #660066;">length</span><span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; let <span style="color: #339933;">=</span> let.<span style="color: #660066;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; numero <span style="color: #339933;">=</span> numero <span style="color: #339933;">%</span> <span style="color: #CC0000;">23</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; letra <span style="color: #339933;">=</span> <span style="color: #3366CC;">'TRWAGMYFPDXBNJZSQVHLCKET'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; lletra <span style="color: #339933;">=</span> letra.<span style="color: #660066;">charAt</span><span style="color: #009900;">&#40;</span>numero<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>lletra <span style="color: #339933;">==</span> let<span style="color: #009900;">&#41;</span> <br />
<span style="color: #009900;">&#125;</span></div></div>
<p><strong>Validar NIE</strong></p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">testNIE</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> dni <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> pre <span style="color: #339933;">=</span> dni.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> prev <span style="color: #339933;">=</span> <span style="color: #3366CC;">'0'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>pre <span style="color: #339933;">==</span> <span style="color: #3366CC;">'X'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;prev <span style="color: #339933;">=</span> <span style="color: #3366CC;">'0'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>pre <span style="color: #339933;">==</span> <span style="color: #3366CC;">'Y'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;prev <span style="color: #339933;">=</span> <span style="color: #3366CC;">'1'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>pre <span style="color: #339933;">==</span> <span style="color: #3366CC;">'Z'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;prev <span style="color: #339933;">=</span> <span style="color: #3366CC;">'2'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; numero <span style="color: #339933;">=</span> prev <span style="color: #339933;">+</span> dni.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span>dni.<span style="color: #660066;">length</span><span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> numero.<span style="color: #660066;">testDNI</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Si os dáis cuenta, las funciones extienden la clase String de javascript, esto es simplemente para que sea más facil de utilizar y lo más &#8220;orientado&#8221; a objetos posible.</p>
<p><strong>Ejemplo de USO</strong></p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">// validación de un DNI</span><br />
<span style="color: #3366CC;">&quot;74185296S&quot;</span>.<span style="color: #660066;">testDNI</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp; &nbsp; &nbsp;<span style="color: #006600; font-style: italic;">// value: true</span></div></div>
<p><strong>NOTA:</strong> que quede claro que el código no me lo he inventado yo, lo he adaptado de los recursos que se pueden encontrar en la inmensidad de internet. Lo que pasa es que no recuerdo de dónde los saqué, ni si lo saqué yo, y no puedo poner la retribución que se merece el autor/es de dichos scripts.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2009/06/validando-cif-nif-y-nie/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Definiendo entornos con Maven</title>
		<link>http://weblog.v-code.org/2009/06/definiendo-entornos-con-maven/</link>
		<comments>http://weblog.v-code.org/2009/06/definiendo-entornos-con-maven/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 08:05:11 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[tips & tricks]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=258</guid>
		<description><![CDATA[Una pregunta, ¿qué pasa cuando quieres desplegar tu aplicación en diferentes entornos? Lo normal es que estos entornos no sean iguales, aunque es lo aconsejable. Lo normal es que no acaben de tener la misma configuración, por ejemplo el nivel de logs (debug para desarrollo, error para producción&#8230;). Lo normal, vaya, es que tengas que [...]]]></description>
			<content:encoded><![CDATA[<p>Una pregunta, ¿qué pasa cuando quieres desplegar tu aplicación en diferentes entornos? Lo normal es que estos entornos no sean iguales, aunque es lo aconsejable. Lo normal es que no acaben de tener la misma configuración, por ejemplo el nivel de logs (debug para desarrollo, error para producción&#8230;). Lo normal, vaya, es que tengas que controlar la configuración para cada entorno por separado. Frameworks como Ruby on Rails, o Symfony ya vienen con esta idea de tener entornos diferentes, con configuración diferente y propiedades diferentes, pero en Java te lo tienes que &#8220;currar&#8221; un poco más.</p>
<p>Ahora bien, tienes dos opciones, o lo haces a &#8220;manija&#8221; o te lo curras con algún sistema automatizado para cambiar estas configuraciones. Y es aquí donde viene que ni pintado <a href="http://es.wikipedia.org/wiki/Maven" title="Pedazo de invento el Maven!">Maven</a>, en particular los <a href="http://maven.apache.org/guides/introduction/introduction-to-profiles.html" title="Profiles de Maven">Profiles de Maven</a>. Y es que:</p>
<blockquote><p>Profiles are specified using a subset of the elements available in the POM itself (plus one extra section), and are triggered in any of a variety of ways. They modify the POM at build time, and are meant to be used in complementary sets to give equivalent-but-different parameters for a set of target environments (providing, for example, the path of the appserver root in the development, testing, and production environments). As such, profiles can easily lead to differing build results from different members of your team.</p></blockquote>
<p>Aquí un simple ejemplo de que cómo especificar diferentes recursos a maven según el entorno:</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><br /><strong>GeSHi Error:</strong> GeSHi could not find the language  (using path /usr/home/v-code.org/web/blog/wp-content/plugins/codecolorer/lib/geshi/) (code 2)<br /></div>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><br /><strong>GeSHi Error:</strong> GeSHi could not find the language  (using path /usr/home/v-code.org/web/blog/wp-content/plugins/codecolorer/lib/geshi/) (code 2)<br /></div>
<p>El ejemplo es sencillo, especifica las carpetas de los resources del proyecto para los entornos de desarrollo y de test. Ahora lo que se necesita para activarlo es ejecutar Maven pasando como parámetro <strong>-Denv=dev</strong> o <strong>-Denv=test</strong>. Hay otras maneras de activar los Profiles. Puede depender del sistema operativo donde estés compilando el proyecto, si existen o dejan de existir diferentes archivos (también dependiendo del entorno en el que te encuentres)&#8230; Lo importante de la configuración es saber que en el tag activation es dónde y cómo se activan los profiles.</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><br /><strong>GeSHi Error:</strong> GeSHi could not find the language  (using path /usr/home/v-code.org/web/blog/wp-content/plugins/codecolorer/lib/geshi/) (code 2)<br /></div>
<p>Con este código estamos diciendo que cuando se compile el proyecto, si existe una variable llamada env con valor test pasada como parámetro, el Profile se active. No es muy dificil&#8230; Así, si queremos compilar el proyecto en el entorno de desarrollo (-Denv=dev) la llamada sería:</p>
<div class="codecolorer-container  default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><br /><strong>GeSHi Error:</strong> GeSHi could not find the language  (using path /usr/home/v-code.org/web/blog/wp-content/plugins/codecolorer/lib/geshi/) (code 2)<br /></div>
<p>Bueno, esto sólo ha sido un ejemplo básico, no dejéis de revisar la documentación del <a href="http://maven.apache.org/pom.html" title="POM Reference">POM de Maven</a> para obtener más información y profundizar más en el tema.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.org/2009/06/definiendo-entornos-con-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
