<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5569302871996483119</id><updated>2011-04-21T18:20:11.677-07:00</updated><category term='home banking'/><category term='resize'/><category term='eslomas'/><category term='yahoo'/><category term='javascript'/><category term='hotmail'/><category term='mover'/><category term='debilidad'/><category term='seguridad'/><category term='meter'/><category term='sobreimpreso'/><category term='jpg'/><category term='array'/><category term='drag'/><category term='autorizacion'/><category term='href'/><category term='video'/><category term='referer'/><category term='clave'/><category term='injection'/><category term='weakness'/><category term='pagerank'/><category term='arrastrar'/><category term='externo'/><category term='xml'/><category term='attack'/><category term='vinculo'/><category term='htpasswd'/><category term='login'/><category term='check'/><category term='php'/><category term='jpeg'/><category term='ajax'/><category term='security'/><category term='highlight'/><category term='target'/><category term='YouTube'/><category term='overlay'/><category term='resaltar'/><category term='generador'/><category term='thumbnail'/><category term='advertencia'/><category term='descarga'/><category term='webservice'/><category term='virtual keyboard'/><category term='copyright'/><category term='sql'/><category term='contraseña'/><category term='search'/><category term='htaccess'/><category term='parser'/><category term='sec'/><category term='encode'/><category term='gd'/><category term='fortaleza'/><category term='teclado virtual'/><category term='password'/><category term='google'/><title type='text'>tehwebmaster</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-3901429490785361499</id><published>2009-02-09T08:28:00.000-08:00</published><updated>2009-02-09T08:32:49.318-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meter'/><category scheme='http://www.blogger.com/atom/ns#' term='webservice'/><category scheme='http://www.blogger.com/atom/ns#' term='pagerank'/><title type='text'>Medidor PageRank en tu sitio Web</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.hellogoogle.com/wp-content/uploads/2008/06/page_rank_hellogoogle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 157px; height: 157px;" src="http://www.hellogoogle.com/wp-content/uploads/2008/06/page_rank_hellogoogle.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Antes utilizaba MiPageRank.com pero parece que murio, asi que me puse a hacer mi propio medidor de PageRank, y como me quedo bonito (modesto yo) lo puse para que cualquiera lo pueda usar...&lt;br /&gt;&lt;br /&gt;En &lt;a href="http://www.c0wa.com/pagerank"&gt;c0wa.com/pagerank&lt;/a&gt; hay que poner la direccion del sitio, elegir el estilo y copiar el codigo HTML, simple.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-3901429490785361499?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/3901429490785361499/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/medidor-pagerank-en-tu-sitio-web.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/3901429490785361499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/3901429490785361499'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/medidor-pagerank-en-tu-sitio-web.html' title='Medidor PageRank en tu sitio Web'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-7863476921001135739</id><published>2009-02-08T07:00:00.000-08:00</published><updated>2009-02-08T07:03:36.724-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='href'/><category scheme='http://www.blogger.com/atom/ns#' term='target'/><title type='text'>Cambiar target en links externos</title><content type='html'>Este script permite al usuario seleccionar si quiere que los links externos se abran en una nueva ventana o no, cambiando el target de forma dinamica con Javascript.&lt;br /&gt;&lt;code&gt;// uso tb_toggle(target), ej: tb_toggle('_blank');&lt;br /&gt;function tb_toggle(x) {&lt;br /&gt;        var links = document.getElementsByTagName('a');&lt;br /&gt;        loc = location.href.split(/\//)&lt;br /&gt;        for (i = 0; i &lt; links.length; i++) {&lt;br /&gt;            link = links[i].href.split(/\//)&lt;br /&gt;            if (loc[2] != link[2]) {&lt;br /&gt;                    links[i].target = x;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Un ejemplo con un checkbox seria:&lt;br /&gt;&lt;code&gt;&amp;lt;input type="checkbox" onclick="if (this.checked) tb_toggle('_blank'); else tb_toggle('')" /&amp;gt; Abrir links externos en una nueva ventana&lt;/code&gt;&lt;br /&gt;&lt;a href="http://www.c0wa.com/code/change_target.html"&gt;Ver demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-7863476921001135739?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/7863476921001135739/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/cambiar-target-en-links-externos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/7863476921001135739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/7863476921001135739'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/cambiar-target-en-links-externos.html' title='Cambiar target en links externos'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-5265341260686642073</id><published>2009-02-08T05:36:00.000-08:00</published><updated>2009-02-08T05:47:51.540-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eslomas'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='pagerank'/><title type='text'>Clase PHP para calcular PageRank</title><content type='html'>Buscando algun metodo para calcular el PageRank no encontre demasiada informacion... Lo mas interesante fue una clase escrita por Patxi Echarte de &lt;a href="http://www.eslomas.com"&gt;EsLoMas.com&lt;/a&gt;, pero del año 2006 y ya no funciona por unos cambios en Google... Me tome la libertad de modificar dos lineas para que funcione, pero los creditos son para el...&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;/**&lt;br /&gt;* Google PageRank number for a URL&lt;br /&gt;*&lt;br /&gt;*  LICENCE&lt;br /&gt;*  ========&lt;br /&gt;*   copyright (c) 2000 Patxi Echarte [patxi@eslomas.com]&lt;br /&gt;*&lt;br /&gt;*   This program is free software; you can redistribute it and/or&lt;br /&gt;*   modify it under the terms of the GNU Lesser General Public License&lt;br /&gt;*   version 2.1 as published by the Free Software Foundation.&lt;br /&gt;*&lt;br /&gt;*   This library is distributed in the hope that it will be useful,&lt;br /&gt;*   but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;*   GNU Lesser General Public License for more details at&lt;br /&gt;*   http://www.gnu.org/copyleft/lgpl.html&lt;br /&gt;*&lt;br /&gt;*   You should have received a copy of the GNU General Public License&lt;br /&gt;*   along with this program; if not, write to the Free Software&lt;br /&gt;*   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.&lt;br /&gt;*&lt;br /&gt;* @package GooglePageRank&lt;br /&gt;* @version $Id: GooglePageRank.class.php,v 1.0 2006/10/04 $&lt;br /&gt;* @author Patxi Echarte &amp;lt;patxi@eslomas.com&amp;gt;&lt;br /&gt;*/&lt;br /&gt;class GooglePageRank {&lt;br /&gt;   &lt;br /&gt;   var $_GOOGLE_MAGIC = 0xE6359A60;&lt;br /&gt;   &lt;br /&gt;   var $_url = '';&lt;br /&gt;   &lt;br /&gt;   var $_checksum = '';&lt;br /&gt;   &lt;br /&gt;    /**&lt;br /&gt;   * Constructor&lt;br /&gt;    *&lt;br /&gt;    * @access public&lt;br /&gt;    */&lt;br /&gt;   function GooglePageRank($url)&lt;br /&gt;   {&lt;br /&gt;      $this-&amp;gt;_url = $url;&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   function _strToNum($Str, $Check, $Magic)&lt;br /&gt;   {&lt;br /&gt;      $Int32Unit = 4294967296;  // 2^32&lt;br /&gt;   &lt;br /&gt;      $length = strlen($Str);&lt;br /&gt;      for ($i = 0; $i &amp;lt; $length; $i++) {&lt;br /&gt;         $Check *= $Magic;&lt;br /&gt;         //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31),&lt;br /&gt;         //  the result of converting to integer is undefined&lt;br /&gt;         //  refer to http://www.php.net/manual/en/language.types.integer.php&lt;br /&gt;         //if (is_float($Check)) {&lt;br /&gt;         if ($Check &amp;gt;= $Int32Unit) {&lt;br /&gt;            $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));&lt;br /&gt;            // - 2^31&lt;br /&gt;            $Check = ($Check &amp;lt; -2147483647) ? ($Check + $Int32Unit) : $Check;&lt;br /&gt;         }&lt;br /&gt;         $Check += ord($Str{$i});&lt;br /&gt;      }&lt;br /&gt;      return $Check;&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   function _hashURL($String)&lt;br /&gt;   {&lt;br /&gt;      $Check1 = $this-&amp;gt;_strToNum($String, 0x1505, 0x21);&lt;br /&gt;      $Check2 = $this-&amp;gt;_strToNum($String, 0, 0x1003F);&lt;br /&gt;   &lt;br /&gt;      $Check1 &amp;gt;&amp;gt;= 2;&lt;br /&gt;      $Check1 = (($Check1 &amp;gt;&amp;gt; 4) &amp; 0x3FFFFC0 ) | ($Check1 &amp; 0x3F);&lt;br /&gt;      $Check1 = (($Check1 &amp;gt;&amp;gt; 4) &amp; 0x3FFC00 ) | ($Check1 &amp; 0x3FF);&lt;br /&gt;      $Check1 = (($Check1 &amp;gt;&amp;gt; 4) &amp; 0x3C000 ) | ($Check1 &amp; 0x3FFF);   &lt;br /&gt;   &lt;br /&gt;      $T1 = (((($Check1 &amp; 0x3C0) &amp;lt;&amp;lt; 4) | ($Check1 &amp; 0x3C)) &amp;lt;&amp;lt;2 ) | ($Check2 &amp; 0xF0F );&lt;br /&gt;      $T2 = (((($Check1 &amp; 0xFFFFC000) &amp;lt;&amp;lt; 4) | ($Check1 &amp; 0x3C00)) &amp;lt;&amp;lt; 0xA) | ($Check2 &amp; 0xF0F0000 );&lt;br /&gt;   &lt;br /&gt;      return ($T1 | $T2);&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   function checksum()&lt;br /&gt;   {&lt;br /&gt;      if($this-&amp;gt;_checksum != '') return $this-&amp;gt;_checksum;&lt;br /&gt;   &lt;br /&gt;      $Hashnum = $this-&amp;gt;_hashURL($this-&amp;gt;_url);&lt;br /&gt;   &lt;br /&gt;      $CheckByte = 0;&lt;br /&gt;      $Flag = 0;&lt;br /&gt;   &lt;br /&gt;      $HashStr = sprintf('%u', $Hashnum) ;&lt;br /&gt;      $length = strlen($HashStr);&lt;br /&gt;   &lt;br /&gt;      for ($i = $length - 1;  $i &amp;gt;= 0;  $i --) {&lt;br /&gt;         $Re = $HashStr{$i};&lt;br /&gt;         if (1 == ($Flag % 2)) {&lt;br /&gt;            $Re += $Re;&lt;br /&gt;            $Re = (int)($Re / 10) + ($Re % 10);&lt;br /&gt;         }&lt;br /&gt;         $CheckByte += $Re;&lt;br /&gt;         $Flag ++;&lt;br /&gt;      }&lt;br /&gt;   &lt;br /&gt;      $CheckByte %= 10;&lt;br /&gt;      if (0 !== $CheckByte) {&lt;br /&gt;         $CheckByte = 10 - $CheckByte;&lt;br /&gt;         if (1 === ($Flag%2) ) {&lt;br /&gt;            if (1 === ($CheckByte % 2)) {&lt;br /&gt;               $CheckByte += 9;&lt;br /&gt;            }&lt;br /&gt;            $CheckByte &amp;gt;&amp;gt;= 1;&lt;br /&gt;         }&lt;br /&gt;      }&lt;br /&gt;   &lt;br /&gt;      $this-&amp;gt;_checksum = '7'.$CheckByte.$HashStr;&lt;br /&gt;      return $this-&amp;gt;_checksum;&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   /**&lt;br /&gt;   * obtiene la url donde obtener la información del pagerank&lt;br /&gt;   * @access public&lt;br /&gt;   */&lt;br /&gt;   function pageRankUrl()&lt;br /&gt;   {&lt;br /&gt;      return 'http://toolbarqueries.google.com/search?client=navclient-auto&amp;ch='&lt;br /&gt;            .$this-&amp;gt;checksum().'&amp;q=info:'.$this-&amp;gt;_url.'&amp;features=Rank&amp;num=100&amp;filter=0';&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   /**&lt;br /&gt;   * devuelve el pagerank para la url indicada o -1 si error&lt;br /&gt;   * @access public&lt;br /&gt;   */&lt;br /&gt;   function getPageRank()&lt;br /&gt;   {&lt;br /&gt;      $fh = @fopen($this-&amp;gt;pageRankUrl(), "r");&lt;br /&gt;      if($fh)&lt;br /&gt;      {&lt;br /&gt;         $contenido = '';&lt;br /&gt;         while (!feof($fh)) {&lt;br /&gt;           $contenido .= fread($fh, 8192);&lt;br /&gt;         }&lt;br /&gt;         fclose($fh);&lt;br /&gt;   &lt;br /&gt;         list(,,$pr) = split(":", $contenido);&lt;br /&gt;         if ($pr &amp;gt;= 0 and $pr &amp;lt;= 10) return $pr;&lt;br /&gt;      }&lt;br /&gt;      return -1;&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;br /&gt;Para utilizarlo seria algo asi:&lt;br /&gt;&lt;code&gt;&amp;lt;?&lt;br /&gt;    include('gpr.class.php');&lt;br /&gt;    $gpr = new GooglePageRank($url);&lt;br /&gt;    $gpr-&gt;getPageRank();&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-5265341260686642073?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/5265341260686642073/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/clase-php-para-calcular-pagerank.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/5265341260686642073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/5265341260686642073'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/clase-php-para-calcular-pagerank.html' title='Clase PHP para calcular PageRank'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-6245801099646703999</id><published>2009-02-03T21:07:00.000-08:00</published><updated>2009-02-03T21:52:07.973-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vinculo'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='hotmail'/><category scheme='http://www.blogger.com/atom/ns#' term='externo'/><category scheme='http://www.blogger.com/atom/ns#' term='advertencia'/><title type='text'>Aviso al clickear en un enlace externo</title><content type='html'>Este script avisara que estamos dejando la pagina y si pregunta si deseamos continuar al hacer click en cualquier enlace externo, al igual que hace Hotmail con los vinculos dentro de un correo.&lt;br /&gt;&lt;code&gt;message = 'Este enlace hace referencia a un sitio Web externo. ¿Desea continuar?'; // edita esta linea para cambiar el mensaje&lt;br /&gt;&lt;br /&gt;window.onload = function() {&lt;br /&gt;  var links = document.getElementsByTagName('a');&lt;br /&gt;  loc = location.href.split(/\//)&lt;br /&gt;  for (i = 0; i &lt; links.length; i++) {&lt;br /&gt;    link = links[i].href.split(/\//)&lt;br /&gt;    if (loc[2] != link[2]) {&lt;br /&gt;      links[i].onclick = function() {&lt;br /&gt;        if (!confirm(message)) return false;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;a href="http://www.c0wa.com/code/external_link_advice.html"&gt;Ver demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-6245801099646703999?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/6245801099646703999/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/aviso-al-clickear-en-un-enlace-externo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/6245801099646703999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/6245801099646703999'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/aviso-al-clickear-en-un-enlace-externo.html' title='Aviso al clickear en un enlace externo'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-7296339144732912151</id><published>2009-02-03T04:55:00.000-08:00</published><updated>2009-02-03T05:04:41.063-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>AJAX, primeros pasos</title><content type='html'>AJAX es una tecnica para desarrollar sitios Web interactivos. Permite realizar cambios y acciones en las paginas sin necesidad de recargarlas. Esto aumenta la interactividad y la usabilidad de las aplicaciones.&lt;br /&gt;&lt;br /&gt;Con la siguiente funcion se pueden hacer llamados a otros sitios y mostrar el resultado en el div deseado:&lt;br /&gt;&lt;code&gt;// doajax('accion', 'output', 'imagen de carga')&lt;br /&gt;// ej: doajax('vote.php?id=5', 'result5', 'loading.gif')&lt;br /&gt;&lt;br /&gt;IE = document.all?true:false&lt;br /&gt;&lt;br /&gt;if (IE) {&lt;br /&gt;  http = new ActiveXObject('Microsoft.XMLHTTP');&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;  http = new XMLHttpRequest();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function doajax(action, output, loading) {&lt;br /&gt;  document.getElementById(output).innerHTML = '&lt;img src="'+loading+'" /&gt;';&lt;br /&gt;  http.onreadystatechange = function() {&lt;br /&gt;    if(http.readyState == 4) {&lt;br /&gt;      document.getElementById(output).innerHTML = http.responseText;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  http.open("GET", action, true);&lt;br /&gt;  http.send(null);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;a href="http://www.c0wa.com/code/ajax_demo.html"&gt;Ver demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y de regalo, un sitio para crear imagenes de 'cargando' al mejor estilo web 2.0: &lt;a href="http://www.ajaxload.info"&gt;ajaxload&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-7296339144732912151?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/7296339144732912151/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/ajax-primeros-pasos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/7296339144732912151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/7296339144732912151'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/ajax-primeros-pasos.html' title='AJAX, primeros pasos'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-5421778322341727913</id><published>2009-02-03T03:55:00.000-08:00</published><updated>2009-02-03T04:02:28.918-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='drag'/><category scheme='http://www.blogger.com/atom/ns#' term='arrastrar'/><category scheme='http://www.blogger.com/atom/ns#' term='mover'/><title type='text'>Drag de objetos muy simple con Javascript (arrastrando cosas)</title><content type='html'>Como no encontre ningun script para hacer drag de objetos sencillo hice uno propio. Su uso es muy simple, solo hay que agregar onmousedown="start_drag()" a casi cualquier item de la pagina (y position: absolute en el css)&lt;br /&gt;&lt;br /&gt;Script&lt;br /&gt;&lt;code&gt;// ejemplo: &amp;lt;input type="button" value="hello world" onmousedown="start_drag()" style="position: absolute" /&amp;gt;&lt;br /&gt;&lt;br /&gt;IE = document.all?true:false&lt;br /&gt;&lt;br /&gt;function drag_start(x) {&lt;br /&gt;  drag_object = x;&lt;br /&gt;  drag_object.focus();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;document.onmousedown = function (e) {&lt;br /&gt;  if (!e) var e = window.event;&lt;br /&gt;  if (typeof drag_object != 'undefined') {&lt;br /&gt;    if (IE) {&lt;br /&gt;      xoffset = e.x-drag_object.offsetLeft;&lt;br /&gt;      yoffset = e.y-drag_object.offsetTop;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;      xoffset = e.layerX;&lt;br /&gt;      yoffset = e.layerY;&lt;br /&gt;    }&lt;br /&gt;    return false;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;document.onselectstart = function () {&lt;br /&gt;  if (typeof drag_object != 'undefined') {&lt;br /&gt;    return false;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;document.onmousemove = function (e) {&lt;br /&gt;  if (!e) var e = window.event;&lt;br /&gt;  if (typeof drag_object != 'undefined') {&lt;br /&gt;    drag_object.style.left =  e.clientX - xoffset + 'px';&lt;br /&gt;    drag_object.style.top = e.clientY - yoffset + 'px';&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;document.onmouseup = function () {&lt;br /&gt;  delete drag_object;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;a href="http://www.c0wa.com/code/drag_demo.html"&gt;Ver demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-5421778322341727913?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/5421778322341727913/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/drag-de-objetos-muy-simple-con.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/5421778322341727913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/5421778322341727913'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/drag-de-objetos-muy-simple-con.html' title='Drag de objetos muy simple con Javascript (arrastrando cosas)'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-3930819247646868600</id><published>2009-02-01T17:37:00.000-08:00</published><updated>2009-02-02T10:35:18.518-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='YouTube'/><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='descarga'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Descarga videos YouTube</title><content type='html'>A continuación un pequeño sketch de un código que nos permite extraer la URL del video.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?&lt;br /&gt;if (!ereg("^http://[a-zA-Z]*\.youtube\.com", $_GET['file']))&lt;br /&gt;  die("Ooops!");&lt;br /&gt;&lt;br /&gt;$t = file($_GET['file']);&lt;br /&gt;&lt;br /&gt;$k = array_values(preg_grep("/var fullscreenUrl/", $t));&lt;br /&gt;ereg("\?(.*)\'", $k[0], $s);&lt;br /&gt;$r = $s[1];&lt;br /&gt;echo '&amp;lt;a href="http://www.youtube.com/get_video?'.$r.'"&amp;gt;Get video!&amp;lt;/a&amp;gt;';&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-3930819247646868600?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/3930819247646868600/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/descarga-videos-youtube.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/3930819247646868600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/3930819247646868600'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/02/descarga-videos-youtube.html' title='Descarga videos YouTube'/><author><name>carlos bukowski</name><uri>http://www.blogger.com/profile/09880608584169619946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-2837559276705204754</id><published>2009-01-31T10:26:00.000-08:00</published><updated>2009-01-31T10:30:12.697-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='referer'/><category scheme='http://www.blogger.com/atom/ns#' term='highlight'/><category scheme='http://www.blogger.com/atom/ns#' term='resaltar'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Resaltar los terminos de la busqueda</title><content type='html'>Este script permite resaltar los terminos que coinciden con la busqueda de Google que hizo llegar al visitante.&lt;br /&gt;Para utilizarlo es necesario agregar el siguiente codigo al principio del archivo:&lt;br /&gt;&lt;code&gt;&amp;lt;?&lt;br /&gt;function highlight($buffer) { global $query; return (eregi_replace($query, '&amp;lt;strong&amp;gt;'.$query.'&amp;lt;/strong&amp;gt;', $buffer)); }&lt;br /&gt;if (stristr(getenv('HTTP_REFERER'),'google') and preg_match('/q=([^&amp;$]+)/i', getenv('HTTP_REFERER'), $match)) { $query = urldecode($match[1]); ob_start('highlight'); } else { echo '&amp;lt;a href="?q=hola+que+tal"&amp;gt;hola&amp;lt;/a&amp;gt;'; }&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;br /&gt;Y al final del archivo agregar la siguiente linea:&lt;br /&gt;&lt;code&gt;&amp;lt;? ob_end_flush(); ?&amp;gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-2837559276705204754?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/2837559276705204754/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/resaltar-los-terminos-de-la-busqueda.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/2837559276705204754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/2837559276705204754'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/resaltar-los-terminos-de-la-busqueda.html' title='Resaltar los terminos de la busqueda'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-2022187273962244803</id><published>2009-01-31T08:21:00.001-08:00</published><updated>2009-01-31T08:35:39.480-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='contraseña'/><category scheme='http://www.blogger.com/atom/ns#' term='fortaleza'/><category scheme='http://www.blogger.com/atom/ns#' term='debilidad'/><category scheme='http://www.blogger.com/atom/ns#' term='password'/><category scheme='http://www.blogger.com/atom/ns#' term='weakness'/><category scheme='http://www.blogger.com/atom/ns#' term='check'/><category scheme='http://www.blogger.com/atom/ns#' term='clave'/><title type='text'>Verificar seguridad de una contraseña con Javascript</title><content type='html'>Este codigo se agrega a cualquier pagina y verificara de forma automatica si las contraseñas son seguras a medida que el usuario las ingresa. Se encuentra configurado para validar passwords de entre 5 y 20 caraceters, alfanumericos y que contengan variaciones para considerarlos seguros, de todas formas esto es configurable.&lt;br /&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;br /&gt;  pw_min = 5; // caracteres minimos para validar&lt;br /&gt;  pw_max = 20; // caracteres maximos para validar&lt;br /&gt;  pw_invalid = 'red'; // color de password invalido&lt;br /&gt;  pw_insecure = 'yellow'; // color de password valido pero inseguro&lt;br /&gt;  pw_secure = 'green'; // color de password valido y seguro&lt;br /&gt;  pw_validate = /^[a-z0-9]+$/i; // regexp para validar password&lt;br /&gt;&lt;br /&gt;  document.onkeyup = function() {&lt;br /&gt;   if (typeof pw_focus != 'undefined') {&lt;br /&gt;    if (pw_focus.value.length &amp;lt; pw_min || pw_focus.value.length &amp;gt; pw_max) bcolor = pw_invalid;&lt;br /&gt;    else if (!pw_validate.test(pw_focus.value)) bcolor = pw_invalid;&lt;br /&gt;    else if (pw_focus.value.toLowerCase() == pw_focus.value || pw_focus.value.toUpperCase() == pw_focus.value) bcolor = pw_insecure;&lt;br /&gt;    else if (/^[a-z]+$/i.test(pw_focus.value) || /^[0-9]+$/i.test(pw_focus.value)) bcolor = pw_insecure;&lt;br /&gt;    else bcolor = pw_secure;&lt;br /&gt;    pw_focus.style.backgroundColor = bcolor;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  window.onload = function() {&lt;br /&gt;   var inputs = document.getElementsByTagName('input');&lt;br /&gt;   for (i = 0; i &amp;lt; inputs.length; i++) {&lt;br /&gt;    if (inputs[i].type == 'password') {&lt;br /&gt;     inputs[i].onfocus = function() {&lt;br /&gt;      pw_focus = this;&lt;br /&gt;     }&lt;br /&gt;     inputs[i].onblur = function() {&lt;br /&gt;      delete pw_focus;&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;a href="http://www.c0wa.com/code/pass_weakness.html"&gt;Ver demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-2022187273962244803?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/2022187273962244803/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/verificar-seguridad-de-una-contrasena.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/2022187273962244803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/2022187273962244803'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/verificar-seguridad-de-una-contrasena.html' title='Verificar seguridad de una contraseña con Javascript'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-6528841742943452024</id><published>2009-01-30T21:20:00.000-08:00</published><updated>2009-01-31T00:32:41.248-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='home banking'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='teclado virtual'/><title type='text'>Teclado virtual por seguridad</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.qliner.com/hotkeys/keyboard.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 293px; height: 113px;" src="http://www.qliner.com/hotkeys/keyboard.png" alt="" border="0" /&gt;&lt;/a&gt;Los teclados virtuales son utilizados en las webs de algunos bancos como un elemento de seguridad, su fundamento es que asi evitan que los datos del home banking sean robados con un keylogger o un troyano. Para agregarle la misma funcion a tu sitio se puede usar vkey, un teclado virtual en javascript.&lt;br /&gt;Descarga el archivo a continuacion que contiene los archivos de vkey, la ayuda para instalarlo y un demo:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.c0wa.com/code/vkey.zip"&gt;Descargar vkey.zip&lt;/a&gt; (3KB) / &lt;a href="http://www.c0wa.com/code/vkey_demo.html"&gt;Ver demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-6528841742943452024?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/6528841742943452024/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/los-teclados-virtuales-son-utilizados.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/6528841742943452024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/6528841742943452024'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/los-teclados-virtuales-son-utilizados.html' title='Teclado virtual por seguridad'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-5793212674543214237</id><published>2009-01-30T11:30:00.000-08:00</published><updated>2009-01-30T11:35:09.432-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gd'/><category scheme='http://www.blogger.com/atom/ns#' term='jpg'/><category scheme='http://www.blogger.com/atom/ns#' term='jpeg'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='thumbnail'/><category scheme='http://www.blogger.com/atom/ns#' term='resize'/><title type='text'>Resize de una imagen en PHP con GD</title><content type='html'>Este script toma una imagen jpg y crea un thumbnail on the fly especificandole el ancho y alto maximo.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.c0wa.com/code/resize.php?img=hola-manola.jpg&amp;amp;w=200&amp;amp;h=300" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:78%;"&gt;&amp;lt; &lt;a href="http://www.c0wa.com/code/resize.php?img=hola-manola.jpg&amp;amp;w=200&amp;amp;h=300"&gt;c0wa.com/code/resize.php?img=hola-manola.jpg&amp;amp;w=200&amp;amp;h=300&lt;/a&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;code&gt;&amp;lt;?&lt;br /&gt;&lt;br /&gt;// resize.php?img=imagen.jpg&amp;amp;w=ancho_maximo&amp;amp;h=alto_maximo&lt;br /&gt;&lt;br /&gt;if (!file_exists($_GET['img']) or substr($_GET['img'], -3, 3) != 'jpg') die('not found or unsupported type');&lt;br /&gt;if (!is_numeric($_GET['w'])) die('max width type missmatch');&lt;br /&gt;if (!is_numeric($_GET['h'])) die('max height type missmatch');&lt;br /&gt;$img = $_GET['img']; $mw = $_GET['w']; $mh = $_GET['h'];&lt;br /&gt;&lt;br /&gt;list($w, $h) = getimagesize($img);&lt;br /&gt;$dx = $w/$mw; $dy = $h/$mh;&lt;br /&gt;&lt;br /&gt;if ($dx &amp;gt; $dy) { $nw = $mw ; $nh = $h/$dx; }&lt;br /&gt;else { $nw = $w/$dy; $nh = $mh; }&lt;br /&gt;&lt;br /&gt;$tn = ImageCreateTrueColor($nw,$nh);&lt;br /&gt;$src = imagecreatefromjpeg($img);&lt;br /&gt;imagecopyresized($tn, $src, 0, 0, 0, 0, $nw, $nh, $w, $h);&lt;br /&gt;header('Content-type: image/jpeg');&lt;br /&gt;imagejpeg($tn);&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-5793212674543214237?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/5793212674543214237/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/resize-de-una-imagen-en-php-con-gd.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/5793212674543214237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/5793212674543214237'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/resize-de-una-imagen-en-php-con-gd.html' title='Resize de una imagen en PHP con GD'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-4162096127566547095</id><published>2009-01-30T10:40:00.000-08:00</published><updated>2009-01-30T10:43:46.473-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='htpasswd'/><category scheme='http://www.blogger.com/atom/ns#' term='contraseña'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='generador'/><category scheme='http://www.blogger.com/atom/ns#' term='clave'/><title type='text'>Generador de contraseñas htpasswd en PHP</title><content type='html'>Simple pero útil generador de contraseñas htpasswd en PHP usando crypt.&lt;br /&gt;&lt;code&gt;&amp;lt;?&lt;br /&gt; if ($_GET['q']) echo crypt($_GET['q'], base64_encode($_GET['q'])).'&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;';&lt;br /&gt; echo '&amp;lt;form method="get"&amp;gt;&amp;lt;input type="text" id="q" name="q" value="'.$_GET["q"].'" /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;input type="submit" /&amp;gt;&amp;lt;/form&amp;gt;';&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;a href="http://www.c0wa.com/code/htpasswd.php"&gt;Ver demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-4162096127566547095?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/4162096127566547095/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/generador-de-contrasenas-htpasswd-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/4162096127566547095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/4162096127566547095'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/generador-de-contrasenas-htpasswd-en.html' title='Generador de contraseñas htpasswd en PHP'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-4435258937753457316</id><published>2009-01-30T08:07:00.000-08:00</published><updated>2009-01-30T11:25:39.803-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='attack'/><category scheme='http://www.blogger.com/atom/ns#' term='injection'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='sec'/><category scheme='http://www.blogger.com/atom/ns#' term='encode'/><title type='text'>Una alternativa mas contra los ataques de sql injection</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://xkcd.com/327/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 382px; height: 117px;" src="http://imgs.xkcd.com/comics/exploits_of_a_mom.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;La idea principal es codificar desde el lenguaje source (php) los 'parametros' del query, para que luego sea decodificado en el lenguaje target (sql).&lt;br /&gt;Al codificar los parametros en valores hexadecimal, evitaremos de esa manera el intento de injectar codigo sql.&lt;br /&gt;&lt;br /&gt;Veamos un ejemplo, la siguiente linea es vulnerable a ataques de sql injection:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$r = mysql_query("SELECT * FROM s WHERE id = ".$_GET['id']."");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;La manera en que procedemos es aplicar bin2hex al parametro ($_GET['id'), y luego decodificarlo desde MySQL utilizando la directiva UNHEX:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$r = mysql_query("SELECT * FROM s WHERE id = UNHEX('".bin2hex($_GET['id'])."')");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;De cualquier manera, esta solucion es visualmente molesta para ser utilizada en muchos queries, por lo cual seria conveniente implementar una funcion que haga este trabajo de manera automatica (algo asi como un sprintf que internamente genere un sql query protegido).&lt;br /&gt;&lt;br /&gt;reference: &lt;a href="http://logikk.com.ar/inj.txt"&gt;logikk.com.ar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-4435258937753457316?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/4435258937753457316/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/una-alternativa-mas-contra-los-ataques.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/4435258937753457316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/4435258937753457316'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/una-alternativa-mas-contra-los-ataques.html' title='Una alternativa mas contra los ataques de sql injection'/><author><name>carlos bukowski</name><uri>http://www.blogger.com/profile/09880608584169619946</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-4206393780878148152</id><published>2009-01-30T07:41:00.000-08:00</published><updated>2009-01-30T08:23:33.462-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='htpasswd'/><category scheme='http://www.blogger.com/atom/ns#' term='contraseña'/><category scheme='http://www.blogger.com/atom/ns#' term='login'/><category scheme='http://www.blogger.com/atom/ns#' term='autorizacion'/><category scheme='http://www.blogger.com/atom/ns#' term='password'/><category scheme='http://www.blogger.com/atom/ns#' term='htaccess'/><title type='text'>Proteger directorios con .htaccess y .htpasswd</title><content type='html'>Podemos proteger carpetas en nuestro servidor usando estos dos archivos. Lo primero que necesitamos es crear un archivo que se llame .htaccess con el siguiente contenido:&lt;br /&gt;&lt;code&gt;AuthUserFile &amp;lt;ruta al archivo de password&amp;gt;&lt;br /&gt;AuthName &amp;lt;texto de la ventana&amp;gt;&lt;br /&gt;AuthType Basic&lt;br /&gt;&lt;br /&gt;require user &amp;lt;usuarios autorizados&amp;gt;&lt;/usuarios&gt;&lt;/texto&gt;&lt;/ruta&gt;&lt;/code&gt;&lt;br /&gt;Es conveniente que el archivo de password se encuentre fuera del alcance de los navegantes, es decir fuera de public_html. El texto de la ventana aparecera en la ventana de login, normalmente se pone el nombre del sitio o la descripcion de lo que la carpeta protegida contiene. Los usuarios autorizados pueden ser uno o mas, y deben estar separados por espacios.&lt;br /&gt;Un ejemplo completo:&lt;br /&gt;&lt;code&gt;AuthUserFile /home/marco/.htpasswd&lt;br /&gt;AuthName tehwebmaster.blogspot.com&lt;br /&gt;AuthType Basic&lt;br /&gt;&lt;br /&gt;require user marco&lt;/code&gt;&lt;br /&gt;Ahora es necesario crear el archivo .htpasswd que tendra la lista de usuarios y sus contraseñas, y subirlo al directorio donde especificamos anteriormente.&lt;br /&gt;El formato utilizado en .htpasswd es usuario:clave_encriptada, y cada usuario va en una linea nueva. Por ejemplo:&lt;br /&gt;&lt;code&gt;marco:dGRkPurkuWmW2&lt;/code&gt;&lt;br /&gt;Para encriptar una clave usa nuestro &lt;a href="http://www.c0wa.com/code/htpasswd.php"&gt;generador de claves htpasswd&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-4206393780878148152?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/4206393780878148152/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/proteger-directorios-con-htaccess-y.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/4206393780878148152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/4206393780878148152'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/proteger-directorios-con-htaccess-y.html' title='Proteger directorios con .htaccess y .htpasswd'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-4167754075004623184</id><published>2009-01-29T19:52:00.000-08:00</published><updated>2009-01-30T08:17:38.589-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='array'/><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Parsear facil XML con PHP</title><content type='html'>Esta es la forma que utilizo para parsear XML con PHP, a mi entender la mas bonita y sencilla. Lo haremos utilizando xml_parse_into_struct que parsea el contenido de un archivo XML a un array.&lt;br /&gt;Para el ejemplo vamos a realizar una búsqueda con la API de Yahoo:&lt;br /&gt;&lt;code&gt;&amp;lt;?&lt;br /&gt;&lt;br /&gt;// xml_parser.php - ejemplo de parser Yahoo search - tehwebmaster.blogspot.com&lt;br /&gt;// uso: xml_parser.php?q=search_query&lt;br /&gt;&lt;br /&gt;if (!empty($q)) {&lt;br /&gt;&lt;br /&gt; $xml = xml_parser_create();&lt;br /&gt;&lt;br /&gt; $file = fopen("http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&amp;amp;results=10&amp;amp;query=".urlencode($q), "r");&lt;br /&gt;&lt;br /&gt; while (!feof($file)) $data .= fread($file, 8192);&lt;br /&gt;&lt;br /&gt; xml_parse_into_struct($xml, $data, $values, $tags);&lt;br /&gt; xml_parser_free($xml);&lt;br /&gt;&lt;br /&gt; foreach($tags as $k =&amp;gt; $v) {&lt;br /&gt;  if ($k == "TITLE") {&lt;br /&gt;   $count = 0;&lt;br /&gt;   foreach($v as $k2 =&amp;gt; $v2) {&lt;br /&gt;    $titles[$count] = $values[$v2]['value'];&lt;br /&gt;    $count++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  if ($k == "SUMMARY") {&lt;br /&gt;   $count = 0;&lt;br /&gt;   foreach($v as $k2 =&amp;gt; $v2) {&lt;br /&gt;    $descs[$count] = $values[$v2]['value'];&lt;br /&gt;    $count++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  if ($k == "CLICKURL") {&lt;br /&gt;   $count = 0;&lt;br /&gt;   foreach($v as $k2 =&amp;gt; $v2) {&lt;br /&gt;    $urls[$count] = $values[$v2]['value'];&lt;br /&gt;    $count++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  if ($k == "DISPLAYURL") {&lt;br /&gt;   $count = 0;&lt;br /&gt;   foreach($v as $k2 =&amp;gt; $v2) {&lt;br /&gt;    $durls[$count] = $values[$v2]['value'];&lt;br /&gt;    $count++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; for($count = 0; $count &amp;lt;= (count($titles)-1); $count++) {&lt;br /&gt;  echo "&amp;lt;a href=\"$urls[$count]\"&amp;gt;$titles[$count]&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;$descs[$count]&amp;lt;br /&amp;gt;&amp;lt;span style=\"font-size: 10px; color: #0C3;\"&amp;gt;$durls[$count]&amp;lt;/span&amp;gt;";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;a href="http://www.c0wa.com/code/xml_parser.zip"&gt;Descargar xml_parser.zip&lt;/a&gt; (713B)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-4167754075004623184?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/4167754075004623184/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/parsear-facil-xml-con-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/4167754075004623184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/4167754075004623184'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/parsear-facil-xml-con-php.html' title='Parsear facil XML con PHP'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5569302871996483119.post-7135252750874405765</id><published>2009-01-29T11:06:00.000-08:00</published><updated>2009-01-30T07:25:42.325-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gd'/><category scheme='http://www.blogger.com/atom/ns#' term='overlay'/><category scheme='http://www.blogger.com/atom/ns#' term='copyright'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='sobreimpreso'/><title type='text'>Overlay de una imagen en PHP con GD</title><content type='html'>Este script permite posicionar una imagen sobre otra pudiendo definir los margenes y la posicion de la imagen. Muy util para agregar copyright a nuestras fotos para que no las roben.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img style="width: 328px; height: 248px;" src="http://www.c0wa.com/code/overlay.php?img=hola-manola.jpg" /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt; &lt;a href="http://www.c0wa.com/code/overlay.php?img=hola-manola.jpg"&gt;c0wa.com/code/overlay.php?img=hola-manola.jpg&lt;/a&gt; &gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;?&lt;br /&gt;&lt;br /&gt;// overlay.php&lt;br /&gt;// uso: overlay.php?img=background_image&lt;br /&gt;&lt;br /&gt;// setup&lt;br /&gt;$overlay['path'] = 'overlay.png'; // direccion de la imagen&lt;br /&gt;$overlay['position'] = 'right bottom'; // posicion x y&lt;br /&gt;$overlay['margin'] = '30 20'; // margen x y&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// script (no editar)&lt;br /&gt;&lt;br /&gt;$img = $_GET['img'];&lt;br /&gt;&lt;br /&gt;if (!file_exists($img)) die('background image not found');&lt;br /&gt;&lt;br /&gt;$bge = substr($img, -3, 3);&lt;br /&gt;&lt;br /&gt;if ($bge == 'jpg') $bg = imagecreatefromjpeg($img);&lt;br /&gt;elseif ($bge == 'png') $bg = imagecreatefrompng($img);&lt;br /&gt;elseif ($bge == 'gif') $bg = imagecreatefromgif($img);&lt;br /&gt;else die('background image unsupported type');&lt;br /&gt;&lt;br /&gt;if (!file_exists($overlay['path'])) die('overlay image not found');&lt;br /&gt;&lt;br /&gt;$ole = substr($overlay['path'], -3, 3);&lt;br /&gt;&lt;br /&gt;switch ($ole) {&lt;br /&gt; case 'jpg':&lt;br /&gt;  $ol = imagecreatefromjpeg($overlay['path']);&lt;br /&gt;  break;&lt;br /&gt; case 'png':&lt;br /&gt;  $ol = imagecreatefrompng($overlay['path']);&lt;br /&gt;  break;&lt;br /&gt; case 'gif':&lt;br /&gt;  $ol = imagecreatefromgif($overlay['path']);&lt;br /&gt;  break;&lt;br /&gt; default:&lt;br /&gt;  die('overlay image unsupported type');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$bgw = imagesx($bg); $bgh = imagesy($bg);&lt;br /&gt;$olw = imagesx($ol); $olh = imagesy($ol);&lt;br /&gt;imagealphablending($bg, true);&lt;br /&gt;list($posh, $posv) = split(' ', $overlay['position']);&lt;br /&gt;list($mx, $my) = split(' ', $overlay['margin']);&lt;br /&gt; &lt;br /&gt;if ($posh == 'left') $x = $mx;&lt;br /&gt;elseif ($posh == 'center') $x = $bgw / 2 - $olw / 2;&lt;br /&gt;elseif ($posh == 'right') $x = $bgw - $olw - $mx;&lt;br /&gt;else die('horizontal position is not valid');&lt;br /&gt;&lt;br /&gt;if ($posv == 'top') $y = $my;&lt;br /&gt;elseif ($posv == 'middle') $y = $bgh / 2 - $olh / 2;&lt;br /&gt;elseif ($posv == 'bottom') $y = $bgh - $olh - $my;&lt;br /&gt;else die('vertical position is not valid');&lt;br /&gt;&lt;br /&gt;imagecopy($bg, $ol, $x, $y, 0, 0, $olw, $olh);&lt;br /&gt;&lt;br /&gt;header('Content-type: image/jpeg');&lt;br /&gt;header('Content-Disposition: filename='.$img);&lt;br /&gt;imagejpeg($bg);&lt;br /&gt;imagedestroy($bg);&lt;br /&gt;imagedestroy($ol);&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/code&gt;&lt;a href="http://www.c0wa.com/code/overlay.zip"&gt;Descargar overlay.zip&lt;/a&gt; (53.6kb)&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5569302871996483119-7135252750874405765?l=tehwebmaster.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tehwebmaster.blogspot.com/feeds/7135252750874405765/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/overlay-de-una-imagen-en-php-con-gd.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/7135252750874405765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5569302871996483119/posts/default/7135252750874405765'/><link rel='alternate' type='text/html' href='http://tehwebmaster.blogspot.com/2009/01/overlay-de-una-imagen-en-php-con-gd.html' title='Overlay de una imagen en PHP con GD'/><author><name>marcojetson</name><uri>http://www.blogger.com/profile/03830321448369288053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
