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

<channel>
	<title>Linux, Java y programación &#187; busqueda</title>
	<atom:link href="http://casidiablo.net/tag/busqueda/feed/" rel="self" type="application/rss+xml" />
	<link>http://casidiablo.net</link>
	<description>Blog de Java, Programación y Linux</description>
	<lastBuildDate>Fri, 11 Nov 2011 05:41:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Busqueda Binaria &#8211; C Sharp</title>
		<link>http://casidiablo.net/ejemplo-localizacion-binaria-c-sharp/</link>
		<comments>http://casidiablo.net/ejemplo-localizacion-binaria-c-sharp/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 00:43:32 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[binaria]]></category>
		<category><![CDATA[busqueda]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2259</guid>
		<description><![CDATA[Hace unos dí­as y poní­a un ejemplo acerca de búsquedas lineales en arreglos, ésta vez hablaremos acerca de las búsquedas lineales, un método mucho más rápido para buscar elementos. ¿Cómo funciona este método? Para poder aplicar éste método de búsqueda es necesario que el arreglo esté ordenado; posteriormente, se aplica el siguiente algoritmo: se ubica [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fejemplo-localizacion-binaria-c-sharp%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Busqueda%20Binaria%20-%20C%20Sharp%22%20%7D);"></div>
<p style="text-align: justify;">Hace unos dí­as y poní­a un ejemplo acerca de <a href="http://casidiablo.net/buscar-elementos-dentro-array-csharp-metodo-lineal/">búsquedas lineales en arreglos</a>, ésta vez hablaremos acerca de las búsquedas lineales, un método mucho más rápido para buscar elementos.</p>
<p style="text-align: justify;"><em>¿Cómo funciona este método?</em> Para poder aplicar éste método de búsqueda <strong>es necesario que el arreglo esté ordenado</strong>; posteriormente, se aplica el siguiente algoritmo: se ubica el elemento de la mitad del arreglo, entonces, si el número que se está buscando dentro del arreglo es menor al número de la mitad, se busca el número de la mitad entre el inicio del y la mitad del mismo, y así­ hasta encontrar el elemento deseado.</p>
<p style="text-align: justify;">Por ejemplo, suponiendo que tenemos un  arreglo con los siguientes valores:</p>
<p style="text-align: justify;"><code>2, 4, 5 , 6, 8, 9, 10, 12, 24, 34, 46, 56, 60, 67, 78, 89, 90</code></p>
<p style="text-align: justify;">&#8230;y queremos buscar el valor 10; tenemos que, el elemento de la mitad contiene el valor 24. Puesto que 24 &gt; 10, buscamos el valor intermedio entre el principio del arreglo y la mitad del mismo, esto es 8. Puesto que 8 &lt; 10, buscamos el valor intermedio entre 8 y la mitad del arreglo (24), esto es 10. Así­, con tan solo 3 bucles, hemos conseguido el valor buscado.</p>
<p style="text-align: justify;">Vamos con el código del programa, que nos sacará de toda duda:</p>
<p style="text-align: center;"><img src="http://casidiablo.net/wordpress/wp-content/uploads/2008/11/busquedabinaria.png"  /></p>
<p><span id="more-2259"></span></p>
<pre class="brush: csharp; title: ; notranslate">using System;
using System.Drawing;
using System.Windows.Forms;
public class EjemploBusquedaBinaria : Form
{
  private Label labelSolicitar;
  private TextBox cajaEntrada;
  private Label labelResultado;
  private Label labelMostrar;
  private Label labelSalida;
  private Button botonBuscar;
  int[] a = { 0, 2, 4, 6, 8, 10, 12, 14, 16,
              18, 20, 22, 24, 26, 28 };
  public EjemploBusquedaBinaria(){
     InitializeComponent();
  }
  private void InitializeComponent() {
     this.labelMostrar = new Label();
     this.labelResultado = new Label();
     this.cajaEntrada = new TextBox();
     this.labelSolicitar = new Label();
     this.botonBuscar = new Button();
     this.labelSalida = new Label();
     this.SuspendLayout();
     //
     // labelMostrar
     //
     this.labelMostrar.Location = new System.Drawing.Point(261, 8);
     this.labelMostrar.Name = &quot;labelMostrar&quot;;
     this.labelMostrar.Size = new System.Drawing.Size(152, 20);
     this.labelMostrar.TabIndex = 3;
     //
     // labelResultado
     //
     this.labelResultado.Location = new System.Drawing.Point(213, 8);
     this.labelResultado.Name = &quot;labelResultado&quot;;
     this.labelResultado.Size = new System.Drawing.Size(50, 16);
     this.labelResultado.TabIndex = 2;
     this.labelResultado.Text = &quot;Resultado:&quot;;
     //
     // cajaEntrada
     //
     this.cajaEntrada.Location = new System.Drawing.Point(99, 8);
     this.cajaEntrada.Name = &quot;cajaEntrada&quot;;
     this.cajaEntrada.TabIndex = 1;
     this.cajaEntrada.Text = &quot;&quot;;
     //
     // labelSolicitar
     //
     this.labelSolicitar.Location = new System.Drawing.Point(27, 8);
     this.labelSolicitar.Name = &quot;labelSolicitar&quot;;
     this.labelSolicitar.Size = new System.Drawing.Size(56, 16);
     this.labelSolicitar.TabIndex = 0;
     this.labelSolicitar.Text = &quot;Digite el dato&quot;;
     //
     // botonBuscar
     //
     this.botonBuscar.Location = new System.Drawing.Point(152, 40);
     this.botonBuscar.Name = &quot;botonBuscar&quot;;
     this.botonBuscar.Size = new System.Drawing.Size(136, 24);
     this.botonBuscar.TabIndex = 5;
     this.botonBuscar.Text = &quot;Buscar dato&quot;;
     this.botonBuscar.Click += new System.EventHandler(this.botonBuscar_Click);
     //
     // labelSalida
     //
     this.labelSalida.Font = new System.Drawing.Font(&quot;Courier New&quot;, 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
     this.labelSalida.Location = new System.Drawing.Point(10, 80);
     this.labelSalida.Name = &quot;labelSalida&quot;;
     this.labelSalida.Size = new System.Drawing.Size(420, 72);
     this.labelSalida.TabIndex = 4;
     //
     // EjemploBusquedaBinaria
     //
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(440, 157);
     this.Controls.AddRange(new Control[] {
            this.botonBuscar,
            this.labelSalida,
            this.labelMostrar,
            this.labelResultado,
            this.cajaEntrada,
            this.labelSolicitar});
     this.Name = &quot;EjemploBusquedaBinaria&quot;;
     this.Text = &quot;Busqueda Binaria&quot;;
     this.ResumeLayout(false);
  }
  static void Main() {
     Application.Run( new EjemploBusquedaBinaria() );
  }
  private void botonBuscar_Click( object sender,
     System.EventArgs e )
  {
     int valorBuscar = Int32.Parse( cajaEntrada.Text );
     // iniciar los datos de salida
     labelSalida.Text = &quot;Portions of array searched\n&quot;;
     // realizar busqueda binaria
     int elemento = Buscar( a, valorBuscar );
     if ( elemento != -1 )
        labelMostrar.Text = &quot;Valor encontrado en indice &quot; +
           elemento;
     else
        labelMostrar.Text = &quot;Valor no encontrado&quot;;
  } // fin botonBuscar_Click
  // buscar mediante metodo binario
  public int Buscar( int[] array, int dato ) {
     int bajo = 0;
     int alto = array.Length - 1;
     int medio;
     while ( bajo &lt;= alto ) {
        medio = ( bajo + alto ) / 2;
        // el siguiente método nos muestra la porción del
        // arreglo donde se está llevando a cabo la busqueda
        // del dato en cada iteración del bucle
        construirSalida( a, bajo, medio, alto );
        if ( dato == array[ medio ] )   // si se encuentra el valor
           return medio;
        else if ( dato &lt; array[ medio ] )
           alto = medio - 1;   // buscar en la mitad más baja
        else
           bajo = medio + 1;   // buscar en la mitad más alta
     } // fin de la busqueda binaria
     return -1;  // dato no encontrado
  } // fin del metodo Buscar
  public void construirSalida(
     int[] array, int bajo, int mid, int alto ) {
     for ( int i = 0; i &lt; array.Length; i++ ) {
        if ( i &lt; bajo || i &gt; alto )
           labelSalida.Text += &quot;    &quot;;
        // marcar el elemento de la mitad en la salida
        else if ( i == mid )
           labelSalida.Text +=
              array[ i ].ToString( &quot;00&quot; ) + &quot;* &quot;;
        else
           labelSalida.Text +=
              array[ i ].ToString( &quot;00&quot; ) + &quot;  &quot;;
     }
     labelSalida.Text += &quot;\n&quot;;
  } // fin de construirSalida
} // fin de la clase EjemploBusquedaBinaria</pre>
<p><a class="tooltip descargacodigo" title="Búsqueda Binaria en C Sharp::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Busqueda+Binaria+C+Sharp">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/ejemplo-localizacion-binaria-c-sharp/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Autocompletar campo de búsquedas en WordPress usando AJAX</title>
		<link>http://casidiablo.net/autocompletar-busquedas-wordpress-usando-ajax/</link>
		<comments>http://casidiablo.net/autocompletar-busquedas-wordpress-usando-ajax/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 09:25:20 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[tips]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[autocompletación]]></category>
		<category><![CDATA[busqueda]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1926</guid>
		<description><![CDATA[El resultado del how-to que voy a describir es el siguiente: Lo muestro antes que nada para que veas de que estoy hablando, y si te interesa ya seguirás leyendo, sino pues te ahorras tiempo valioso. La mayor parte del tip lo he tomado de esta entrada (en inglés), aunque le he mejorado algunas cosas [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fautocompletar-busquedas-wordpress-usando-ajax%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Autocompletar%20campo%20de%20b%C3%BAsquedas%20en%20Wordpress%20usando%20AJAX%22%20%7D);"></div>
<p>El resultado del how-to que voy a describir es el siguiente:</p>
<p style="text-align: center;"><img style="border:solid 1px;" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/10/autocompletado.png" alt="autocompletado codigo" /></p>
<p style="text-align: justify;">Lo muestro antes que nada para que veas de que estoy hablando, y si te interesa ya seguirás leyendo, sino pues te ahorras tiempo valioso.</p>
<p style="text-align: justify;">La mayor parte del tip lo he tomado de <a href="http://hackwordpress.com/how-to-create-an-ajax-based-autocompleting-search-field-for-your-wordpress-theme/">esta entrada (en inglés)</a>, aunque le he mejorado algunas cosas que lo hacen mucho más eficiente. La idea, como dice el título, es implementar mediante AJAX un método de autocompletación de palabras cuando nuestros lectores deseen buscar algo. <strong><abbr class="tooltip" title="O sea que si no usas tags, no te va a servir">Todo esto basado en los tags que hayamos asignado a cada post</abbr></strong>.</p>
<p style="text-align: justify;">Necesitaremos entonces seguir estos sencillos 4 pasos:</p>
<p><span id="more-1926"></span></p>
<h3>1. Código PHP</h3>
<p style="text-align: justify;">Debes crear un archivo PHP (llámalo por ejemplo <em>ajax.php</em>), y lo pones en alguna parte de tu servidor (yo recomiendo: la carpeta de tu theme):</p>
<pre class="brush: php; title: ; notranslate">&lt;?php
if (isset($_POST['search']))
    $search = htmlentities($_POST['search']);
else
   $search ='';
$db = mysql_connect('localhost','usuario','password'); //Don't forget to change
mysql_select_db('nombre base de datos', $db);           //theses parameters
$arreglo = explode(' ', $search);
if($arreglo[count($arreglo)-1]==&quot;&quot; || $arreglo[count($arreglo)-1]==&quot; &quot;){
   mysql_close();
   die();
}
$sql = &quot;SELECT name from wp_terms WHERE name LIKE '%&quot;.$arreglo[count($arreglo)-1].&quot;%'&quot;;
$req = mysql_query($sql) or die();
echo '&lt;ul&gt;';
while ($data = mysql_fetch_array($req))
{
   echo '&lt;li&gt;&lt;a href=&quot;#&quot; onclick=&quot;selected(this.innerHTML);&quot;&gt;'.htmlentities($data['name']).'&lt;/a&gt;&lt;/li&gt;';
}
echo '&lt;/ul&gt;';
mysql_close();
?&gt;</pre>
<p style="text-align: justify;"><strong>No te olvides de modificar los datos de usuario y contraseña, así como el nombre de la base de datos</strong>. Este sencillo script se encargará de buscar en la base de datos los tags que coincidan con lo que el usuario está empezando a buscar.</p>
<h3>2. Código JavaScript</h3>
<p style="text-align: justify;">Luego, debes crear un archivo JavaScript (llámalo por ejemplo <em>buscar.js</em>), y ponerlo en alguna parte de tu servidor (yo recomiendo: la carpeta de tu theme):</p>
<pre class="brush: jscript; title: ; notranslate">var myAjax = ajax();
function ajax() {
   var ajax = null;
   if (window.XMLHttpRequest) {
      try {
         ajax = new XMLHttpRequest();
      }
      catch(e) {}
   }
   else if (window.ActiveXObject) {
      try {
         ajax = new ActiveXObject(&quot;Msxm12.XMLHTTP&quot;);
      }
      catch (e){
         try{
            ajax = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
         }
         catch (e) {}
      }
   }
   return ajax;
}
function request(str) {
   //Don't forget to modify the path according to your theme
   myAjax.open(&quot;POST&quot;, &quot;http://tusitio.com/wp-content/themes/TU_TEMA/ajax.php&quot;);
   myAjax.onreadystatechange = result;
   myAjax.setRequestHeader(&quot;Content-type&quot;, &quot;application/x-www-form-urlencoded&quot;);
   myAjax.send(&quot;search=&quot;+str);
}
function result() {
   if (myAjax.readyState == 4) {
      var liste = myAjax.responseText;
      var cible = document.getElementById('tag_update').innerHTML = liste;
      document.getElementById('tag_update').style.display = &quot;block&quot;;
   }
}
function selected(choice){
   var cible = document.getElementById('s');
      var posc = 0;
      for (var i=cible.value.length-1; i&gt;=0; i--)   {
         var caracter = cible.value[i];
         if (caracter==&quot; &quot;){
            posc = i+1;
            break;
         }
      }
   cible.value = cible.value.substring(0,posc)+&quot;&quot;+choice+&quot; &quot;;
      cible.focus();
   document.getElementById('tag_update').style.display = &quot;none&quot;;
}</pre>
<p style="text-align: justify;">Éste se compone de cuatro métodos:</p>
<ol>
<li><code>ajax()</code>, que creará el objeto XMLHTTPRequest.</li>
<li><code>request()</code>, que enviará las peticiones al archivo PHP.</li>
<li><code>return()</code>, que recuperará los datos que envíe el archivo PHP.</li>
<li><code>selected()</code>, que actualizará el campo de búsqueda.</li>
</ol>
<p style="text-align: justify;">Por supuesto debes cambiar el header de tu theme de tal manera que cargue este archivo javascript. Si creaste el archivo en la carperta de tu theme lo tienes fácil, simplemente deberás añadir lo siguiente en el archivo header.php:</p>
<pre class="brush: php; title: ; notranslate">&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo('stylesheet_directory'); ?&gt;/buscar.js&quot;&gt;&lt;/script&gt;</pre>
<p><strong>No olvides cambiar la ruta donde pusiste el archivo PHP</strong> (línea 25 del archivo <em>buscar.js</em>).</p>
<h3>3. Cambiando el theme</h3>
<p style="text-align: justify;">Ahora es cuando debes cambiar el formulario que tienes por defecto, por uno que implemente llamadas a las funciones javascript del paso anterior. Por lo general tendrás algo como esto:</p>
<pre class="brush: xml; title: ; notranslate">&lt;form method=&quot;get&quot; id=&quot;searchform&quot; action=&quot;&lt;?php bloginfo('url'); ?&gt;/&quot;&gt;
   &lt;div&gt;
      &lt;input type=&quot;text&quot; value=&quot;&lt;?php the_search_query(); ?&gt;&quot; name=&quot;s&quot; id=&quot;s&quot; /&gt;
      &lt;input type=&quot;submit&quot; id=&quot;searchsubmit&quot; value=&quot;Buscar&quot; /&gt;
   &lt;/div&gt;
&lt;/form&gt;</pre>
<p style="text-align: justify;">Lo cual debes cambiar por esto:</p>
<pre class="brush: xml; title: ; notranslate">&lt;form method=&quot;get&quot; id=&quot;searchform&quot; action=&quot;&lt;?php bloginfo('url'); ?&gt;/&quot;&gt;
    &lt;div&gt;
   &lt;input type=&quot;text&quot; value=&quot;&lt;?php the_search_query(); ?&gt;&quot; name=&quot;s&quot; id=&quot;s&quot; onkeyup=&quot;request(this.value);&quot;/&gt;
   &lt;input type=&quot;submit&quot; id=&quot;searchsubmit&quot; value=&quot;Buscar&quot; class=&quot;button&quot; /&gt;
    &lt;/div&gt;
    &lt;div id=&quot;tag_update&quot;&gt;&lt;/div&gt;
&lt;/form&gt;</pre>
<p style="text-align: justify;">Como puedes darte cuenta, se añaden esencialmente dos cosas:</p>
<ol>
<li>Una llamada al método <code>request()</code> cada vez que se presione una tecla en el campo de búsqueda.</li>
<li>Una capa &lt;div&gt; que contendrá las palabras claves sugeridas para la búsqueda</li>
</ol>
<h3>4. Añadiendo CSS</h3>
<p style="text-align: justify;">Por último deberás añadir lo siguiente al archivo style.css de tu plantilla:</p>
<p style="text-align: justify;">
<pre class="brush: css; title: ; notranslate">#tag_update {
   display: block;
   border-left: 1px solid #373737;
   border-right: 1px solid #373737;
   border-bottom: 1px solid #373737;
   position:absolute;
   z-index:1;
}
#tag_update ul {
   margin: 0;
   padding: 0;
   list-style: none;
}
#tag_update li{
   display:block;
   clear:both;
}
#tag_update a {
   width:134px;
   display: block;
   padding: .2em .3em;
   text-decoration: none;
   color: #fff;
   background-color: #1B1B1C;
   text-align: left;
}
#tag_update a:hover{
   color: #fff;
   background-color: #373737;
   background-image: none;
}</pre>
</p>
<p style="text-align: justify;">Esto decorará adecuadamente el cuadro donde aparecen las sugerencias.</p>
<h3>Créditos</h3>
<p>Por supuesto el 99% de los créditos es para la persona que diseñó el código AJAX y demás. Aunque cabe resaltar lo que añadí por mi cuenta:</p>
<ul>
<li>Las sugerencias se generan en base a la última palabra escrita, y cuando se selecciona NO borra todo el contenido del cuadro de búsqueda. Esto implicó cambios tanto en el archivo javascript como en el código PHP.</li>
<li>El cuadro de búsqueda es enfocado una vez se selecciona un palabra de las que son sugeridas</li>
</ul>
<p><a class="descargacodigo tooltip" title="Descarga el código fuente del ejemplo" href="http://casidiablo.net/descargar/Busqueda+Wordpress+AJAX">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/autocompletar-busquedas-wordpress-usando-ajax/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

