<?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/"
	>

<channel>
	<title>www. La Mandarina Mecánica .es</title>
	<atom:link href="http://lamandarinamecanica.es/feed" rel="self" type="application/rss+xml" />
	<link>http://lamandarinamecanica.es</link>
	<description>...ahora con internet los niños se te educan solos... Homer Simpson...</description>
	<pubDate>Fri, 23 Jul 2010 08:49:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Java vs .Net   - The Film</title>
		<link>http://lamandarinamecanica.es/java-vs-net-the-film</link>
		<comments>http://lamandarinamecanica.es/java-vs-net-the-film#comments</comments>
		<pubDate>Fri, 23 Jul 2010 08:29:13 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1600</guid>
		<description><![CDATA[Buenísimo video, mega geek.
]]></description>
			<content:encoded><![CDATA[<p>Buenísimo video, mega geek.</p>
<p><a href="http://lamandarinamecanica.es/java-vs-net-the-film"><p><em>Click here to view the embedded video.</em></p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/java-vs-net-the-film/feed</wfw:commentRss>
		</item>
		<item>
		<title>Super Mario Android</title>
		<link>http://lamandarinamecanica.es/super-mario-android</link>
		<comments>http://lamandarinamecanica.es/super-mario-android#comments</comments>
		<pubDate>Thu, 01 Jul 2010 11:42:11 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1597</guid>
		<description><![CDATA[Live Wallpaper para Android 2.1, consiste en una fase de Super Mario World:
Puedes descargarlo en XDA-Developers
]]></description>
			<content:encoded><![CDATA[<p>Live Wallpaper para Android 2.1, consiste en una fase de Super Mario World:</p>
<p><a href="http://lamandarinamecanica.es/super-mario-android"><p><em>Click here to view the embedded video.</em></p></a></p>
<p>Puedes descargarlo en <a href="http://forum.xda-developers.com/showthread.php?t=710647" target="_blank">XDA-Developers</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/super-mario-android/feed</wfw:commentRss>
		</item>
		<item>
		<title>Pasar variables entre páginas JS.</title>
		<link>http://lamandarinamecanica.es/pasar-variables-entre-paginas-con-js</link>
		<comments>http://lamandarinamecanica.es/pasar-variables-entre-paginas-con-js#comments</comments>
		<pubDate>Fri, 25 Jun 2010 12:18:28 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1591</guid>
		<description><![CDATA[Podemos pasar variables entre páginas utilizando solo javaScript
Este es el código que va en la página que envía las variables.
Enviamos las variables de los campos (campo_1 y campo_2) a través del form fi, con el método get.
&#60;form action=&#8221;Recoger.html&#8221; method=&#8221;get&#8221; name=&#8221;f1&#8243; id=&#8221;f1&#8243;&#62;
  Nombre Cliente:
  &#60;input id=&#8221;campo_1&#8243; value=&#8221;" type=&#8221;text&#8221; /&#62;
  &#60;input id=&#8221;campo_2&#8243; value=&#8221;" type=&#8221;text&#8221; /&#62;
  &#60;input name=&#8221;Submit&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Podemos pasar variables entre páginas utilizando solo javaScript<br />
Este es el código que va en la página que envía las variables.<br />
Enviamos las variables de los campos (campo_1 y campo_2) a través del <span style="color: #993300;">form fi</span>, con el método get.</p>
<blockquote><p>&lt;form action=&#8221;Recoger.html&#8221; method=&#8221;get&#8221; name=&#8221;f1&#8243; id=&#8221;f1&#8243;&gt;<br />
  Nombre Cliente:<br />
  &lt;input id=&#8221;campo_1&#8243; value=&#8221;" type=&#8221;text&#8221; /&gt;<br />
  &lt;input id=&#8221;campo_2&#8243; value=&#8221;" type=&#8221;text&#8221; /&gt;<br />
  &lt;input name=&#8221;Submit&#8221; type=&#8221;submit&#8221; /&gt;<br />
&lt;/form&gt;</p></blockquote>
<p>Este es el código que lleva la página que recibe las variables.<br />
Accedemos a la cadena que nos hemos enviado desde la otra página.<br />
La función separa las variables que hemos recibido,<br />
Unescape codifica las cadenas de caracteres que hemos recibido en formato URL. unescape(&#8221;%23&#8243;);</p>
<p>// devuelve #<br />
    <span id="more-1591"></span></p>
<blockquote><p>
&lt;script&gt;<br />
function separateQueryString(){<br />
queryString=location.search.substr(1);<br />
pares=queryString.split(&#8217;&amp;&#8217;);<br />
$_GET=[];<br />
for(ii in pares){<br />
tmp=pares[ii].split(&#8217;=');<br />
$_GET[tmp[0]]=unescape(tmp[1].split(&#8217;+').join(&#8217; &#8216;));<br />
}<br />
//for (ii in $_GET){<br />
// Si quieres mostrar todas las variables en un Div.<br />
//document.getElementById(&#8217;nombre_Div&#8217;).innerHTML+=$_GET[ii]+&#8217;&lt;br /&gt;&#8217;;<br />
//}<br />
document.getElementById(&#8217;text_1&#8242;).value=$_GET['campo_1'];<br />
document.getElementById(&#8217;text_2&#8242;).value=$_GET['campo_2'];<br />
}<br />
window.onload=separateQueryString;<br />
&lt;/script&gt;</p></blockquote>
<p>La página que recoge los valores, tiene que tener los campos con los &#8216;id&#8217; que hemos enviado.</p>
<blockquote><p>&lt;div id=&#8221;nombre_Div&#8221;&gt; &lt;div/&gt;<br />
&lt;input id=&#8221;text_1&#8243; type=&#8221;text&#8221;&gt;<br />
&lt;input id=&#8221;text_2&#8243; type=&#8221;hidden&#8221;&gt;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/pasar-variables-entre-paginas-con-js/feed</wfw:commentRss>
		</item>
		<item>
		<title>Layar</title>
		<link>http://lamandarinamecanica.es/layar</link>
		<comments>http://lamandarinamecanica.es/layar#comments</comments>
		<pubDate>Fri, 25 Jun 2010 10:09:16 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1588</guid>
		<description><![CDATA[Volvemos con la realidad aumentada en aplicaciones para móvil. En esta ocasión hablaremos de la aplicación Layar, disponible para Android y iPhone OS.
Layar, a través de la cámara y el geoposicionamiento, y seleccionando un motor de búsqueda entre los incluidos en la aplicación, podemos conocer datos acerca del monumento que estemos mirando, o buscar bares [...]]]></description>
			<content:encoded><![CDATA[<p>Volvemos con la realidad aumentada en aplicaciones para móvil. En esta ocasión hablaremos de la aplicación <a href="http://www.layar.com/">Layar</a>, disponible para Android y iPhone OS.</p>
<p>Layar, a través de la cámara y el geoposicionamiento, y seleccionando un motor de búsqueda entre los incluidos en la aplicación, podemos conocer datos acerca del monumento que estemos mirando, o buscar bares que pongan partidos de la liga por el Canal +, por ejemplo. Incluso tiene acceso a Google Maps, por si queremos saber cómo se llega a ese local.</p>
<p><a href="http://lamandarinamecanica.es/layar"><p><em>Click here to view the embedded video.</em></p></a></p>
<p>Lo malo es la increible cantidad de batería que consume, pues hay que tener a la vez la cámara, el GPS, y estar conectados a internet, ya sea via Wi-Fi o 3G.</p>
<p>Ahora para saber dónde hay un Banco Santander ya no hay que preguntar a la gente, le preguntaremos al móvil.</p>
<p>fuente: <a href="http://and.roid.es/layar-demostracion-en-la-calle.html" target="_blank">and.roid.es</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/layar/feed</wfw:commentRss>
		</item>
		<item>
		<title>Manipulación de PDFs con Java mediante ITEXT</title>
		<link>http://lamandarinamecanica.es/manipulacion-de-pdfs-con-java-mediante-itext</link>
		<comments>http://lamandarinamecanica.es/manipulacion-de-pdfs-con-java-mediante-itext#comments</comments>
		<pubDate>Mon, 21 Jun 2010 08:03:55 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1575</guid>
		<description><![CDATA[INTRODUCCIÓN:
En Java, a la hora de crear documentos PDF, existen múltiples librerias que nos ayudan a generarlos, en este articulo vamos a hablar sobre la librería ITEXT.
ITEXT a parte de ser una buena librería para generar PDFs tiene la ventaja de que se integra facilmente con SPRING a la hora de desarrollar aplicaciones Web.
Los datos [...]]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration: underline;"><strong>INTRODUCCIÓN:</strong></span></p>
<p>En Java, a la hora de crear documentos PDF, existen múltiples librerias que nos ayudan a generarlos, en este articulo vamos a hablar sobre la librería ITEXT.</p>
<p>ITEXT a parte de ser una buena librería para generar PDFs tiene la ventaja de que se integra facilmente con SPRING a la hora de desarrollar aplicaciones Web.</p>
<p>Los datos pueden ser escritos a un fichero o, por ejemplo, desde un servlet a un navegador web.</p>
<p><span style="text-decoration: underline;"><strong>CARACTERÍSTICAS PRINCIPALES:</strong></span></p>
<p>- Generación de documentos PDF (parrafos, tablas, imágenes, encabezados y pies de pagina…)</p>
<p>- Generar documentos dinámicos a partir de archivos XML o bases de datos</p>
<p>- Agregar marcadores de libros, números de página, marcas de agua, etc</p>
<p>- Split, concatenar, y manipular las páginas PDF</p>
<p>- Automatizar el llenado de formularios PDF</p>
<p>- Agregar firma digital a un archivo PDF</p>
<p><span id="more-1575"></span></p>
<p><span style="text-decoration: underline;"><strong>INSTALACIÓN:</strong></span></p>
<p>Para empezar veamos donde descargarnos la librería</p>
<p>Esta es la web de la librería, aquí se puede ver la API, ejemplos y tutoriales:</p>
<p><a href="http://itextpdf.com/">http://itextpdf.com/</a></p>
<p>Una vez que seleccionamos descargrnos la version para Java nos redirecciona a esta otra página:</p>
<p><a href="http://sourceforge.net/projects/itext/files/">http://sourceforge.net/projects/itext/files/</a></p>
<p>Actualmente la versión más reciente es la 5.0.2</p>
<p>Una vez nos hemos descargado la librería, la añadimos al CLASSPATH de nuestro proyecto Java para poder utilizarla</p>
<p><span style="text-decoration: underline;"><strong>EJEMPLO:</strong></span></p>
<p>Este ejemplo abarca la creación de un documento PDF simple, para ver ejemplos mas complejos nos podemos descargar de la propia página muchos ejemplos que abarcan toda la funcionalidad de esta libreria:</p>
<p><a href="http://www.itextpdf.com/examples/index.php">http://www.itextpdf.com/examples/index.php</a></p>
<p><span style="text-decoration: underline;"><strong>CÓDIGO:</strong></span></p>
<blockquote><p><span style="color: #0000ff;">import java.io.FileOutputStream;<br />
import com.itextpdf.text.BaseColor;<br />
import com.itextpdf.text.Chunk;<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.Element;<br />
import com.itextpdf.text.Font;<br />
import com.itextpdf.text.FontFactory;<br />
import com.itextpdf.text.Image;<br />
import com.itextpdf.text.PageSize;<br />
import com.itextpdf.text.Paragraph;<br />
import com.itextpdf.text.Phrase;<br />
import com.itextpdf.text.Rectangle;<br />
import com.itextpdf.text.Font.FontFamily;<br />
import com.itextpdf.text.pdf.ColumnText;<br />
import com.itextpdf.text.pdf.PdfPCell;<br />
import com.itextpdf.text.pdf.PdfPTable;<br />
import com.itextpdf.text.pdf.PdfPageEventHelper;<br />
import com.itextpdf.text.pdf.PdfWriter;</span></p>
<p><span style="color: #0000ff;">public class Test {<br />
 <br />
<span style="color: #00ff00;"> //Nombre del fichero PDF Resultante de la ejecucion<br />
</span> public static final String RESULT = &#8220;Ejemplo1.pdf&#8221;;<br />
 <span style="color: #00ff00;">//Titulos<br />
</span> public static final String CHUNK = &#8220;CHUNK&#8221;;<br />
 public static final String PHRASE = &#8220;PHRASE&#8221;;<br />
 public static final String PARAGRAPH = &#8220;PARAGRAPH&#8221;;<br />
 public static final String TABLE = &#8220;TABLE&#8221;;<br />
 public static final String IMAGE = &#8220;IMAGE&#8221;;<br />
<span style="color: #00ff00;"> //Textos<br />
</span> public static final String SEPARADOR = &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8221;;<br />
 public static final String CHUNK1 = &#8220;This is the smallest significant part of text that can be added to a document.&#8221;;<br />
 public static final String CHUNK2 = &#8220;Most elements can be divided in one or more Chunks. A chunk is a String with a certain Font. All other layout parameters should be defined in the object to which this chunk of text is added.&#8221;;<br />
 public static final String PHRASE1 = &#8220;A Phrase is a series of Chunks.&#8221;;<br />
 public static final String CHUNKPHRASE21 = &#8220;A Phrase has a main Font,&#8221;;<br />
 public static final String CHUNKPHRASE22 = &#8221; but some chunks within the phrase can have a Font that differs from the main Font.&#8221;;<br />
 public static final String CHUNKPHRASE23 = &#8221; All the Chunks in a Phrase  have the same leading.&#8221;;<br />
 public static final String PARAGRAPH1 = &#8220;A Paragraph is a series of Chunks and/or Phrases.&#8221;;<br />
 public static final String PARAGRAPH2 = &#8220;A Paragraph has the same qualities of a Phrase, but also some additional layout-parameters: The indentation AND The alignment of the text&#8221;;</span></p>
<p><span style="color: #0000ff;">    public static void main (String[] args) {<br />
     try<br />
     {<br />
     <span style="color: #00ff00;"> //Creacion del documento con un tamaño y unos margenes predeterminados<br />
</span>      Document document = new Document(PageSize.A4, 50, 50, 50, 50);<br />
      <span style="color: #00ff00;">//Al documento se le puede añadir cierta metaInformacion<br />
</span>      document.addAuthor(&#8221;FJHO&#8221;);<br />
      document.addTitle(&#8221;EJEMPLO1&#8243;);</span></p>
<p><span style="color: #0000ff;"><span style="color: #00ff00;">      //A DocWriter class for PDF.<br />
      //When this PdfWriter is added to a certain PdfDocument,<br />
      //the PDF representation of every Element added to this Document will be written to the outputstream.</span><br />
      PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT));<br />
   <span style="color: #00ff00;">      //LEADING = separacion entre lineas del documento<br />
</span>         writer.setInitialLeading(16);<br />
         Rectangle rct = new Rectangle(36, 54, 559, 788);<br />
       <span style="color: #00ff00;">  //Definimos un nombre y un tamaño para el PageBox los nombres posibles son: &#8220;crop&#8221;, &#8220;trim&#8221;, &#8220;art&#8221; and &#8220;bleed&#8221;.<br />
</span>         writer.setBoxSize(&#8221;art&#8221;, rct);<br />
        <br />
         <span style="color: #00ff00;">//Se crea una instancia de la clase que pinta la cabecera y el pie de pagina y se le asignan los eventos que ocurran en el PDF<br />
</span>        <span style="color: #00ff00;"> //La en la clase HeaderFooter se capturarar el evento onEndPage para pintarlos<br />
</span>            HeaderFooter event = new HeaderFooter();<br />
            writer.setPageEvent(event);<br />
           <br />
       <span style="color: #00ff00;">  //Opens the document.<br />
            //You have to open the document before you can begin to add content to the body of the document.<br />
</span>         document.open();<br />
       <span style="color: #00ff00;">  //Ejemplos de CHUNKS<br />
          //Creamos el CHUNK definiendo su tipo de letra, tamaño&#8230;<br />
</span>          Chunk titulo = new Chunk(CHUNK, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK));<br />
        <span style="color: #00ff00;">  //Lo añadimos al documento<br />
</span>          document.add(titulo);<br />
       <span style="color: #00ff00;">   //CHUNK predefinido, es un salto de linea<br />
</span>          document.add(Chunk.NEWLINE);<br />
          Chunk chunkSeparador =  new Chunk(SEPARADOR);<br />
          Chunk chunkNormal = new Chunk(CHUNK1);<br />
          document.add(chunkNormal);<br />
          document.add(Chunk.NEWLINE);<br />
          document.add(Chunk.NEWLINE);<br />
          Chunk chunkTunning = new Chunk(CHUNK2,FontFactory.getFont(FontFactory.COURIER, 20, Font.ITALIC, BaseColor.GREEN));<br />
          document.add(chunkTunning);<br />
          document.add(Chunk.NEWLINE);<br />
          document.add(Chunk.NEWLINE);<br />
          Chunk chunkTunning2 = new Chunk(CHUNK2,new Font(FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE));<br />
          chunkTunning2.setBackground(BaseColor.BLACK, 10f, 10f, 10f, 10f);<br />
          document.add(chunkTunning2);<br />
          document.add(Chunk.NEWLINE);<br />
          document.add(Chunk.NEWLINE);<br />
          document.add(Chunk.NEWLINE);<br />
          document.add(chunkSeparador);         <br />
         <span style="color: #00ff00;">//FIN Ejemplos de CHUNKS      <br />
         //**************************************************************<br />
         //Ejemplos de PHRASES<br />
</span>          titulo = new Chunk(PHRASE, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK));<br />
          document.add(titulo);<br />
          document.add(Chunk.NEWLINE);<br />
          Phrase phraseNormal = new Phrase(PHRASE1);<br />
          document.add(phraseNormal);<br />
          document.add(Chunk.NEWLINE);<br />
          document.add(Chunk.NEWLINE);<br />
          Phrase phraseTunning = new Phrase(new Chunk(CHUNKPHRASE21));<br />
          phraseTunning.add(new Chunk(CHUNKPHRASE22, FontFactory.getFont(FontFactory.COURIER, 5, Font.ITALIC, BaseColor.GREEN)));<br />
          phraseTunning.add(new Chunk(CHUNKPHRASE23, FontFactory.getFont(FontFactory.TIMES_ROMAN, 15, Font.BOLD, BaseColor.ORANGE)));<br />
          document.add(phraseTunning);<br />
          document.add(Chunk.NEWLINE);<br />
          document.add(Chunk.NEWLINE);<br />
          Phrase phraseConLeading = new Phrase(30, &#8220;Todo es la misma frase LEADING de esta PHRASE=100, Todo es la misma frase LEADING de esta PHRASE=100, Todo es la misma frase LEADING de esta PHRASE=100&#8243;);<br />
          document.add(phraseConLeading);<br />
          document.add(Chunk.NEWLINE);<br />
          document.add(chunkSeparador);         <br />
<span style="color: #00ff00;">         //FIN Ejemplos de PHRASES<br />
         //**************************************************************<br />
         //Ejemplos de PARAGRAPH</span><br />
          titulo = new Chunk(PARAGRAPH, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK));<br />
          document.add(titulo);<br />
          document.add(Chunk.NEWLINE);<br />
        <span style="color: #00ff00;">  // Añadir parrafo sin formato<br />
</span>          document.add(new Paragraph(PARAGRAPH1));<br />
          Paragraph par = new Paragraph(PARAGRAPH2);<br />
          par.setIndentationLeft(200);<br />
          document.add(par);<br />
          par = new Paragraph(PARAGRAPH2);<br />
          par.setIndentationRight(300);<br />
          document.add(par);<br />
       <span style="color: #00ff00;">   // Añadir parrafo en Negrita           <br />
</span>          par = new Paragraph(PARAGRAPH2);<br />
             par.getFont().setStyle(Font.BOLD);<br />
             par.setAlignment(Element.ALIGN_CENTER);<br />
             document.add(par);<br />
         <span style="color: #00ff00;"> // Añadir parrafo en Cursiva<br />
</span>             par = new Paragraph(PARAGRAPH2);<br />
             par.getFont().setStyle(Font.ITALIC);<br />
             par.setAlignment(Element.ALIGN_RIGHT);<br />
             document.add(par);<br />
         <span style="color: #00ff00;">    // Añadir parrafo tunning<br />
</span>             par = new Paragraph(PARAGRAPH2,<br />
         FontFactory.getFont(&#8221;arial&#8221;,   <span style="color: #00ff00;">// fuente<br />
</span>              16,                    <span style="color: #00ff00;">// tamaño<br />
</span>              Font.ITALIC,          <span style="color: #00ff00;"> // estilo<br />
</span>              BaseColor.RED));      <span style="color: #00ff00;"> // color<br />
</span>             document.add(par);<br />
             par.setAlignment(Element.ALIGN_LEFT);<br />
             document.add(chunkSeparador); <br />
             document.add(Chunk.NEWLINE);<br />
             document.add(Chunk.NEWLINE);<br />
<span style="color: #00ff00;">         //FIN Ejemplos de PARAGRAPH<br />
         //**************************************************************            <br />
         //Ejemplos de TABLE</span><br />
             titulo = new Chunk(TABLE, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK));<br />
          document.add(titulo);<br />
         <span style="color: #00ff00;">    //Añadir tabla 5 columnas<br />
</span>             PdfPTable table = new PdfPTable(5);<br />
          <span style="color: #00ff00;">  //Añadir CABECERA<br />
</span>             PdfPCell cell = new PdfPCell(new Phrase(&#8221;CABECERA&#8221;));<br />
             cell.setColspan(5);<br />
             cell.setBackgroundColor(BaseColor.GREEN);<br />
             table.addCell(cell);<br />
        <span style="color: #00ff00;">     //Añadir dos filas de celdas sin formato<br />
</span>             table.addCell(&#8221;1.1&#8243;);<br />
             table.addCell(&#8221;1.2&#8243;);<br />
             table.addCell(&#8221;1.3&#8243;);<br />
             table.addCell(&#8221;1.4&#8243;);<br />
             table.addCell(&#8221;1.5&#8243;);<br />
             table.addCell(&#8221;2.1&#8243;);<br />
             table.addCell(&#8221;2.2&#8243;);<br />
             table.addCell(&#8221;2.3&#8243;);<br />
             table.addCell(&#8221;2.4&#8243;);<br />
             table.addCell(&#8221;2.5&#8243;);<br />
       <span style="color: #00ff00;">      //tunning de Celdas<br />
</span>             cell = new PdfPCell(new Phrase(&#8221;Alto 3 celdas&#8221;));<br />
             cell.setRowspan(2);<br />
             cell.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />
             table.addCell(cell);<br />
             table.addCell(&#8221;3.1&#8243;);<br />
             table.addCell(&#8221;3.2&#8243;);<br />
             table.addCell(&#8221;3.3&#8243;);<br />
             table.addCell(&#8221;3.4&#8243;);<br />
             table.addCell(&#8221;4.1&#8243;);<br />
             table.addCell(&#8221;4.2&#8243;);<br />
             table.addCell(&#8221;4.3&#8243;);<br />
             table.addCell(&#8221;4.4&#8243;);<br />
             table.addCell(&#8221;5.1&#8243;);<br />
             cell = new PdfPCell(new Phrase(&#8221;Ancho 4 celdas&#8221;));<br />
             cell.setHorizontalAlignment(Element.ALIGN_CENTER);<br />
             cell.setColspan(4);<br />
             table.addCell(cell);<br />
             document.add(table);<br />
             document.add(chunkSeparador);<br />
<span style="color: #00ff00;">         //FIN Ejemplos de TABLE<br />
      //**************************************************************   <br />
         //Ejemplos de IMAGE</span><br />
             titulo = new Chunk(IMAGE, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK));<br />
          document.add(titulo);<br />
       Image foto = Image.getInstance(&#8221;resources/ferrari.jpg&#8221;);<br />
       foto.scaleToFit(100, 100);<br />
       foto.setAlignment(Chunk.ALIGN_MIDDLE);<br />
       document.add(foto);<br />
<span style="color: #00ff00;">      //FIN Ejemplos de IMAGE      <br />
      //**************************************************************<br />
      // Cierre del documento</span><br />
         document.close();<br />
     } catch (Exception ex) {<br />
         System.out.println(ex.getMessage());<br />
     }<br />
    }<br />
   <br />
    static class HeaderFooter extends PdfPageEventHelper {</span></p>
<p><span style="color: #0000ff;">        public void onEndPage (PdfWriter writer, Document document) {<br />
            Rectangle rect = writer.getBoxSize(&#8221;art&#8221;);<br />
            //CABECERA<br />
            ColumnText.showTextAligned(writer.getDirectContent(),<br />
                    Element.ALIGN_RIGHT, new Phrase(&#8221;LaMandarinaMecanica&#8221;),<br />
                    rect.getRight(), rect.getTop(), 0);<br />
            //PIE<br />
            ColumnText.showTextAligned(writer.getDirectContent(),<br />
                    Element.ALIGN_CENTER, new Phrase(String.format(&#8221;page %d&#8221;, writer.getPageNumber())),<br />
                    (rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0);<br />
        }<br />
    }<br />
} </span></p></blockquote>
<p><strong><span style="text-decoration: underline;"> WEB:</span></strong></p>
<p>Si lo que necesitamos es generar documentos PDF dinamicamente que se le abran al usuario directamente al interactuar con una página web (pinchar botones, links…), podemos crear un servlet que reciba las peticiones de creacion de ficheros PDF</p>
<p><strong><span style="text-decoration: underline;">CÓDIGO:</span></strong></p>
<blockquote><p><span style="color: #0000ff;">import java.io.ByteArrayOutputStream;<br />
import java.io.IOException;<br />
import java.io.OutputStream;</span></p>
<p><span style="color: #0000ff;">import javax.servlet.ServletException;<br />
import javax.servlet.http.HttpServlet;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;</span></p>
<p><span style="color: #0000ff;">import com.itextpdf.text.Document;<br />
import com.itextpdf.text.DocumentException;<br />
import com.itextpdf.text.Paragraph;<br />
import com.itextpdf.text.pdf.PdfWriter;</span></p>
<p><span style="color: #0000ff;">public class Demo extends HttpServlet { </span></p>
<p><span style="color: #0000ff;"> public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
  doPost(request, response);<br />
 }<br />
 <br />
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{<br />
  <br />
<span style="color: #00ff00;">  /*GENERACION AL VUELO DE PDF*/<br />
</span>  try {<br />
            // Texto que va a ser añadido al PDF<br />
            String text = &#8220;Generacion al Vuelo de un PDF&#8221;;<br />
           <br />
          <span style="color: #00ff00;">  // Paso 1: Creamos el documento</span><br />
            Document document = new Document();<br />
<span style="color: #00ff00;">            // Paso 2: Creamos un ByteArrayOutputStream<br />
            // todo lo que se escriba en el documento<br />
            // se escribe tambien en el ByteArrayOutputStream</span><br />
            ByteArrayOutputStream baos = new ByteArrayOutputStream();<br />
            PdfWriter.getInstance(document, baos);<br />
    <span style="color: #00ff00;">        // Abrimos el documento</span><br />
            document.open();<br />
<span style="color: #00ff00;">            // Escribimos</span><br />
            document.add(new Paragraph(text));<br />
<span style="color: #00ff00;">            // Cerramos</span><br />
            document.close();<br />
           <br />
       <span style="color: #00ff00;">     // Hay que configurar las cabeceras para que<br />
            //el navegador detecte que es un PDF<br />
</span>            response.setHeader(&#8221;Expires&#8221;, &#8220;0&#8243;);<br />
            response.setHeader(&#8221;Cache-Control&#8221;,<br />
                &#8220;must-revalidate, post-check=0, pre-check=0&#8243;);<br />
            response.setHeader(&#8221;Pragma&#8221;, &#8220;public&#8221;);<br />
         <span style="color: #00ff00;">   // Configuramos el content type<br />
</span>            response.setContentType(&#8221;application/pdf&#8221;);<br />
            // Tamaño<br />
            response.setContentLength(baos.size());<br />
     <span style="color: #00ff00;">       // Esccribir el ByteArrayOutputStream a el ServletOutputStream<br />
</span>            OutputStream os = response.getOutputStream();<br />
            baos.writeTo(os);<br />
            os.flush();<br />
            os.close();<br />
        }<br />
        catch(com.itextpdf.text.DocumentException e) {<br />
            throw new IOException(e.getMessage());<br />
        }<br />
    }<br />
}</span></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/manipulacion-de-pdfs-con-java-mediante-itext/feed</wfw:commentRss>
		</item>
		<item>
		<title>Conectar JAVA con ORACLE</title>
		<link>http://lamandarinamecanica.es/conectar-java-con-oracle</link>
		<comments>http://lamandarinamecanica.es/conectar-java-con-oracle#comments</comments>
		<pubDate>Fri, 18 Jun 2010 09:51:31 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1568</guid>
		<description><![CDATA[Os dejo tres ejemplos para poder conectarnos desde Java con Oracle, con JDBC y ODBC.
JDBC es la interfaz que proporciona Java para la conexión a bases de datos. Son un conjunto de clases e interfaces que se utilizan para comunicarnos con la BD.
Para poder conectar Java con ORACLE lo primero que necesitamos es la implementación de JDBC para [...]]]></description>
			<content:encoded><![CDATA[<p>Os dejo tres ejemplos para poder conectarnos desde Java con Oracle, con <span style="color: #3366ff;">JDBC <span style="color: #000000;">y</span> ODBC</span>.<br />
JDBC es la interfaz que proporciona Java para la conexión a bases de datos. Son un conjunto de clases e interfaces que se utilizan para comunicarnos con la BD.<br />
Para poder conectar Java con <span style="color: #3366ff;">ORACLE</span> lo primero que necesitamos es la implementación de JDBC para ORACLE. Esta implementación se encuentra en el archivo <span style="color: #3366ff;">Classes12.jar</span> que podemos encontrar en el siguiente directorio del servidor de Oracle.<br />
%ORACLE_HOME%\jdbc\lib<br />
Necesitamos añadir el controlador en el <span style="color: #3366ff;">Classpath</span>, o incluirlo como .jar.</p>
<p><strong>Conectando con Oracle por JDBC (THIN y OCI).<br />
</strong>Tenemos dos tipos de conexión JDBC, Thin y OCI ,<br />
Para utilizar Thin necesitamos saber el host, el puerto, y el SID de la BBDD.</p>
<blockquote><p>public void classcon3(){           <br />
  try { <br />
          Class.forName(&#8221;oracle.jdbc.driver.OracleDriver&#8221;);<br />
  } catch (ClassNotFoundException ex) {            <br />
        ex.printStackTrace();                <br />
  }<br />
}             <br />
public void classcadena3(){                      <br />
  try{<br />
    String urll;<br />
    urll = &#8220;jdbc:oracle:thin:@nombre_host:1521:SID_10G&#8221;;<br />
Connection conexion=DriverManager.getConnection(urll,&#8221;user90&#8243;,&#8221;pass90&#8243;);<br />
Statement stmt = conexion.createStatement();              <br />
ResultSet rset = stmt.executeQuery(&#8221;select * from errores&#8221;);</p>
<p>while(rset.next()){                <br />
System.out.println(rset.getString(2) );<br />
}<br />
} catch(SQLException s){                         <br />
s.printStackTrace();  <br />
} }</p></blockquote>
<p>Para utilizar OCI tenemos que tener instalado <span style="color: #3366ff;">Oracle 10g client</span>, usaremos el 10g driver para hacer la conexión. Con OCI solo necesitaremos saber el nombre de la BBDD para conectar.</p>
<p><span id="more-1568"></span></p>
<blockquote><p>public void classcon2(){           <br />
 try {                                     <br />
   Class.forName(&#8221;oracle.jdbc.driver.OracleDriver&#8221;);       <br />
   } catch (ClassNotFoundException ex) {            <br />
   ex.printStackTrace();                <br />
   }  }             <br />
public void classcadena2(){                      <br />
 try{<br />
   String urll;<br />
   urll = &#8220;jdbc:oracle:oci:@nombre_host:&#8221;;<br />
   Connection conexion = DriverManager.getConnection(&#8221;jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=nombre_host)(PORT=1521))(CONNECT_DATA=(SID=SID_10G)))&#8221;, &#8220;user90&#8243;, &#8220;pass90&#8243;);<br />
  Statement stmt = conexion.createStatement();              <br />
  ResultSet rset = stmt.executeQuery(&#8221;select * from errores&#8221;);</p>
<p>  while(rset.next()){                <br />
  System.out.println(rset.getString(2) );<br />
  }<br />
  } catch(SQLException s){                         <br />
  s.printStackTrace();  <br />
 } }</p></blockquote>
<p><strong>Conectando con Oracle por ODBC.<br />
</strong>Oracle, nos proporciona un ODBC driver que podemos usar para conectarnos desde una máquina Windows, necesitamos tener instalado un ODBC driver y configurarlo antes de conectar.</p>
<blockquote><p>public void classcon(){  <br />
 try {                 <br />
     Class.forName(&#8221;sun.jdbc.odbc.JdbcOdbcDriver&#8221;);<br />
  } catch (ClassNotFoundException ex) { <br />
     ex.printStackTrace();     <br />
  }   }    <br />
public void classcadena(){         <br />
  try{  <br />
    String urll;<br />
    String pass;<br />
    String nom;<br />
   <br />
urll = &#8220;jdbc:odbc:prueba&#8221;;       //:@nombre_host_ned10g:1521:SID_10G&#8221;; <br />
pass=&#8221;psword&#8221;; <br />
nom=&#8221;nombre&#8221;;<br />
Connection conexion = DriverManager.getConnection(urll,nom,pass);        <br />
Statement stmt = conexion.createStatement();   <br />
ResultSet rset = stmt.executeQuery(&#8221;select * from errores&#8221;);</p>
<p>   while(rset.next()){ <br />
      System.out.println(rset.getString(2) );<br />
   }      <br />
} catch(SQLException s){      <br />
    s.printStackTrace(); <br />
}   }</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/conectar-java-con-oracle/feed</wfw:commentRss>
		</item>
		<item>
		<title>Realidad aumentada en el tenis</title>
		<link>http://lamandarinamecanica.es/realidad-aumentada-en-el-tenis</link>
		<comments>http://lamandarinamecanica.es/realidad-aumentada-en-el-tenis#comments</comments>
		<pubDate>Thu, 17 Jun 2010 12:48:33 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1563</guid>
		<description><![CDATA[Ya hemos hablado varias veces de la realidad aumentada en este blog, pero hasta ahora poco más se ha podido decir aparte de futuros proyectos, o en todo caso, pocos proyectos palpables. En este caso hablaremos de una aplicación de IBM, Seer, que la compañía a tenido a bien actualizarla para utilizarla en el torneo [...]]]></description>
			<content:encoded><![CDATA[<p>Ya hemos hablado varias veces de la <a href="http://lamandarinamecanica.es/?s=realidad+aumentada&amp;submit=Encontrar#">realidad aumentada en este blog</a>, pero hasta ahora poco más se ha podido decir aparte de futuros proyectos, o en todo caso, pocos proyectos palpables. En este caso hablaremos de una <a href="http://www.pocket-lint.com/news/33718/ibm-updates-seer-app-wimbledon">aplicación de IBM</a>, Seer, que la compañía a tenido a bien actualizarla para utilizarla en el torneo de Wimbledon.</p>
<p><img class="alignnone" src="http://www.pocket-lint.com/images/vp5w/ibm-updates-seer-app-wimbledon-3.jpg" alt="" width="615" height="411" /></p>
<p>La aplicación en sí es una mezcla de realidad aumentada, video y datos en tiempo real. La aplicación permite, apuntando con la cámara a un recinto, reconocer el lugar y sugerir restaurantes, baños públicos, puntos de información, cafeterías, etc. De manera que con esta aplicación podremos tener acceso a todo eso, y lo que es más interesante en el caso del torneo, a las distintas pistas donde se estén jugando los partidos e información en tiempo real, como los jugadores y el resultado, pudiendo incluso ver videos de dicho partido por streaming. No puede faltar también conexión con Twitter para estar conectados con dicha red.</p>
<p><a href="http://lamandarinamecanica.es/realidad-aumentada-en-el-tenis"><p><em>Click here to view the embedded video.</em></p></a></p>
<p>Esta aplicación es gratuita, y está disponible para los sistemas operativos iOS (iPhone) y Android.</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/realidad-aumentada-en-el-tenis/feed</wfw:commentRss>
		</item>
		<item>
		<title>Humor Geek</title>
		<link>http://lamandarinamecanica.es/humor-geek-7</link>
		<comments>http://lamandarinamecanica.es/humor-geek-7#comments</comments>
		<pubDate>Wed, 16 Jun 2010 12:54:50 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1558</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://lamandarinamecanica.es/wp-content/uploads/2010/06/timebreakdown.gif"><img class="aligncenter size-full wp-image-1559" title="tiempo en internet" src="http://lamandarinamecanica.es/wp-content/uploads/2010/06/timebreakdown.gif" alt="tiempo en internet" width="476" height="381" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/humor-geek-7/feed</wfw:commentRss>
		</item>
		<item>
		<title>iPhone 4</title>
		<link>http://lamandarinamecanica.es/iphone-4</link>
		<comments>http://lamandarinamecanica.es/iphone-4#comments</comments>
		<pubDate>Tue, 08 Jun 2010 11:32:26 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1554</guid>
		<description><![CDATA[Habemus iPhone nuevo (aunque Gizmodo ya chafó la sorpresa hace tiempo, gracias a un ¿descuido?). Éste es el nuevo aspecto del iPhone:

Como vemos el diseño se acerca bastante a un HTC Hero, por ejemplo, y por fin dispondremos de una cámara delantera para videoconferencia. Ya se disponen de las características técnicas,entre las cuales cabe destacar:
- Pantalla [...]]]></description>
			<content:encoded><![CDATA[<p>Habemus iPhone nuevo (aunque Gizmodo ya <a href="http://gizmodo.com/5520164/this-is-apples-next-iphone" target="_blank">chafó la sorpresa</a> hace tiempo, gracias a un ¿descuido?). Éste es el nuevo aspecto del iPhone:</p>
<p><img class="alignnone" src="http://images.apple.com/es/iphone/images/specs_colors_20100607.jpg" alt="" width="241" height="184" /></p>
<p>Como vemos el diseño se acerca bastante a un HTC Hero, por ejemplo, y por fin dispondremos de una cámara delantera para videoconferencia. Ya se disponen de las características técnicas,entre las cuales cabe destacar:</p>
<p>- Pantalla Retina: La nueva pantalla del iPhone posee 4 veces más píxeles que los anteriores modelos (960&#215;640) manteniendo las 3,5&#8243; de tamaño de pantalla, con lo que a simple vista no se podrían distinguir dichos píxeles. El resultado es imágenes mucho más nítidas. Además la carcasa es oleófoba, o lo que es lo mismo, antigrasa, para evitar las manchas de huellas dactilares.</p>
<p>- Cámara: Ahora el iPhone tendrá cámara de 5 mpx en su parte trasera acompañada de un flash LED, y en su parte delantera tendrá una cámara con resolución VGA.</p>
<p>- Grabación de video en HD: Podremos grabar video con una calidad de 720p hasta 30 fps, y con la aplicación iMovie podremos editar dichos videos y montar nuestra propia película.</p>
<p>- Multitarea: Apple ha conseguido una multitarea muy efectiva, haciendo que sea posible cambiar de una aplicación a otra sin sufrir apenas ralentizaciones.</p>
<p>En cuanto al Bluetooth, las especificaciones indican Bluetooth 2.1 + EDR, lo que parece mejorar el rendimiento de conexión con dispositivos y utilizar 5 veces menos energía. Pero seguramente seguirá sin poder usarse para intercambio de archivos.</p>
<p><span>Precios y Fechas de salida:</span></p>
<p>- 199$ el iPhone 4 de 16 GB.<br />
- 299$ el iPhone 4 de 32 GB.</p>
<p>El iPhone 4 estará disponible el 21 de Junio para Estados Unidos, Francia, Alemania, Reino Unido y Japón.</p>
<p>En Julio estará disponible en España, Australia, Belgica, Canadá, Dinamarca, Finlandia, Hong Kong, Irlanda, Italia, Luxemburgo, Holanda, Nueva Zelanda, Noruega, Singapur, Corea del sur, Suecia y Suiza.</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/iphone-4/feed</wfw:commentRss>
		</item>
		<item>
		<title>Obtener el código fuente desde un .class</title>
		<link>http://lamandarinamecanica.es/obtener-el-codigo-fuente-de-un-class</link>
		<comments>http://lamandarinamecanica.es/obtener-el-codigo-fuente-de-un-class#comments</comments>
		<pubDate>Fri, 04 Jun 2010 20:28:30 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1549</guid>
		<description><![CDATA[He encontrado esta herramienta (freeware), Java Decompiler, con la que puedes obtener el código fuente de un .class.
Soporta todos los ‘jdk’ desde 1.1.8 hasta 1.6.0, y es muy fácil de usar.
Esta es la página del Autor, desde la que os podéis bajar el JDecompiler.

]]></description>
			<content:encoded><![CDATA[<p>He encontrado esta herramienta (freeware), Java Decompiler, con la que puedes obtener el código fuente de un .class.<br />
Soporta todos los ‘jdk’ desde 1.1.8 hasta 1.6.0, y es muy fácil de usar.<br />
Esta es la página del Autor, desde la que os podéis bajar el <a title="JDecompiler" href="http://java.decompiler.free.fr/" target="_blank">JDecompiler.</a></p>
<p><a href="http://lamandarinamecanica.es/wp-content/uploads/2010/06/jdecompiler.jpg"><img class="aligncenter size-full wp-image-1550" title="jdecompiler" src="http://lamandarinamecanica.es/wp-content/uploads/2010/06/jdecompiler.jpg" alt="jdecompiler" width="499" height="266" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/obtener-el-codigo-fuente-de-un-class/feed</wfw:commentRss>
		</item>
		<item>
		<title>Creación de Índices SQL Server.</title>
		<link>http://lamandarinamecanica.es/creacion-de-indices-sql-server</link>
		<comments>http://lamandarinamecanica.es/creacion-de-indices-sql-server#comments</comments>
		<pubDate>Mon, 24 May 2010 19:37:11 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1544</guid>
		<description><![CDATA[1. Introducción
Un índice es un conjunto de páginas asociado a una tabla (o a una vista) que se utiliza para acelerar la recuperación de filas de la tabla o para exigir unicidad.
Se utilizan índices para señalar la ubicación de una fila en una página de datos en lugar de tener que recorre todas las páginas de [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #0000ff;">1. Introducción</span></p>
<p>Un índice es un conjunto de páginas asociado a una tabla (o a una vista) que se utiliza para acelerar la recuperación de filas de la tabla o para exigir unicidad.<br />
Se utilizan índices para señalar la ubicación de una fila en una página de datos en lugar de tener que recorre todas las páginas de datos de una tabla.<br />
Un índice contiene claves formadas a partir de una o más columnas de la tabla.</p>
<p><span style="color: #0000ff;">1.1 Acceso de SQL Server a los datos</span></p>
<p>Hay dos maneras de acceder a los datos:</p>
<p>Examinando todas las páginas de datos de una tabla, lo que se denomina recorrido de tabla.</p>
<p>1 Empieza por el principio de la tabla.<br />
2 Avanza de página en página por todas las filas de la tabla.<br />
3 Extrae las filas que cumplen los criterios de la consulta.</p>
<p>Utilizando índices. Cuando SQL Server utiliza un índice:</p>
<p>1 Recorre la estructura de árbol de índices para encontrar las filas solicitada por la consulta.<br />
2 Extrae únicamente las filas necesarias que cumplen los criterios de la consulta.</p>
<p><span style="color: #0000ff;">1.2 Índices agrupados.</span></p>
<p>Un índice agrupado ordena y almacena las filas de datos de la tabla según la clave del índice agrupado. El índice agrupado se implementa como un árbol.<br />
En un índice agrupado, los nodos raíz e intermedios contienen páginas de índice que incluyen filas de índice. Cada fila de índice contiene un valor de clave y un puntero a una página de nivel intermedio del árbol b o a una fila de datos en el nivel de hoja del índice.</p>
<p><span id="more-1544"></span></p>
<p>Sólo puede haber un índice agrupado por tabla.</p>
<p>Los índices agrupados son más eficaces cuando se utilizan en consultas que hacen 1o siguiente:<br />
Devuelven un intervalo de valores utilizando operadores como BETWEEN, &gt;, &gt; &lt; y &lt;=. Como los datos de la tabla se almacenan físicamente según el orden del índice, cuando se encuentra la fila con el primer valor utilizando el índice agrupado, se sabe con total seguridad que las filas con valores indizados subsiguientes están adyacentes físicamente.<br />
Devuelven datos ordenados utilizando la cláusula ORDER BY o GROUP BY.<br />
Un índice en las columnas especificadas en la cláusula ORDER BY o GROUP puede eliminar la necesidad de que el motor de base de datos ordene los dato~, puesto que las filas ya están ordenadas. Esto mejora el rendimiento de las consultas.<br />
Devuelven datos combinados mediante cláusulas JOIN; normalmente son columnas de clave externa.<br />
Devuelven conjuntos de resultados grandes.<br />
Los índices agrupados no son adecuados cuando:<br />
Los datos de las columnas indizadas cambian con frecuencia. Los cambios en un índice agrupado hacen que haya que mover toda la fila de datos porque el motor base de datos debe mantener los valores de datos de una fila ordenados físicamente.<br />
Cuando crea una restricción PRIMARY KEY en una tabla o se utiliza UNIQUE , se crea automáticamente un índice único en una columna (o en varias columnas). De forma predeterminada, este índice es agrupado, lo que significa que la tabla ya no se almacenará como un montón. Puede forzar que sea no agrupado si utiliza la opción NONCLUSTERED de la instrucción CREATE TABLE.</p>
<p><span style="color: #0000ff;">1.3 Montón.<br />
</span> <br />
Un montón es una tabla sin un índice agrupado. Las filas de datos no se almacenan en ningún orden concreto y no hay ningún orden específico para la secuencia de las páginas de datos. Las páginas de datos no están vinculadas en una lista vinculada.<br />
Utilizará un montón de forma predeterminada siempre que no defina un índice agrupado en una tabla.</p>
<p><span style="color: #0000ff;">1.4 Índice no agrupado.</span><br />
 <br />
Los índices no agrupados tienen la misma estructura de árbol b que los índices agrupados, excepto que las filas de datos de la tabla subyacente no se ordenan y se almacenan según sus claves no agrupadas. En el índice no agrupado, los datos y el índice se almacenan por separado, y el nivel de hoja del índice consta de páginas de índice en lugar de páginas de datos.<br />
Los índices no agrupados están diseñados para mejorar el rendimiento de las consultas utilizadas con frecuencia que no están cubiertas por un índice agrupado. Si su tabla ya tiene un índice agrupado y necesita indizar otra columna, la única opción que tiene es utilizar un índice no agrupado.</p>
<p>Cree los índices agrupados antes que los no agrupados. SQL Server vuelve a generar automáticamente los índices no agrupados existentes cuando:<br />
o Se quita un índice agrupado existente.<br />
o Se crea un índice agrupado.<br />
o Se modifican las columnas que definen el índice agrupado.<br />
Evite el uso de muchos índices no agrupados cuando la tabla se utilice en una aplicación de procesamiento de transacciones en línea (OLTP) o cuando se actualice con frecuencia. La existencia de muchos índices en una tabla afecta el rendimiento de las instrucciones INSERT, UPDATE y DELETE, ya que hay que actualizar todos los índices a medida que cambian los datos de la tabla</p>
<p><span style="color: #0000ff;"> 2. Índices únicos.</span></p>
<p>Un índice único es un índice que garantiza que todos los datos de una columna indizada son únicos y no contiene valores duplicados.<br />
Cuando existe un índice único, el motor de base de datos comprueba si hay valores duplicados cada vez que se agregan datos utilizando una operación de inserción.</p>
<p><span style="color: #0000ff;">2.1 Consideraciones para crear índices con varias columnas.<br />
</span> <br />
El rendimiento de las consultas mejora si se utilizan índices compuestos. Sin embargo, las claves amplias aumentan los requisitos de almacenamiento de un índice.</p>
<p>La cláusula WHERE de una consulta debe hacer referencia a la primera columna del índice compuesto para que el optimizador de consultas utilice el índice compuesto</p>
<p>Todas las columnas de un índice compuesto deben proceder de la misma tabla, excepto cuando se crea un índice en una vista, en cuyo caso deben proceder todas de la misma vista.</p>
<p><span style="color: #0000ff;">2.2 Índices con particiones.</span><br />
 <br />
De forma similar a las tablas con particiones, los índices con particiones son índices agrupados o no agrupados en los que las páginas de índice se separan horizontalmente en varias ubicaciones físicas basándose en un intervalo de valores de la columna de índice. Las ubicaciones físicas para las particiones son los grupos de archivos.<br />
Un índice cuyas particiones se han creado de la misma forma que su tabla se dice que está &#8220;alineado&#8221; con la tabla.</p>
<p><span style="color: #0000ff;">2.3 Opciones para incorporar espacio libre a los índices.</span></p>
<p>La opción FILLFACTOR le permite asignar un porcentaje (de 0 a 100) de espacio libre en las páginas de índice de nivel de hoja para reducir la división de páginas. Este porcentaje determina cuántas páginas de nivel de hoja se deben rellenar.</p>
<p>Utilizar un valor bajo de factor de relleno para los entornas de procesamiento de transacciones en línea (OLTP). Esto permite tener el máximo espacio para el crecimiento en aquellas tablas donde se insertan filas con frecuencia o donde se modifican valores de clave de índice con frecuencia.<br />
Utilizar un valor alto de factor de relleno para los entornas de procesamiento analítico en línea (OLAP).</p>
<p><span style="color: #0000ff;">3.  Optimización de índices.</span></p>
<p>La efectividad de los índices desempeña un papel importante en el rendimiento global para la base de datos. Por tanto, es importante asegurarse de que los índices se diseñan e implementan desde el principio de la forma más adecuada para sus aplicaciones. Una vez implementados los índices, debe mantenerlos para garantizar su rendimiento óptimo continuado. A medida que se agregan, modifican y eliminan datos de la base de datos, los índices se van fragmentando.</p>
<p><span style="color: #0000ff;">3.1 Fragmentación de índices.</span><br />
 <br />
La fragmentación de índices es el uso ineficiente de páginas dentro de un índice. La fragmentación se produce con el tiempo, a medida que se modifican datos.<br />
Hay dos tipos de fragmentación:<br />
Interna: Uso ineficiente de páginas dentro de un índice porque la cantidad de datos almacenados dentro de cada página es menor de lo que la página de datos puede contener.<br />
Externa: Uso ineficiente de las páginas dentro de un índice porque el orden lógico de las páginas es <span style="color: #000000;">erróneo.<br />
</span>Si el índice está fragmentado más del 30 % se recomienda que se vuelva a generar el índice (REBUILD), sino se recomienda reorganizarlo (REORGANIZE).</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/creacion-de-indices-sql-server/feed</wfw:commentRss>
		</item>
		<item>
		<title>ORA-12516: TNS:listener could not find available handler with matching protocol stack</title>
		<link>http://lamandarinamecanica.es/ora-12516-tnslistener-could-not-find-available-handler-with-matching-protocol-stack</link>
		<comments>http://lamandarinamecanica.es/ora-12516-tnslistener-could-not-find-available-handler-with-matching-protocol-stack#comments</comments>
		<pubDate>Mon, 17 May 2010 10:37:24 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1529</guid>
		<description><![CDATA[Este error de Oracle, traducido sería algo así:
TNS:el listener no ha encontrado ningún manejador disponible con una pila de protocolos coincidente
El otro día nos dió aquí al tratar de conectar a BBDD, y era porque estabamos cerca de alcanzar el número máximo de sesiones y procesos establecidos.
Si en máquina ejecutais cualquiera de estas dos líneas, [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES; mso-bidi-language: AR-SA;" lang="EN-US">Este error de Oracle, traducido sería algo así:</span></p>
<p><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES; mso-bidi-language: AR-SA;" lang="EN-US">TNS:el listener no ha encontrado ningún manejador disponible con una pila de protocolos coincidente</span></p>
<p><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES; mso-bidi-language: AR-SA;" lang="EN-US">El otro día nos dió aquí al tratar de conectar a BBDD, y era porque estabamos cerca de alcanzar el número máximo de sesiones y procesos establecidos.</span></p>
<p><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES; mso-bidi-language: AR-SA;" lang="EN-US">Si en máquina ejecutais cualquiera de estas dos líneas, os dará el número de conexiones que hay en ese momento:</span></p>
<blockquote><p><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES; mso-bidi-language: AR-SA;" lang="EN-US">ps -ef | grep oracleSID | grep -v grep | wc -l<br />
ps aux | grep oracleSID | grep -v grep | wc -l</span></p>
<p><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES; mso-bidi-language: AR-SA;" lang="EN-US">Teneís que poner oracle unido al SID de vuestra BBDD.</span></p></blockquote>
<div><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES; mso-bidi-language: AR-SA;" lang="EN-US">Luego os conectáis a BBDD para comprobar si estáis cerca del valor máximo de procesos y sesiones establecido:</span></div>
<div></div>
<p><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES; mso-bidi-language: AR-SA;" lang="EN-US"></p>
<blockquote><p>select NAME, DISPLAY_VALUE, DESCRIPTION from v$parameter where name in (&#8217;processes&#8217;,&#8217;sessions&#8217;);</p></blockquote>
<p>Si es así, lo podéis aumentar de esta manera:</p>
<blockquote><p>SQL&gt; alter system set processes=300 scope=spfile;<br />
SQL&gt; alter system set sessions=300 scope=spfile;</p></blockquote>
<p>Luego sólo queda tirar y levantar la BBDD (siempre que tengamos los permisos suficientes)</p>
<blockquote><p>SQL&gt; shutdown immediate;<br />
SQL&gt; startup;</p></blockquote>
<p>Claro que si no tenéis permisos hacer esto, siempre podéis &#8220;eliminar&#8221; conexiones. Si no sabéis como, echarle un ojo a otro post que hay por ahí publicado sobre esto. </p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/ora-12516-tnslistener-could-not-find-available-handler-with-matching-protocol-stack/feed</wfw:commentRss>
		</item>
		<item>
		<title>Incluir Bean en ORACLE forms</title>
		<link>http://lamandarinamecanica.es/incluir-bean-en-oracle-forms</link>
		<comments>http://lamandarinamecanica.es/incluir-bean-en-oracle-forms#comments</comments>
		<pubDate>Tue, 11 May 2010 12:46:54 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1523</guid>
		<description><![CDATA[Oracle Forms es un software para crear pantallas que interactúan con una base de datos (oracle), éste es un poco limitado, con lo que a veces necesitamos incluir Jbean dentro de nuestras aplicaciones. Para esto basta con hacer un .jar e incluir éste dentro de la pantalla o fmb.
Para integrar un java Bean en Oracle [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle Forms es un software para crear pantallas que interactúan con una base de datos (oracle), éste es un poco limitado, con lo que a veces necesitamos incluir Jbean dentro de nuestras aplicaciones. Para esto basta con hacer un .jar e incluir éste dentro de la pantalla o fmb.<br />
Para integrar un java Bean en Oracle Forms, necesitamos copiar el bean.jar dentro del directorio &lt;ORACLE_HOME&gt;/forms/java<br />
Luego editamos el archivo formsweb.cfg y añadimos el bean.jar.</p>
<blockquote><p># Forms applet archive setting for JInitiator<br />
archive_jini=f90all_jinit.jar, archivo.jar<br />
# Forms applet archive setting for Microsoft Internet Explorer native JVM<br />
archive_ie=f90all.cab, archivo.jar</p></blockquote>
<p>Añadimos el Bean en la pantalla y ponemos la ruta y el nombre del bean.jar en las propiedades del Bean, en Clases de implementación añadimos:<br />
oracle/forms/archivo (sin la extensión).</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/incluir-bean-en-oracle-forms/feed</wfw:commentRss>
		</item>
		<item>
		<title>Pantalla OLED extensible</title>
		<link>http://lamandarinamecanica.es/pantalla-oled-extensible</link>
		<comments>http://lamandarinamecanica.es/pantalla-oled-extensible#comments</comments>
		<pubDate>Mon, 26 Apr 2010 15:20:47 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1520</guid>
		<description><![CDATA[Las pantallas OLED se están haciendo poco a poco un hueco en el mercado, demostrando que son el futuro de las pantallas. Este concepto prueba que pueden dar mucho de si.

El concepto consiste en una pantalla de este material extensible, que hace que no solo extendamos la superficie, también podremos ajustar el ratio, de manera [...]]]></description>
			<content:encoded><![CDATA[<p>Las pantallas OLED se están haciendo poco a poco un hueco en el mercado, demostrando que son el futuro de las pantallas. Este concepto prueba que pueden dar mucho de si.</p>
<p><img class="aligncenter" src="http://www.gizmodo.es/wp-content/uploads/2009/02/oled1.jpg" alt="" width="600" height="302" /></p>
<p>El concepto consiste en una pantalla de este material extensible, que hace que no solo extendamos la superficie, también podremos ajustar el ratio, de manera que si queremos ver una película en formato 16:9, solo tendremos que extenderla, y si queremos ver algo en proporción 4:3 la encogeremos.</p>
<p>También incluye un mini proyector que hará posible proyectar elementos del escritorio enfrente de la pantalla.</p>
<p><img class="alignnone" src="http://www.gizmodo.es/wp-content/uploads/2009/02/oled2.jpg" alt="" width="502" height="492" /></p>
<p>Fuente: Gizmodo</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/pantalla-oled-extensible/feed</wfw:commentRss>
		</item>
		<item>
		<title>Adept quattro</title>
		<link>http://lamandarinamecanica.es/adept-quattro</link>
		<comments>http://lamandarinamecanica.es/adept-quattro#comments</comments>
		<pubDate>Mon, 26 Apr 2010 14:10:36 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1517</guid>
		<description><![CDATA[Adept quattro es el brazo robótico más rápido del mundo, capaz de llegar a los 300 ciclos por minuto:
]]></description>
			<content:encoded><![CDATA[<p>Adept quattro es el brazo robótico más rápido del mundo, capaz de llegar a los 300 ciclos por minuto:</p>
<p><a href="http://lamandarinamecanica.es/adept-quattro"><p><em>Click here to view the embedded video.</em></p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/adept-quattro/feed</wfw:commentRss>
		</item>
		<item>
		<title>Reflexión en Java</title>
		<link>http://lamandarinamecanica.es/reflexion-en-java</link>
		<comments>http://lamandarinamecanica.es/reflexion-en-java#comments</comments>
		<pubDate>Thu, 22 Apr 2010 15:23:29 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1509</guid>
		<description><![CDATA[Imagina que en función de un parámetro tuvieses que ejecutar una clase u otra, lo primero que se nos viene a la cabeza es hacer un IF-ELSE tantas veces como valores diferentes pueda tener el parametro y dentro de cada IF crear una instancia de la clase correspondiente, si por ejemplo el parámetro pudiese tomar [...]]]></description>
			<content:encoded><![CDATA[<p>Imagina que en función de un parámetro tuvieses que ejecutar una clase u otra, lo primero que se nos viene a la cabeza es hacer un IF-ELSE tantas veces como valores diferentes pueda tener el parametro y dentro de cada IF crear una instancia de la clase correspondiente, si por ejemplo el parámetro pudiese tomar 100 valores diferentes quedaría un IF inmenso y poco legible. <span style="color: #000000;"><strong>Ejemplo1 (con 5 tareas usando IF-ELSE):</strong></span><span id="more-1509"></span></p>
<blockquote><p><span style="color: #000000;"><strong>CLASE PPAL (testReflexion)</strong></span></p>
<p><span style="color: #000000;">import tareas.Tarea1;<br />
import tareas.Tarea2;<br />
import tareas.Tarea3;<br />
import tareas.Tarea4;<br />
import tareas.Tarea5;</span></p>
<p><span style="color: #000000;">public class testReflexion {</span></p>
<p><span style="color: #000000;"> public static void main(String[] args)<br />
 {<br />
  String tarea1 = &#8220;Tarea1&#8243;;<br />
  String tarea2 = &#8220;Tarea2&#8243;;<br />
  String tarea3 = &#8220;Tarea3&#8243;;<br />
  String tarea4 = &#8220;Tarea4&#8243;;<br />
  String tarea5 = &#8220;Tarea5&#8243;;<br />
  <br />
  //En este caso el supuesto parametro de entrada seria&#8211;&gt; &#8220;Tarea4&#8243;<br />
  String param = tarea4;<br />
  <br />
  if (param.compareTo(tarea1)==0)<br />
  {<br />
   Tarea1 t = new Tarea1();<br />
   t.ejecutarTarea();<br />
  }<br />
  else if (param.compareTo(tarea2)==0)<br />
  {<br />
   Tarea2 t = new Tarea2();<br />
   t.ejecutarTarea();<br />
  }<br />
  else if (param.compareTo(tarea3)==0)<br />
  {<br />
   Tarea3 t = new Tarea3();<br />
   t.ejecutarTarea();<br />
  }<br />
  else if (param.compareTo(tarea4)==0)<br />
  {<br />
   Tarea4 t = new Tarea4();<br />
   t.ejecutarTarea();<br />
  }<br />
  else if (param.compareTo(tarea5)==0)<br />
  {<br />
   Tarea5 t = new Tarea5();<br />
   t.ejecutarTarea();<br />
  }<br />
  //este else if sera tan grande como tareas diferentes se puedan ejecutar<br />
 }</span></p>
<p><span style="color: #000000;">}</span></p>
<p><strong> <span style="color: #000000;">CLASE TAREA (todas son iguales, sólo cambia el mensaje)</span></strong> </p>
<div><span style="color: #000000;">package tareas;</span></div>
<p><span style="color: #000000;">public class Tarea4 {<br />
 <br />
 String mensaje = &#8220;&#8221;;<br />
 <br />
 public Tarea4()<br />
 {<br />
  this.setMensaje(&#8221;Se ha ejecutado la tarea 4&#8243;);<br />
 }</p>
<p> public void ejecutarTarea()<br />
 {<br />
  System.out.println(mensaje);<br />
 }</p>
<p> public String getMensaje() {<br />
  return mensaje;<br />
 }</p>
<p> public void setMensaje(String mensaje) {<br />
  this.mensaje = mensaje;<br />
 }<br />
 <br />
}</p>
<p> </p>
<p> </p>
<p></span></p></blockquote>
<p> </p>
<p><span style="color: #000000;"> Java dispone de un mecanismo denominado reflexión por el cual a traves del nombre de una clase podemos obtener un objeto de dicha clase, crear una instancia de ella, obtener todas sus propiedades (publicas), obtener todos sus métodos (publicos)…</span></p>
<p> <span style="color: #000000;">Utilizando reflexión, si el parámetro que nos llega es el nombre de la clase, podemos obtener una instancia de la clase directamente, del mismo modo nos podrían pasar el método que queremos ejecutar, incluso los parámetros de entrada para ese método. <strong>Ejemplo2(usando Reflexion):</strong></span></p>
<p><span style="color: #000000;"><strong></strong></span> </p>
<blockquote><p><span style="color: #000000;"><strong>CLASE PPAL (testReflexion2)</strong></span></p>
<p><span style="color: #000000;">import java.lang.reflect.*;</span></p>
<p><span style="color: #000000;">public class testReflexion2 {<br />
 public static void main(String[] args)<br />
 {<br />
  String tarea1 = &#8220;Tarea1&#8243;;<br />
  String tarea2 = &#8220;Tarea2&#8243;;<br />
  String tarea3 = &#8220;Tarea3&#8243;;<br />
  String tarea4 = &#8220;Tarea4&#8243;;<br />
  String tarea5 = &#8220;Tarea5&#8243;;<br />
  <br />
  //En este caso el supuesto parametro de entrada seria&#8211;&gt; &#8220;Tarea4&#8243;<br />
  String param = tarea4;<br />
  <br />
  Class clase;<br />
  Object objeto;<br />
  Method ejecutarTarea;<br />
  <br />
  try<br />
  {<br />
   // Cargamos la clase a partir del nombre<br />
   //la ruta tienen que ser completa<br />
   clase = Class.forName(&#8221;tareas.&#8221;+tarea4);<br />
   try<br />
   {<br />
    // creamos la instancia de la clase<br />
    objeto = clase.newInstance();<br />
    <br />
    try<br />
    {<br />
     //obtenemos el metodo<br />
     ejecutarTarea = clase.getMethod(&#8221;ejecutarTarea&#8221;, null);<br />
     //ejecutamos el método<br />
     ejecutarTarea.invoke(objeto, null);<br />
    }<br />
    catch (NoSuchMethodException e)<br />
{<br />
     System.out.println(&#8221;Error al acceder al metodo. &#8221; + e);<br />
            } catch (InvocationTargetException e)<br />
{<br />
                 System.out.println(&#8221;Error al ejecutar el metodo. &#8221; + e);<br />
           }<br />
   }<br />
   catch (IllegalAccessException e)<br />
{<br />
    System.out.println(&#8221;Error al instanciar el objeto. &#8221; + e);   <br />
   }<br />
   catch (InstantiationException e)<br />
{<br />
            System.out.println(&#8221;No se ha encontrado la clase. &#8221; + e);<br />
       }<br />
      }<br />
  catch (ClassNotFoundException e)<br />
{<br />
   System.out.println(&#8221;Error al instanciar el objeto. &#8221; + e);   <br />
  }<br />
 }<br />
}</span></p></blockquote>
<p> </p>
<p><span style="color: #000000;">Podríamos delegar la creación de nuevos objetos a una clase factoria, de esta manera se hace transparente la creación de los objetos al programa principal.<strong>Ejemplo 3 (Usando Reflexión, Fatoria e Interface):</strong></span></p>
<blockquote><p><span style="color: #000000;"><strong>CLASE PPAL (testReflexion3)</strong></span></p>
<p><span style="color: #000000;">import tareas.InterfaceTarea;<br />
import factoria.Factoria;</span></p>
<p><span style="color: #000000;">public class testReflexion3 {<br />
 public static void main(String[] args)<br />
 {<br />
  String tarea1 = &#8220;Tarea1F&#8221;;<br />
  String tarea2 = &#8220;Tarea2F&#8221;;<br />
  String tarea3 = &#8220;Tarea3F&#8221;;<br />
  String tarea4 = &#8220;Tarea4F&#8221;;<br />
  String tarea5 = &#8220;Tarea5F&#8221;;<br />
  <br />
  //En este caso el supuesto parametro de entrada seria&#8211;&gt; &#8220;Tarea1F&#8221;<br />
  String param = tarea1;<br />
  Factoria f = new Factoria();<br />
  InterfaceTarea it = f.getTarea(param);<br />
  it.ejecutarTarea();<br />
  <br />
 }<br />
}</span></p>
<p><span style="color: #000000;"><strong>CLASE FACTORIA</strong></span></p>
<p><span style="color: #000000;">package factoria;</span></p>
<p><span style="color: #000000;">import java.lang.reflect.InvocationTargetException;<br />
import java.lang.reflect.Method;</span></p>
<p><span style="color: #000000;">import tareas.InterfaceTarea;</span></p>
<p><span style="color: #000000;">public class Factoria {</span></p>
<p><span style="color: #000000;"> public static InterfaceTarea getTarea( String tarea ) {<br />
  InterfaceTarea objeto = null;<br />
  Class clase = null;<br />
  try<br />
  {<br />
   clase = Class.forName(&#8221;tareas.&#8221;+tarea);<br />
   try<br />
   {<br />
    objeto = (InterfaceTarea)clase.newInstance();<br />
   }<br />
   catch (InstantiationException e) {<br />
          System.out.println(&#8221;No se ha encontrado la clase. &#8221; + e);<br />
      }<br />
   catch (IllegalAccessException e) {<br />
    System.out.println(&#8221;Error al instanciar el objeto. &#8221; + e);   <br />
   }<br />
  }<br />
  catch (ClassNotFoundException e) {<br />
   System.out.println(&#8221;Error al instanciar el objeto. &#8221; + e);   <br />
  }<br />
  return objeto;<br />
 }<br />
}</span></p>
<p><span style="color: #000000;"><strong>CLASE INTERFACETAREA</strong></span></p>
<p><span style="color: #000000;">package tareas;</span></p>
<p><span style="color: #000000;">public interface InterfaceTarea {<br />
 void ejecutarTarea();<br />
}</span></p>
<p><span style="color: #000000;"><strong>CLASE TAREA (adaptada a usar el interface)</strong></span></p>
<p><span style="color: #000000;">package tareas;</span></p>
<p><span style="color: #000000;">public class Tarea1F implements InterfaceTarea{<br />
 <br />
 String mensaje = &#8220;&#8221;;<br />
 <br />
 public Tarea1F()<br />
 {<br />
  this.setMensaje(&#8221;Se ha ejecutado la tarea 1&#8243;);<br />
 }</span></p>
<p><span style="color: #000000;"> public void ejecutarTarea()<br />
 {<br />
  System.out.println(mensaje);<br />
 }</span></p>
<p><span style="color: #000000;"> public String getMensaje() {<br />
  return mensaje;<br />
 }</span></p>
<p><span style="color: #000000;"> public void setMensaje(String mensaje) {<br />
  this.mensaje = mensaje;<br />
 }<br />
}</span></p>
<p> </p></blockquote>
<p><strong>Principales métodos de la API Reflection de JAVA:</strong></p>
<p><strong>java.lang.Class forName(String className):</strong> Carga una clase del classpath a partir de su nombre (nombre completo, con todos los paquetes. Si la clase no se puede cargar, porque no se encuentra en el classpath, se lanzará una java.lang.ClassNotFoundException.</p>
<p><strong>java.lang.reflect.Field getField(String name):</strong> Devuelve un campo público de la clase, a partir de su nombre. Si la clase no contiene ningún campo con ese nombre, se comprueban sus superclases recursivamente, y en caso de no encontrar finalmente el campo, se lanzará la excepcion java.lang.NoSuchFieldException.</p>
<p><strong>java.lang.reflect.Field[] getFields():</strong> Devuelve un array con todos los campos públicos de la clase, y de sus superclases.</p>
<p><strong>java.lang.reflect.Method getMethod(String name, Class[] parameterTypes):</strong> Devuelve un método público de la clase, a partir de su nombre, y de un array con las clases de los parámetros del método. Si la clase no contiene ningún método con ese nombre y esos parámtetros, se lanzará la excepcion java.lang.NoSuchMethodException.</p>
<p><strong>java.lang.reflect.Method[] getMethods():</strong> Devuelve un array con todos los métodos públicos de la clase, y de sus superclases.</p>
<p><strong>java.lang.Class[] getInterfaces():</strong> Devuelve un array con todos los interfaces que implementa la clase.</p>
<p><strong>public String getName():</strong> Devuelve el nombre del campo.</p>
<p><strong>public Class getType():</strong> Devuelve la clase del campo.</p>
<p><strong>public Object get(Object obj):</strong> Devuelve el valor del campo en un objeto.</p>
<p><strong>public void set(Object obj, Object value):</strong> Asigna un valor al campo en un objeto.</p>
<p><strong>public String getName():</strong> Devuelve el nombre del método.</p>
<p><strong>public Class[] getParameterTypes():</strong> Devuelve un array con las clases de los parámetros del método.</p>
<p><strong>public Class[] getExceptionTypes():</strong> Devuelve un array con las clases de las excepciones que puede lanzar el método.</p>
<p><strong>public Class getReturnType():</strong> Devuelve la clase del valor que devuelve el método.</p>
<p><strong>public Object invoke(Object obj, Object[] args):</strong> Ejecuta el método sobre un objeto, pasándole los parámetros necesarios, y devuelve su resultado.<br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/reflexion-en-java/feed</wfw:commentRss>
		</item>
		<item>
		<title>Tutorial Half Byte Loader para PSP</title>
		<link>http://lamandarinamecanica.es/tutorial-half-byte-loader-para-psp</link>
		<comments>http://lamandarinamecanica.es/tutorial-half-byte-loader-para-psp#comments</comments>
		<pubDate>Tue, 13 Apr 2010 14:14:36 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1504</guid>
		<description><![CDATA[Esto sirve para todas las PSPs existentes, tanto modelos como versiones. En este tutorial vamos a cargar un emulador de Megadrive, incluido en las descargas junto a algunas roms.
Lo primero es descargar estos dos archivos:
Parte 1: www.megaupload.com/?d=9QRVPB8H
Parte 2: www.megaupload.com/?d=WO4ZESU6
Después copia el contenido de los dos archivos en la raíz de tu MS (si te pregunta sobreescribir, dile [...]]]></description>
			<content:encoded><![CDATA[<p>Esto sirve para todas las PSPs existentes, tanto modelos como versiones. En este tutorial vamos a cargar un emulador de Megadrive, incluido en las descargas junto a algunas roms.</p>
<p>Lo primero es descargar estos dos archivos:</p>
<p>Parte 1: www.megaupload.com/?d=9QRVPB8H<br />
Parte 2: www.megaupload.com/?d=WO4ZESU6</p>
<p>Después copia el contenido de los dos archivos en la raíz de tu MS (si te pregunta sobreescribir, dile que sí), y ya estamos listos para usar el eloader. Para ejecutarlo tendremos que iniciar la demo de Patapon 2, y elegir continuar para cargar la partida salvada. Cuando salga una pantalla pidiendo que pulses cualquier botón, pulsa X. A continuación nos saldrá una pantalla de fondo azul, y pulsamos R. En este momento ya hemos cargado el EBOOT.PBP que está en la raíz de la Memory Stick (en este caso el emulador). Si quisiéramos usar otro homebrew, tendremos que copiar los archivos que contenga en la raíz de la tarjeta, y hacer el mismo método.</p>
<p>Para conseguir la última versión del eloader, <a href="http://www.megaupload.com/?d=M7FPRLI3" target="_blank">descarga este archivo</a> y copialo en la MS (sobreescribir).</p>
<p>Problemas que pueden surgir:</p>
<p>-Crash al cargar la aplicación, volved a intentarlo si eso pasa ya que muchas veces no sale al primer intento.</p>
<p>-Regreso al menú XMB. Si ocurre, volved a intentarlo.</p>
<p>-Problema mas común: el cambio radical entre los firmwares <span style="color: red;">5.XX</span> y <span style="color: red;">6.XX</span>, asi que a los usuarios con una firmware <span style="color: red;">6.XX</span> posiblemente no os funcionen muchas aplicaciones. Si es así, no os preocupeis, tarde o temprano saldrá alguna solución.</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/tutorial-half-byte-loader-para-psp/feed</wfw:commentRss>
		</item>
		<item>
		<title>Half Byte Loader para PSP</title>
		<link>http://lamandarinamecanica.es/half-byte-loader-para-psp</link>
		<comments>http://lamandarinamecanica.es/half-byte-loader-para-psp#comments</comments>
		<pubDate>Tue, 13 Apr 2010 07:13:26 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1501</guid>
		<description><![CDATA[Los poseedores de una PSP Go  o una PSP - 3000 están de enhorabuena. Los usuarios M0skit0,ab5000 y Wololo han creado el ELoader de nombre &#8220;Half Byte Loader&#8221;, utilizando un exploit encontrado en el savegame de la demo de Locoroco 2.  Como podeis ver es un ELoader, lo que implica que solo funciona en modo User, de [...]]]></description>
			<content:encoded><![CDATA[<p>Los poseedores de una PSP Go  o una PSP - 3000 están de enhorabuena. Los usuarios M0skit0,ab5000 y Wololo han creado el ELoader de nombre &#8220;Half Byte Loader&#8221;, utilizando un exploit encontrado en el savegame de la demo de Locoroco 2.  Como podeis ver es un ELoader, lo que implica que solo funciona en modo User, de manera que no podremos ejecutar backups de psx ni de psp, solo podremos ejecutar Homebrew, pero ya es un paso muy importante. Se sigue trabajando en ello, así que es cuestión de tiempo que se consiga llegar a ejecutar código en modo Kernel, y con ello crear un isoloader. De momento esta en fase BETA, por lo que es posible que vuestra PSP crashee, o se reinicie al menu XMB. También se ha detectado que para los firmwares 6.20 y 5.70 la compatibilidad no es del 100%, así que solo podría ejecutar aplicaciones pequeñas.</p>
<p><a href="http://lamandarinamecanica.es/half-byte-loader-para-psp"><p><em>Click here to view the embedded video.</em></p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/half-byte-loader-para-psp/feed</wfw:commentRss>
		</item>
		<item>
		<title>Testeando navegadores.</title>
		<link>http://lamandarinamecanica.es/testeando-navegadores</link>
		<comments>http://lamandarinamecanica.es/testeando-navegadores#comments</comments>
		<pubDate>Thu, 08 Apr 2010 21:27:58 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/testeando-navegadores</guid>
		<description><![CDATA[Interesante test que puede aclarar algunas dudas acerca del rendimiento de los diferentes navegadores.
¿Cúal es el navegador más rápido?. ¿Cúal se come más recursos?. ¿Cúal lee antes el DOM?. Rendimiento JavaScript, integración CSS&#8230;
Valoración global.

FUENTE  sixrevisions.com 
]]></description>
			<content:encoded><![CDATA[<p>Interesante test que puede aclarar algunas dudas acerca del rendimiento de los diferentes navegadores.</p>
<p>¿Cúal es el navegador más rápido?. ¿Cúal se come más recursos?. ¿Cúal lee antes el DOM?. Rendimiento JavaScript, integración CSS&#8230;</p>
<p style="text-align: center;"><a href="http://sixrevisions.com/infographs/browser-performance/">Valoración global.</a></p>
<p style="text-align: center;"><a href="http://sixrevisions.com/infographs/browser-performance/"><img class="aligncenter size-full wp-image-1492" title="comparar-navegadores" src="http://lamandarinamecanica.es/wp-content/uploads/2010/04/comparar-navegadores.jpg" alt="comparar-navegadores" width="457" height="222" /></a></p>
<p style="text-align: center;"><span style="text-decoration: underline;"><span style="color: #800080;"><a href="http://sixrevisions.com/infographs/browser-performance/">FUENTE  sixrevisions.com </a></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/testeando-navegadores/feed</wfw:commentRss>
		</item>
		<item>
		<title>UTL_FILE. TRABAJO CON FICHEROS</title>
		<link>http://lamandarinamecanica.es/utl_file-trabajo-con-ficheros</link>
		<comments>http://lamandarinamecanica.es/utl_file-trabajo-con-ficheros#comments</comments>
		<pubDate>Wed, 31 Mar 2010 10:13:42 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1463</guid>
		<description><![CDATA[Primero crearemos el directorio para trabajar. Tenéis que tener permisos para hacerlo:
create or replace directory DIR_TEST as &#8216;/usuarios/prueba&#8217;;
Si queréis borrarlo:
drop directory DIR_TEST;
Con esta select podréis ver todos los directorios creados:
select * from dba_directories;
OPERATIVA
Para trabajar con ficheros, es básico conocer la operativa de las dos operaciones más normalmente usadas.
ESCRITURA
1.     Declarar el descriptor
2.     Abrir el fichero con [...]]]></description>
			<content:encoded><![CDATA[<p>Primero crearemos el directorio para trabajar. Tenéis que tener permisos para hacerlo:<br />
<strong>create or replace directory DIR_TEST as &#8216;/usuarios/prueba&#8217;;</strong><br />
Si queréis borrarlo:<br />
<strong>drop directory DIR_TEST;</strong><br />
Con esta select podréis ver todos los directorios creados:<br />
<strong>select * from dba_directories;</strong></p>
<p>OPERATIVA<br />
Para trabajar con ficheros, es básico conocer la operativa de las dos operaciones más normalmente usadas.<br />
ESCRITURA<br />
1.     Declarar el descriptor<br />
2.     Abrir el fichero con FOPEN de modo escritura<br />
3.     Escribir los datos usando PUT, FPUT o PUT_LINE.<br />
4.     Cerrar fichero FCLOSE</p>
<p>LECTURA<br />
1.     Declarar el descriptor<br />
2.     Declarar variable para almacenar datos<br />
3.     Abrir el fichero con FOPEN de modo lectura.<br />
4.     Leer datos con GET_LINE<br />
5.     Cerrar fichero FCLOSE</p>
<p><span id="more-1463"></span>FUNCIONES</p>
<p><em><strong>1.    UTL_FILE.OPEN</strong></em></p>
<p>· Se utiliza para abrir un fichero en modo determinado.<br />
· Si es todo es correcto, devuelve un DESCRIPTOR diferente de NULL.<br />
· Sintaxis:<br />
Descriptor utl_file.file_type;<br />
Descriptor := UTL_FILE.FOPEN (‘Path’,’Nombre_Fichero’,’modo’);</p>
<p>El Descriptor debe ser una variable de tipo UTL_FILE.FILE_TYPE previamente declarada.<br />
PATH + Nombre Fichero. El Path debe existir.<br />
· Modo.<br />
      R: Lectura<br />
      W: Lectura y escritura en modo reemplazar. Si el fichero existe lo borra, sino lo crea<br />
      A: Lectura y escritura en modo añadir. Si el fichero no existe ? INVALID_OPERATION.</p>
<blockquote><p><strong>declare<br />
descriptor utl_file.file_type;<br />
fichero_cont varchar2(100);<br />
begin<br />
 descriptor := utl_file.fopen(&#8217;DIR_TEST&#8217;,'fichero_oracle.txt&#8217;,'w&#8217;);<br />
 fichero_cont := &#8216;Creando el nuevo fichero &#8216;;<br />
 utl_file.put_line(descriptor,fichero_cont);<br />
 utl_file.fclose(descriptor);<br />
end;<br />
/</strong></p></blockquote>
<p><em><strong>2. UTL_FILE.IS_OPEN</strong></em></p>
<p>Devuelve TRUE si el descriptor de fichero está aún abierto.<br />
Sintaxis:<br />
auxiliar Boolean;<br />
auxiliar := UTL_FILE.IS_OPEN(Descriptor);</p>
<p><strong><em>3. UTL_FILE.GET_LINE</em></strong></p>
<p>Lee una línea de DATOS del fichero especificado.<br />
Se necesita una variable de salida (buffer_salida) lo suficientemente largo para almacenar todos los datos hasta el retorno de carro ( no incluido en buffer).<br />
Sintaxis:</p>
<p>buffer_salida varchar2(2000); !! Tiene que ser mayor que cualquier línea de nuestro fichero.<br />
UTL_FILE.GET_LINE(‘Descriptor’,buffer_salida); </p>
<p><strong><em>4. UTL_FILE.FCLOSE/FCLOSE_ALL</em></strong></p>
<p>Se utiliza para el fichero abierto y asignado a ese descriptor.<br />
Con FCLOSE_ALL se cierran todos los ficheros que estén en ese momento abiertos.<br />
Si un programa acaba y existen ficheros abiertos, puede afectar al contenido de estos archivos.<br />
Sintaxis:<br />
UTL_FILE.FCLOSE(‘Descriptor’);<br />
UTL_FILE.FCLOSE_ALL;</p>
<blockquote><p><strong>declare<br />
descriptor utl_file.file_type;<br />
salida varchar2(100);<br />
fichero_cont varchar2(100);<br />
auxiliar Boolean;<br />
begin<br />
       descriptor := utl_file.fopen(&#8217;DIR_TEST&#8217;,'fichero_oracle.txt&#8217;,'r&#8217;);<br />
       utl_file.get_line(descriptor,salida);<br />
       dbms_output.put_line(&#8217; Contenido del fichero: &#8216; || salida);<br />
       auxiliar := UTL_FILE.IS_OPEN(descriptor);<br />
       if auxiliar = TRUE then<br />
         dbms_output.put_line(&#8217; El fichero esta abierto &#8216;);<br />
       else<br />
         dbms_output.put_line(&#8217; El fichero esta cerrado &#8216;);<br />
       end if;<br />
       UTL_FILE.FCLOSE(descriptor);</strong> /* Para cerrar el fichero */<br />
<strong>end;<br />
/</strong></p>
<p class="MsoNormalCxSpFirst" style="margin: 0cm 0cm 0pt 18pt; line-height: normal; mso-add-space: auto; mso-pagination: none; mso-layout-grid-align: none;"><span style="font-size: 9pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Devolverá:</span></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 18pt; line-height: normal; mso-add-space: auto; mso-pagination: none; mso-layout-grid-align: none;"><span style="font-size: 9pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"> </span></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 18pt; line-height: normal; mso-add-space: auto; mso-pagination: none; mso-layout-grid-align: none;"><span style="font-size: 9pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Contenido del fichero: Añadiendo al nuevo fichero</span></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 18pt; line-height: normal; mso-add-space: auto; mso-pagination: none; mso-layout-grid-align: none;"><span style="font-size: 9pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">El fichero esta abierto</span></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 18pt; line-height: normal; mso-add-space: auto; mso-pagination: none; mso-layout-grid-align: none;"><strong> </strong></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 18pt; line-height: normal; mso-add-space: auto; mso-pagination: none; mso-layout-grid-align: none;"><strong><span style="font-size: 9pt; background: yellow; color: black; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-highlight: yellow; mso-fareast-language: ES;">NO SE PUEDE LEER Y ESCRIBIR EN EL MISMO FICHERO A LA VEZ.</span></strong><strong><span style="font-size: 9pt; color: black; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-fareast-language: ES;"> </span></strong></p>
</blockquote>
<p><strong>5. UTL_FILE.PUT</strong></p>
<p>Se utiliza para escribir datos en un fichero.<br />
Los datos se añaden a continuación de donde están situados.<br />
No se añade el “ fin de línea “. Lo escribe a continuación de la última línea.<br />
Sintaxis:<br />
UTL_FILE.PUT(‘Descriptor’,buffer);</p>
<p><em><strong>6. UTL_FILE.NEW_LINE</strong></em></p>
<p>Se utiliza para añadir 1 o más saltos de línea al fichero.<br />
Si el número pasado el menos o igual a cero no ocurre nada.<br />
Sintaxis:<br />
UTL_FILE.NEW_LINE(‘Descriptor’,’Numero lineas’);</p>
<p><strong><em>7. UTL_FILE.PUT_LINE</em></strong></p>
<p>Se utiliza para escribir datos (caracteres, fechas, números en un fichero, añadiendo al final un salto de línea.<br />
Los datos se añaden a continuación de donde están situados.<br />
Sintaxis:<br />
UTL_FILE.PUT_LINE(‘Descriptor’,buffer);</p>
<p><strong><em>8. UTL_FILE.PUTF</em></strong></p>
<p>Se utiliza para escribir datos en un fichero con un formato determinado.<br />
Los operador utilizados son idénticos a los utilizados en el lenguaje C (%s, \n…);<br />
Sintaxis:<br />
UTL_FILE.PUTF (‘Descriptor, formato, arg1, arg2,…);</p>
<p><strong><em>9. UTL_FILE.FFLUSH</em></strong></p>
<p>Se utiliza para escribir físicamente todos los datos pendientes de escritura<br />
Todas las operaciones de escritura se hacen a través de buffers intermedios para rapidez del sistema.<br />
Sintaxis:<br />
UTL_FILE.FFLUSH(‘Descriptor’);</p>
<blockquote><p><strong>declare<br />
descriptor utl_file.file_type;<br />
datos_put varchar2(100);<br />
datos_put_line varchar2(100);<br />
auxiliar Boolean;<br />
begin<br />
descriptor := utl_file.fopen(&#8217;DIR_TEST&#8217;,'fichero_oracle.txt&#8217;,'w&#8217;);<br />
   loop<br />
       datos_put := &#8216;Esto es con el put&#8217;;<br />
       utl_file.put(descriptor,datos_put);   &#8211;</strong> Lo escribe todo seguido<br />
<strong>       datos_put := &#8216;Continuacion del put&#8217;;<br />
       utl_file.put(descriptor,datos_put);<br />
       datos_put_line := &#8216;  Esto es put_line&#8217;;<br />
       utl_file.put_line(descriptor,datos_put_line); <br />
       utl_file.new_line(descriptor,2);<br />
       datos_put_line := &#8216; Continuanos con el put_line&#8217;;<br />
       utl_file.put_line(descriptor,datos_put_line);<br />
    utl_file.fclose(descriptor);<br />
    exit;<br />
   end loop;<br />
end;<br />
/</strong></p></blockquote>
<p><strong>FUNCIONES NUEVAS A PARTIR DE ORACLE 10g</strong></p>
<p>- FCOPY. Copiar parte de un fichero a otro:</p>
<blockquote><p>BEGIN<br />
UTL_FILE.FCOPY (&#8217;C:\Ficheros&#8217;,'datos.txt&#8217;,<br />
               &#8216;C:\Ficheros&#8217;,'copia_datos.txt&#8217;,1,5); &#8212; Es por línea, si quiero que copie todo elimino los parámetros. El fichero segundo no hace falta que exista y si existe lo reemplaza<br />
end;<br />
/</p></blockquote>
<p>- FREMOVE. Borrar un fichero:</p>
<p>Si el último parámetro es TRUE y el fichero existe sobreescribe el fichero e ignora el error. Si existe y es FALSE da error. Si no existe no da error en ningún caso</p>
<blockquote><p>BEGIN<br />
 UTL_FILE.FREMOVE(&#8217;C:\Ficheros&#8217;,'prueba.txt&#8217;);<br />
END;<br />
/</p></blockquote>
<p>- FRENAME. Renombrar un fichero:</p>
<blockquote><p>BEGIN<br />
  UTL_FILE.FRENAME(&#8217;C:\Ficheros&#8217;,'datos.txt&#8217;,'C:\Ficheros&#8217;,'nuevos_datos.txt&#8217;,false);<br />
END;<br />
/</p></blockquote>
<p>- FGETPOS. Devuelve la posición en bytes donde nos encontramos:</p>
<blockquote><p>DECLARE<br />
v_datos varchar2(2000);<br />
GET_POS NUMBER;<br />
descriptor utl_file.file_type;<br />
BEGIN<br />
descriptor := utl_file.fopen(&#8217;c:\ficheros&#8217;,'datos.txt&#8217;,'r&#8217;);<br />
  &#8212; No hemos hecho nada : devuelve 0<br />
  GET_POS := UTL_FILE.FGETPOS (descriptor);<br />
  dbms_output.put_line(get_pos);<br />
 &#8211;Leemos una línea<br />
 utl_file.get_line(descriptor,v_datos);<br />
  GET_POS := UTL_FILE.FGETPOS (descriptor);<br />
  dbms_output.put_line(get_pos);<br />
utl_file.fclose(descriptor);<br />
end;<br />
/</p></blockquote>
<p>- Función FSEEK. Sirve para posicionarnos en un byte determinado:</p>
<blockquote><p>DECLARE<br />
v_datos varchar2(2000);</p>
<p>descriptor utl_file.file_type;<br />
BEGIN<br />
descriptor := utl_file.fopen(&#8217;c:\ficheros&#8217;,'datos.txt&#8217;,'r&#8217;);</p>
<p> &#8211;Nos posicionamos en el byte 16<br />
 utl_file.fseek(descriptor,16);<br />
 <br />
 &#8211; Leemos la línea<br />
 utl_file.get_line(descriptor,v_datos);</p>
<p> dbms_output.put_line(v_datos);</p>
<p>utl_file.fclose(descriptor);<br />
end;<br />
/</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/utl_file-trabajo-con-ficheros/feed</wfw:commentRss>
		</item>
		<item>
		<title>PAQUETE DBMS_METADATA</title>
		<link>http://lamandarinamecanica.es/paquete-dbms_metadata</link>
		<comments>http://lamandarinamecanica.es/paquete-dbms_metadata#comments</comments>
		<pubDate>Thu, 25 Mar 2010 16:25:32 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1449</guid>
		<description><![CDATA[Con este paquete podemos obtener el código DLL (sentencia de creación) de cualquier objeto de BBDD.
 
Con la función GET_DDL de este paquete, extraeremos la DLL. Su sintaxis es la siguiente:

 
DBMS_METADATA.GET_DDL (
object_type IN VARCHAR2,
name IN VARCHAR2,
schema IN VARCHAR2 DEFAULT NULL,
version IN VARCHAR2 DEFAULT &#8216;COMPATIBLE&#8217;,
model IN VARCHAR2 DEFAULT &#8216;ORACLE&#8217;,
transform IN VARCHAR2 DEFAULT &#8216;DDL&#8217;)
RETURN CLOB; 
 
 
Los parámetros que utiliza son:
1 [...]]]></description>
			<content:encoded><![CDATA[<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">Con este paquete podemos obtener el código DLL (sentencia de creación) de cualquier objeto de BBDD.</span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'"> </span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">Con la función GET_DDL de este paquete, extraeremos la DLL. Su sintaxis es la siguiente:</span></p>
<blockquote>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"> </p>
<div style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'">DBMS_METADATA.GET_DDL (<br />
object_type IN VARCHAR2,<br />
name IN VARCHAR2,<br />
schema IN VARCHAR2 DEFAULT NULL,<br />
version IN VARCHAR2 DEFAULT &#8216;COMPATIBLE&#8217;,<br />
model IN VARCHAR2 DEFAULT &#8216;ORACLE&#8217;,<br />
transform IN VARCHAR2 DEFAULT &#8216;DDL&#8217;)<br />
RETURN CLOB;</span> </div>
<p> </p></blockquote>
<p> </p>
<p style="MARGIN: 0cm 0cm 0pt 14.2pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">Los parámetros que utiliza son:</span></p>
<p style="MARGIN: 0cm 0cm 0pt 14.2pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">1 .Tipo de objeto (tabla, index, vista…)</span></p>
<p style="MARGIN: 0cm 0cm 0pt 14.2pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">2. Nombre del objeto</span></p>
<p style="MARGIN: 0cm 0cm 0pt 14.2pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">3. El esquema al que pertenece ( No es necesario)</span></p>
<p style="MARGIN: 0cm 0cm 0pt 14.2pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">4. Versión de servidor para la cual se extraerá el código. Establece un filtro que limita la extracción del metadata para objetos superiores la versión indicada, que nunca puede ser menos de la 9.2.0.</span></p>
<p style="MARGIN: 0cm 0cm 0pt 14.2pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">5. Model: Por ahora sólo ORACLE</span></p>
<p style="MARGIN: 0cm 0cm 0pt 14.2pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">6. Con este parámetro podemos indicar si el metadata lo devolverá en DDL o en XML</span></p>
<p style="MARGIN: 0cm 0cm 0pt 14.2pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'"> </span></p>
<blockquote><p> </p>
<p> </p>
<div></div>
<p><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto">SELECT dbms_metadata.get_ddl(&#8217;TABLE&#8217;, &#8216;PRUEBA&#8217;, &#8216;ORACLE&#8217;) from dual;</p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto">Devolvería:</p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-spacerun: yes">  </span>CREATE TABLE &#8220;ORACLE&#8221;.&#8221;PRUEBA&#8221;</span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-spacerun: yes">   </span>(<span style="mso-spacerun: yes">    </span>&#8220;NOMBRE&#8221; VARCHAR2(1)</span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-spacerun: yes">   </span>) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING</span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-spacerun: yes">  </span>STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645</span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-spacerun: yes">  </span>PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)</span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"><span style="mso-spacerun: yes">  </span></span><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">TABLESPACE &#8220;ORACLE4&#8243;</span></p>
<p> </p>
<p><span id="more-1449"></span></p>
<p> </p>
<p> </p>
<p></span></p></blockquote>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'">Podemos extraer el esquema entero o unas tablas específicas:</span></p>
<blockquote>
<p class="MsoPlainText" style="MARGIN: auto 0cm"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US">spool tablas.lst </span></p>
<p class="MsoPlainTextCxSpMiddle" style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US">SELECT DBMS_METADATA.GET_DDL(&#8217;TABLE&#8217;,u.table_name)<br />
   FROM USER_TABLES u </span></p>
<p class="MsoPlainTextCxSpLast" style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"> </p>
<div class="MsoPlainTextCxSpLast" style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US">WHERE table_name like &#8216;BP%&#8217;;</span></div>
<div><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US">spool off </span></div>
<div><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"> </span></div>
<p> </p>
<div><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"> </span></div>
<p> </p>
<div><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"> </span></div>
<p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN-US" lang="EN-US"> </p>
<p></span></p></blockquote>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 11.5pt; mso-ansi-language: EN-US" lang="EN-US"> </span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 11.5pt">Incluso podemos recuperar todo el esquema de la BBDD, con una sencilla sentencia:</span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 11.5pt"> </span></p>
<blockquote>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN" lang="EN">SELECT DBMS_METADATA.GET_DDL (OBJECT_TYPE, OBJECT_NAME, USER)<br />
FROM USER_OBJECTS</span></p></blockquote>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN" lang="EN"> </span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"> </span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'">Antes de realizar esto podemos cambiar algunos parámetros de metadata con el procecimiento SET_TRANSFORM_PARAM.</span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'"> </span></p>
<p style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt; mso-add-space: auto; mso-list: l0 level1 lfo1"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"><span style="mso-list: Ignore">-<span style="FONT: 7pt 'Times New Roman'">       </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'">Para evitar que el output salga formateado con líneas en blanco y sangrías, en todos los objetos:</span></p>
<blockquote><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN" lang="EN">dbms_metadata.<strong>set_transform_param</strong>(dbms_metadata.session_transform, ‘PRETTY’, false);</span></p></blockquote>
<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"><span style="mso-list: Ignore">-<span style="FONT: 7pt 'Times New Roman'">       </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'">Si queremos generar los atributos del segmento (storage attribute, tablespace&#8230;), storage y tablespace para las tablas y los índices de los objetos definidos. Por defecto son todos TRUE:</span></p>
<blockquote><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN" lang="EN">dbms_metadata.set_transform_param(dbms_metadata.session_transform, ‘SEGMENT_ATTRIBUTES’, true);<br />
dbms_metadata.set_transform_param(dbms_metadata.session_transform, ‘STORAGE’, true);<br />
dbms_metadata.set_transform_param(dbms_metadata.session_transform, ‘TABLESPACE’, true);</span></p></blockquote>
<p style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"><span style="mso-list: Ignore">-<span style="FONT: 7pt 'Times New Roman'">       </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'">Si se quiere evitar que las constrains (non-referential y referential) se incluyan en las sentencias DDL de las tablas. Por defecto es true : </span></p>
<blockquote>
<div><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN" lang="EN">dbms_metadata.set_transform_param(dbms_metadata.session_transform, ‘CONSTRAINTS’, false);<br />
dbms_metadata.set_transform_param(dbms_metadata.session_transform, ‘REF_CONSTRAINTS’, false);</span></div>
</blockquote>
<div><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"><span style="mso-list: Ignore">-<span style="FONT: 7pt 'Times New Roman'">       </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'">Si queremos que las constrains y los índices formen parte del create table, pondremos este parámetro como false, si preferimos tenerlos a parte dentro de un ALTER TABLE hay que ponerlo a TRUE.</span></div>
<blockquote><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Arial','sans-serif'; mso-ansi-language: EN" lang="EN">dbms_metadata.set_transform_param(dbms_metadata.session_transform, ‘CONSTRAINTS_AS_ALTER’, false);</span></p></blockquote>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 11.5pt"><strong>Para más información sobre estas opciones, aquí encontré una tabla que lo explica bastante bien.</strong></span></p>
<p style="MARGIN: 0cm 0cm 0pt; mso-add-space: auto"><span style="FONT-SIZE: 9pt; COLOR: #333333; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 11.5pt"><a href="http://www.myoracleguide.com/s/gen_schema.htm"><span style="color: #800080;"><strong>http://www.myoracleguide.com/s/gen_schema.htm</strong></span></a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/paquete-dbms_metadata/feed</wfw:commentRss>
		</item>
		<item>
		<title>DBMS_ERRLOG: DML ERROR LOGGING</title>
		<link>http://lamandarinamecanica.es/dml-error-logging-dbms_errlog</link>
		<comments>http://lamandarinamecanica.es/dml-error-logging-dbms_errlog#comments</comments>
		<pubDate>Thu, 25 Mar 2010 11:51:41 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1414</guid>
		<description><![CDATA[

Es una nueva funcionalidad, a partir de Oracle 10gR2, que nos permite ejecutar una sentencia DML completa y si en el transcurso de la ejecución, algún registro diera error, se insertará en una tabla de error para, posteriormente, poder corregirlo y volver a insertarlo, continuando con los siguientes registros.
Así no tendremos que ir controlando por [...]]]></description>
			<content:encoded><![CDATA[<div></div>
<p><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-bidi-font-size: 11.5pt;"></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Es una nueva funcionalidad, a partir de Oracle 10gR2, que nos permite ejecutar una sentencia DML completa y si en el transcurso de la ejecución, algún registro diera error, se insertará en una tabla de error para, posteriormente, poder corregirlo y volver a insertarlo, continuando con los siguientes registros.</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Así no tendremos que ir controlando por registro o por bloque de registros si se ha producido un error para realizar el commit.</span></p>
<p style="margin: 0cm 0cm 0pt;"> </p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Lo primero de todo. Ver si lo tenemos instalado:</span></p>
<blockquote>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"> </span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">SELECT OBJECT_NAME FROM ALL_OBJECTS</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-spacerun: yes;">      </span>WHERE OBJECT_NAME LIKE &#8216;%DBMS_%&#8217;</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-spacerun: yes;">          </span>AND OBJECT_TYPE = &#8216;PACKAGE&#8217; ORDER BY 1;</span></p>
</blockquote>
<p></span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Si creamos una tabla:</span></p>
<p> <span id="more-1414"></span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">create table PRUEBA (nombre varchar2(1));</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">E intentamos insertar en ella niveles del 1 al 10, el último registro nos dará error.</span></p>
<p style="margin: 0cm 0cm 0pt;"> </p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Insert into prueba <strong>select level from dual CONNECT BY level &lt;= 10</strong>;</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Esta sentencia nos dará una especie de for del 1 al 10.</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">ERROR at line 1:</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">ORA-12899: value too large for column &#8220;MANTE90&#8243;.&#8221;PRUEBA&#8221;.&#8221;NOMBRE&#8221; (actual: 2,</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">maximum: 1).</span></p>
<p style="margin: 0cm 0cm 0pt;"> </p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Y como vemos no se habrá creado ningún registro en la tabla.</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"> </span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">SQL&gt; select * from prueba;</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">no rows selected.</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"> </p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Ahora crearemos la tabla de errores:</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"> </p>
<blockquote>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"><strong>EXEC dbms_errlog.create_error_log(&#8217;PRUEBA&#8217;, &#8216;ERROR_PRUEBA&#8217;);</strong></span></p>
</blockquote>
<blockquote>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"> </span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES;">Nombre<span style="mso-spacerun: yes;">                                                </span>Nulo?<span style="mso-spacerun: yes;">    </span>Tipo<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
ORA_ERR_NUMBER$<span style="mso-spacerun: yes;">                         </span><span style="mso-spacerun: yes;">                  </span>NUMBER<br />
ORA_ERR_MESG$<span style="mso-spacerun: yes;">                                                </span>VARCHAR2(2000)<br />
ORA_ERR_ROWID$<span style="mso-spacerun: yes;">                                              </span>ROWID<br />
ORA_ERR_OPTYP$<span style="mso-spacerun: yes;">                                              </span>VARCHAR2(2)<br />
ORA_ERR_TAG$<span style="mso-spacerun: yes;">                                                   </span>VARCHAR2(2000)<br />
NOMBRE<span style="mso-spacerun: yes;">                                                         </span><span style="mso-spacerun: yes;">    </span><span style="mso-spacerun: yes;">   </span>VARCHAR2(4000)</span></p></blockquote>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES;">Cómo veis genera una columna por cada columna de la tabla a la que se asocia.</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES;">Bien, ahora vamos a insertar los registros otra vez.</span></p>
<blockquote>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: normal;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES;">INSERT INTO PRUEBA<br />
SELECT level  FROM dual<br />
CONNECT BY level &lt;= 10<br />
LOG ERRORS INTO ERROR_PRUEBA REJECT LIMIT UNLIMITED;  </span></p></blockquote>
<p> </p>
<p><span><span>Con esto insertaremos en la tabla PRUEBA 9 registros correctos y uno en la de error, ya que el tamaño superará lo establecido en la columna.</span></span><span> </span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">No es necesario introducir INTO…, se insertarán en la tabla asignada por defecto cuando creamos la tabla de error asociada.</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">La última parte de la sentencia es que inserta en la tabla de errores cuando la sentencia genera un error.</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Si ponemos REJECT LIMIT UNLIMITED Oracle insertará todo los registros erróneos en la tabla y continuará hasta que termine. </span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Podemos limitar cuanto queramos 10,100… Oracle terminará la ejecución cuando alcance ese número de errores.</span></p>
<div><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"> </span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"> </span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"> </span></div>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Hacemos una select de la tabla de errores:</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">SQL&gt;set lines 110<br />
SQL&gt; col num$ for 9999999 <br />
SQL&gt; col ora_err_mesg$ for a50<br />
SQL&gt; col ora_err_rowid$ for a25<br />
SQL&gt; col nombre for a5<br />
SQL&gt; select ora_err_number$ num$, ora_err_mesg$, ora_err_rowid$, nombre from ERROR_PRUEBA<br />
SQL&gt; /<br />
 </span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US"><br />
NUM$ ORA_ERR_MESG$                                      ORA_ERR_ROWID$            NOMBRE<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;    <br />
 12899 ORA-12899: value too large for column &#8220;???&#8221;.&#8221;                                      10 <br />
           PRUEBA&#8221;.&#8221;NOMBRE&#8221; (actual: 2, maximum: 1)<br />
</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"> </p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Veamos una explicación de los campos de esta tabla:</span></p>
<p style="margin: 0cm 0cm 0pt;">
<table class="MsoNormalTable" style="border-collapse: collapse; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid black; mso-border-insideh-themecolor: text1; mso-border-insidev: .5pt solid black; mso-border-insidev-themecolor: text1;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 118.8pt; padding-top: 0cm; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; border: black 1pt solid;" width="158" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">NOMBRE</span></p>
</td>
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #ece9d8; width: 228.35pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1;" width="304" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">DESCRIPCION</span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1;">
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 118.8pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1;" width="158" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">ORA_ERR_NUMBER$<span style="mso-spacerun: yes;">                         </span><span style="mso-spacerun: yes;">                  </span></span></p>
</td>
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #ece9d8; width: 228.35pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1;" width="304" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Error de Oracle</span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2;">
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 118.8pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1;" width="158" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">ORA_ERR_MESG$<span style="mso-spacerun: yes;">                                                </span></span></p>
</td>
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #ece9d8; width: 228.35pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1;" width="304" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Mensaje de Error</span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3;">
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 118.8pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1;" width="158" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">ORA_ERR_ROWID$<span style="mso-spacerun: yes;">                                              </span></span></p>
</td>
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #ece9d8; width: 228.35pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1;" width="304" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">ROWID. En el caso del insert estará vacía, pero puede resultar de utilidad si es un update, merge o un delete</span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4;">
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 118.8pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1;" width="158" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">ORA_ERR_OPTYP$<span style="mso-spacerun: yes;">                                              </span></span></p>
</td>
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #ece9d8; width: 228.35pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1;" width="304" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-bidi-font-weight: bold;">El tipo de operación realizada I=INSERT, U=UPDATE, D=DELETE</span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 5; mso-yfti-lastrow: yes;">
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1pt solid; width: 118.8pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1;" width="158" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">ORA_ERR_TAG$<span style="mso-spacerun: yes;">                                                   </span></span></p>
</td>
<td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: #ece9d8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #ece9d8; width: 228.35pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1;" width="304" valign="top">
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Etiqueta que podemos rellenar con información</span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"><span style="color: #000000;"><span style="mso-spacerun: yes;">      </span><br />
Podemos controlar el número de registro insertado en el campo en el campo </span><span style="color: #333333;">ORA_ERR_TAG$</span><span style="color: #000000;">, ya que al ser un Insert no tenemos el rowid, recordad que los campos creados en la tabla de errores son VARCHAR2.</span></span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"> </p>
<blockquote>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">FOR i in 1..100<br />
Loop<br />
INSERT …<br />
LOG ERRORS INTO ERROR_PRUEBA (‘Registro: &#8216; || to_char(i))<br />
    REJECT LIMIT 1;<br />
End loop;  </span></p></blockquote>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">C</span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">uando hemos realizado la inserción decidiremos si realizar un commit o un rollback.</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Si ejecutamos un rollback, los registros de la tabla de error no se perderán, hasta que no realicemos un trúncate de esa tabla.</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"> </p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Estas son los errores que podrán almacenarse en este tipo de tabla, los demás generarán un fallo y pararan la ejecución. </span></p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Value too large for column. </span></p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Constraint violations(NOT NULL, unique, referential, and check constraints).</span></p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Errores durante la ejecución de un trigger</span></p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Partition mapping errors</span></p>
<p class="MsoNormalCxSpFirst" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Type conversion errors arising from type conversion between a column in a subquery and the corresponding column of the table</span></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">A specific MERGE operation error (</span><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"><a href="http://download-east.oracle.com/docs/cd/B19306_01/server.102/b14219/e29250.htm#ORA-30926"><span style="mso-ansi-language: EN-US;" lang="EN-US">ORA-30926: Unable to get a stable set of rows</span></a></span><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">).</span></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; mso-add-space: auto;"> </p>
<blockquote>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;"><strong>Pero hay que tener en cuenta que no se puede utilizar con:</strong></span></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><strong><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial;"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">LONG, LOB o columnas de tipo objeto.</span></strong></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><strong><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Violated deferred constraints </span></strong></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><strong><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Any direct-path INSERT or MERGE operation that raises a unique constraint or index violation. </span></strong></p>
<p class="MsoNormalCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><strong><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Any UPDATE or MERGE operation that raises a unique constraint or index violation. </span></strong></p>
<p class="MsoNormalCxSpLast" style="margin: 0cm 0cm 0pt 36pt; text-indent: -18pt; mso-list: l0 level1 lfo1; mso-add-space: auto;"><strong><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-fareast-font-family: Arial; mso-ansi-language: EN-US;" lang="EN-US"><span style="mso-list: Ignore;">-<span style="font: 7pt &quot;Times New Roman&quot;;">       </span></span></span><span style="font-size: 9pt; color: #333333; line-height: 115%; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US">Violation of a constraint on a LONG, LOB, or object type column</span></strong></p>
</blockquote>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; mso-ansi-language: EN-US;" lang="EN-US"> </span> </p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">Más información sobre este paquete:</span></p>
<p style="margin: 0cm 0cm 0pt; mso-add-space: auto;"><span style="font-size: 9pt; color: #333333; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;">http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_errlog.htm#ARPLS680</span></p>
<p style="margin: 0cm 0cm 0pt;"> </p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/dml-error-logging-dbms_errlog/feed</wfw:commentRss>
		</item>
		<item>
		<title>General Motors y la realidad aumentada</title>
		<link>http://lamandarinamecanica.es/general-motors-y-la-realidad-aumentada</link>
		<comments>http://lamandarinamecanica.es/general-motors-y-la-realidad-aumentada#comments</comments>
		<pubDate>Thu, 25 Mar 2010 09:26:18 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1422</guid>
		<description><![CDATA[Ya hemos visto lo que se puede hacer con la realidad aumentada aplicada a los videojuegos. Ahora le toca el turno al mundo automovilístico.
El gigante americano General Motors está desarrollando una tecnología de realidad aumentada mediante cámaras instaladas en el vehículo, y por ejemplo, interpretaría los límites de la carretera y los &#8220;dibujaría&#8221; en el [...]]]></description>
			<content:encoded><![CDATA[<p>Ya hemos visto lo que se puede hacer con la realidad aumentada <a href="http://lamandarinamecanica.es/realidad-aumentada-en-los-videojuegos" target="_blank">aplicada a los videojuegos</a>. Ahora le toca el turno al mundo automovilístico.</p>
<p>El gigante americano <a href="http://es.wikipedia.org/wiki/General_Motors">General Motors</a> está desarrollando una tecnología de realidad aumentada mediante cámaras instaladas en el vehículo, y por ejemplo, interpretaría los límites de la carretera y los &#8220;dibujaría&#8221; en el parabrisas para ayudarnos con el trazado en casos de baja visibilidad, como  niebla, noche cerrada, etc.</p>
<p><a href="http://lamandarinamecanica.es/general-motors-y-la-realidad-aumentada"><p><em>Click here to view the embedded video.</em></p></a></p>
<p>Según las palabras de Thomas Seder, del departamento de investigación de General Motors:</p>
<blockquote><p>“<em>Imaginemos que conduces con niebla, podríamos usar las cámaras infrarrojas del vehículo para identificar dónde está el borde de la calzada y los láser para &#8216;pintar&#8217; el filo de la misma en la luna, para que el conductor sepa dónde se encuentra</em>&#8220;.</p></blockquote>
<p>El señor Seder también nos dice que serviría para detectar obstáculos en la calzada.</p>
<p>Por otro lado, están buscando la manera de implementarlo de la mejor manera posible, ya que la cantidad de información mostrada en la luna delantera puede llegar a despistar:</p>
<blockquote><p>“<em>Todavía estamos investigando mucho sobre los efectos cognitivos de este tipo de pantalla. Tenemos que mostrar el sistema de visión mejorada como una herramienta para </em><strong><em>aumentar la información al conductor y no para distraerlos</em></strong>”.</p></blockquote>
<p>Fuente: <a href="http://www.neoteo.com/realidad-aumentada-en-el-parabrisas.neo" target="_blank">neoteo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/general-motors-y-la-realidad-aumentada/feed</wfw:commentRss>
		</item>
		<item>
		<title>Simulador de conducción deportiva</title>
		<link>http://lamandarinamecanica.es/simulador-de-conduccion-deportiva</link>
		<comments>http://lamandarinamecanica.es/simulador-de-conduccion-deportiva#comments</comments>
		<pubDate>Mon, 22 Mar 2010 08:07:24 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1411</guid>
		<description><![CDATA[Su precio: 19000€. Yo creo que los vale. Más información en Motion Sim.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://lamandarinamecanica.es/simulador-de-conduccion-deportiva"><p><em>Click here to view the embedded video.</em></p></a></p>
<p>Su precio: 19000€. Yo creo que los vale. Más información en <a href="http://www.motion-sim.com/" target="_blank">Motion Sim</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/simulador-de-conduccion-deportiva/feed</wfw:commentRss>
		</item>
		<item>
		<title>Sentencia SGAE despues del cambio de Ley.</title>
		<link>http://lamandarinamecanica.es/sentencia-sgae-despues-del-cambio-de-ley</link>
		<comments>http://lamandarinamecanica.es/sentencia-sgae-despues-del-cambio-de-ley#comments</comments>
		<pubDate>Fri, 19 Mar 2010 10:11:25 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1400</guid>
		<description><![CDATA[De nuevo, la justicia española, vuelve a ponerse del lado de las redes P2P, la justicia reitera lo siguiente:
«Las redes P2P no vulneran derecho alguno protegido por la Ley de Propiedad Intelectual»
No es la primera sentencia en este sentido, pero si es la primera desde el cambio de Ley, incomprensiblemente el gobierno sigue apoyando a [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"><a href="http://lamandarinamecanica.es/wp-content/uploads/2010/03/sgae.jpg"><img class="alignleft size-full wp-image-1401" title="sgae" src="http://lamandarinamecanica.es/wp-content/uploads/2010/03/sgae.jpg" alt="sgae" width="141" height="137" /></a>De nuevo, la justicia española, vuelve a ponerse del lado de las redes P2P, la justicia reitera lo siguiente:</p>
<h3 class="MsoNormal" style="MARGIN: 0cm 0cm 10pt">«Las redes P2P no vulneran derecho alguno protegido por la Ley de Propiedad Intelectual»</h3>
<p class="MsoNormal" style="LINE-HEIGHT: 13.2pt; MARGIN: 0cm 0cm 10pt; mso-margin-bottom-alt: auto; mso-outline-level: 1">No es la primera sentencia<span style="mso-spacerun: yes"> </span>en este sentido, pero si es la primera desde el cambio de Ley, incomprensiblemente el gobierno sigue apoyando a la empresa (SGAE), en su intención de exprimirnos a todos cada vez que tarareamos una canción. Sería un buen momento para que el gobierno<span style="mso-spacerun: yes"> </span>retire la ley de Economía Sostenible de la <span style="color: #0000ff;">Disposición Final Primera</span>.</p>
<p class="MsoNormal" style="LINE-HEIGHT: 13.2pt; MARGIN: 0cm 0cm 10pt; mso-margin-bottom-alt: auto; mso-outline-level: 1">La pagina de intercambio de links de redes P2P es <span style="FONT-FAMILY: 'Georgia','serif'; COLOR: #333333; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: ES; mso-bidi-font-family: 'Times New Roman'"><a href="http://www.elrincondejesus.com/"><span style="COLOR: #00469b">El RincóndeJesús</span></a> donde podéis ver el enlace con la <a href="http://www.bufetalmeida.com/upload/file/sentenciaelrincondejesus.pdf"><strong><span style="COLOR: #00469b">sentencia</span></strong></a>.<a href="http://lamandarinamecanica.es/wp-content/uploads/2010/03/sgae.jpg"></a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/sentencia-sgae-despues-del-cambio-de-ley/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mesa de billar psicodélica</title>
		<link>http://lamandarinamecanica.es/mesa-de-billar-psicodelica</link>
		<comments>http://lamandarinamecanica.es/mesa-de-billar-psicodelica#comments</comments>
		<pubDate>Wed, 17 Mar 2010 15:49:31 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1396</guid>
		<description><![CDATA[Fuente: NeoTeo.com
]]></description>
			<content:encoded><![CDATA[<p><a href="http://lamandarinamecanica.es/mesa-de-billar-psicodelica"><p><em>Click here to view the embedded video.</em></p></a></p>
<p>Fuente: NeoTeo.com</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/mesa-de-billar-psicodelica/feed</wfw:commentRss>
		</item>
		<item>
		<title>Big table, como google almacena los datos.</title>
		<link>http://lamandarinamecanica.es/big-table-como-google-almacena-los-datos</link>
		<comments>http://lamandarinamecanica.es/big-table-como-google-almacena-los-datos#comments</comments>
		<pubDate>Thu, 04 Mar 2010 13:53:33 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1387</guid>
		<description><![CDATA[BigTable es el sistema que tiene la compañía de google para almacenar enormes cantidades de información de una forma semi-estructurada.
Bigtable lo desarrollo  google en 2004, este sistema almacena la información en tablas multidimensionales,  está basado en el Google File System (GFS) y diseñado para la gestión de los más de 20 millones de Gigabytes que [...]]]></description>
			<content:encoded><![CDATA[<p>BigTable es el sistema que tiene la compañía de google para almacenar enormes cantidades de información de una forma semi-estructurada.<br />
Bigtable lo desarrollo  google en 2004, este sistema almacena la información en tablas multidimensionales,  está basado en el Google File System (GFS) y diseñado para la gestión de los más de 20 millones de Gigabytes que mueve diariamente Google en sus servidores. Además, estas celdas disponen de versiones temporales de sus valores, con lo que se puede hacer un seguimiento de los valores que han tomado históricamente.<br />
BigTable  fue el modelo a seguir de  muchos  otros desarrolladores, de este modelo de datos surguieron otras implementaciones como HBase, Hypertable y Cassandra.<br />
Básicamente funciona ‘mejor ‘ porque está distribuido en miles de servidores.</p>
<p style="text-align: center;"><a href="http://lamandarinamecanica.es/wp-content/uploads/2010/03/dibujo.jpg"><img class="aligncenter size-full wp-image-1392" title="bigtable" src="http://lamandarinamecanica.es/wp-content/uploads/2010/03/dibujo.jpg" alt="bigtable" width="1460" height="503" /></a><br />
<span style="color: #000080;">“Las bases de datos relacionales, como pueden ser MySQL, PostgreSQL, Firebird u Oracle se diseñaron pensando que se ejecutaran  en una solo servidor con mucha potencia.<br />
Jamas se penso en la posibilidad de que estuviesen distribuidas en miles de servidores.<br />
Google creo Bigtable para que fuese, sobre todo, una base de datos en la que se almacenara una cantidad de información enorme, del orden de Peta bytes.”</span></p>
<p>Os dejo un enlace que encontré acerca de Bigtable en <a href="http://www.linux-magazine.es/issue/39/047-050_PythonLM39.pdf" target="_blank">Linux-magazine </a> donde detalla su funcionamiento…</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/big-table-como-google-almacena-los-datos/feed</wfw:commentRss>
		</item>
		<item>
		<title>Impresionante juego en 3D en NDSi</title>
		<link>http://lamandarinamecanica.es/1382</link>
		<comments>http://lamandarinamecanica.es/1382#comments</comments>
		<pubDate>Sun, 28 Feb 2010 21:47:48 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1382</guid>
		<description><![CDATA[Hace poco os hablamos de la realidad aumentada en videojuegos, y pusimos Invizimals para PSP como ejemplo. Nintendo no se ha hecho esperar, y ha presentado en NDSi un impresionante juego en reales 3D, Rittai Kakushi e Attakoreda. Mediante la tecnología Head Tracking, esto es, seguimiento de la cabeza que esta delante de la cámara, [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco os hablamos de la<a href="http://lamandarinamecanica.es/realidad-aumentada-en-los-videojuegos" target="_blank"> realidad aumentada en videojuegos</a>, y pusimos Invizimals para PSP como ejemplo. Nintendo no se ha hecho esperar, y ha presentado en NDSi un impresionante juego en reales 3D, <em><span class="description">Rittai Kakushi e Attakoreda. </span></em><span class="description">Mediante la tecnología Head Tracking, esto es, seguimiento de la cabeza que esta delante de la cámara, la imagen gira y nos muestra las imágenes como si estuviéramos mirando dentro de una caja, de manera que según la perspectiva podemos encontrar la solución al acertijo. El resultado es prometedor:</span></p>
<p><a href="http://lamandarinamecanica.es/1382"><p><em>Click here to view the embedded video.</em></p></a></p>
<p>De momento sólo estará disponible en la DSi Ware japonesa, esperemos que pronto esté en occidente.</p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/1382/feed</wfw:commentRss>
		</item>
		<item>
		<title>Compact Flash 5.0. ¿144 petabytes de capacidad?</title>
		<link>http://lamandarinamecanica.es/compact-flash-50-%c2%bf144-petabytes-de-capacidad</link>
		<comments>http://lamandarinamecanica.es/compact-flash-50-%c2%bf144-petabytes-de-capacidad#comments</comments>
		<pubDate>Thu, 25 Feb 2010 11:13:41 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1378</guid>
		<description><![CDATA[Las tarjetas CompactFlash son las más usadas por los fotógrafos profesionales, ya que en comparación con las SD (las más famosas hoy día), pueden tener más capacidad, y las fotografías en formato RAW ocupan mucho. De hecho, el estándar 4.1 de las CF admite hasta 137GigaBytes en una tarjeta, aunque actualmente están en el mercado [...]]]></description>
			<content:encoded><![CDATA[<p>Las tarjetas <a href="http://es.wikipedia.org/wiki/CompactFlash">CompactFlash</a> son las más usadas por los fotógrafos profesionales, ya que en comparación con las SD (las más famosas hoy día), pueden tener más capacidad, y las fotografías en formato RAW ocupan mucho. De hecho, el estándar 4.1 de las CF admite hasta 137GigaBytes en una tarjeta, aunque actualmente están en el mercado de 64GigaBytes.</p>
<p><img class="aligncenter" src="http://www.neoteo.com/Portals/0/imagenes/cache/A332x550y1000.jpg" alt="" width="550" height="412" /></p>
<p>La revisión 5.0 de este tipo de tarjetas propone, en teoría, una capacidad máxima de 144petabytes. Su equivalencia vendrían a ser <strong>144mil discos duros de 1TeraByte</strong>. Para ello, se incorporará un direccionamiento de 48bits, lo que anula la limitación de los 137GigaBytes. También se aplicarán los avances del <a href="http://www.zator.com/Hardware/H6_1.htm" target="_blank">estándar ATA</a>, y mejora en la transferencia de datos y la limpieza de espacio no utilizado.</p>
<p>Fuente: <a href="http://www.neoteo.com/compactflash-5-0-144-petabytes-de-capacidad.neo">neoteo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/compact-flash-50-%c2%bf144-petabytes-de-capacidad/feed</wfw:commentRss>
		</item>
		<item>
		<title>Humor Geek</title>
		<link>http://lamandarinamecanica.es/humor-geek-pc-menguante</link>
		<comments>http://lamandarinamecanica.es/humor-geek-pc-menguante#comments</comments>
		<pubDate>Thu, 18 Feb 2010 22:43:51 +0000</pubDate>
		<dc:creator></dc:creator>
		
		<guid isPermaLink="false">http://lamandarinamecanica.es/?p=1375</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://www.gizmodo.es/wp-content/uploads/2010/01/evocomp.jpg" alt="" width="493" height="700" /></p>
]]></content:encoded>
			<wfw:commentRss>http://lamandarinamecanica.es/humor-geek-pc-menguante/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
