msgbartop
Tips de administración de servidores y herramientas Web
msgbarbottom

Jquery – AutoCompletar

Agosto 10, 2010 Publicado en Admin-tips, JavaScript con 2 Comentarios

En días pasados tuve la necesidad de crear una interfaz web para redacción, donde a partir de un textbox y lo que ellos iban escribiendo, se hacia una consulta a la Base de Datos y les desplegaba unos terminos que contenian el texto hasta ese momento ingresado, para esto utilice jquery y jquery-ui (User Interface), realmente fue muy sencillo y a continuación les muestro los pasos necesarios.

Lo primero que debemos hacer es descargar las librerias de jquery-ui que nos permitirán usar la funcionalidad de autocompletar:

  • Ir a http://jqueryui.com/download
  • En la parte superior derecha hacer click en “Deselect all components” , lo cual dejara el listado limpio
  • En la sección de “Widgets” seleccionar “Autocomplete”, al hacer esto se seleccionarán las librerias necesarias para que el autocomplete funcione sin problemas
  • En la Barra de la Derecha seleccionar la versión 1.8.4 de jquery-ui, y hacer clic en Download
  • Desempaquetar el archivo en una carpeta llamada jquery

Aqui ya tenemos las librerias necesarias para hacer nuestro autocompletar por medio de javascript.

Ahora creamos una página html cualquiera y la modificamos para incluir las librerias js y css antes descargadas, puede ser en el head o en el body del documento html:

<script src="../jquery/js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="../jquery/js/jquery-ui-1.8.4.custom.min.js" type="text/javascript"></script>

Vamos a crear un textbox con id “palabra” que será el que utilizaremos para hacer el llamado al autocompletar, y dos campos de tipo oculto donde vamos a almacenar el id y el valor de la palabra que seleccionemos:

&lt;input id="palabra" size="30" value='' &gt;
&lt;input type='hidden' id='palabraId' value='' &gt;
&lt;input type='hidden' id='palabraTexto' value='' &gt;

Creamos la función que se va a encargar de hacer el llamado al script que trae las posibles opciones a partir del texto ingresado en el textbox:

&lt;script type="text/javascript"&gt;
   $(function() {
   //Se encarga de ejecutar la función autocomplete de jqueryui
      $("#palabra").autocomplete({
         source: function(request, response) {
             //Llamado al script Search.php que devuelve arreglo JSON
             $.getJSON("/Search.php", {
                term: request.term
             }, response);
         },
         minLength: 2, //Numero de caracteres minimos
         //Cuando el usuario selecciona una opción asigna los valores a los campos ocultos
         select: function(event, ui) {
             $("#palabraId").val(ui.item.id);
             $("#palabraTexto").val(ui.item.value);
         },
      })
      //Función que se encarga de desplegar las opciones
      .data( "autocomplete" )._renderItem = function( ul, item ) {
          return $( "&lt;li&gt;&lt;/li&gt;" )
             .data( "item.autocomplete", item )
             .append( "&lt;a&gt;" + item.value + "&lt;/a&gt;" )
             .appendTo( ul );
      };
   });
&lt;/script&gt;
&lt;style&gt;
     //Asignamos un gif para mostrarle al cliente que se estan buscando opciones
    .ui-autocomplete-loading { background: url(../jquery/css/images/indicator.gif) no-repeat right; }
    #palabra{ width: 15em; }
&lt;/style&gt;

El script Search.php debe devolver un arreglo de tipo JSON con las columnas “id” y “value” para que sean desplegadas como opciones en el textbox, aca les dejo un ejemplo de respuesta:

[{"id":711,"value":"Columnistas","total":0},{"id":600,"value":"Econom\u00eda","total":0},{"id":510,"value":"F\u00fatbol   Colombiano","total":0},{"id":100,"value":"Colombia","total":14},{"id":810,"value":"Telecomunicaciones","total":0},{"id":814,"value":"Consejos","total":0},{"id":1113,"value":"Ecolog\u00eda","total":0},{"id":1548,"value":"contenido","total":1},{"id":1562,"value":"Atl\u00e1ntico","total":4},{"id":1572,"value":"Puerto  Colombia","total":1},{"id":1576,"value":"Centro de  Convenciones","total":3}]

Esta es una imagen de como se veria el textbox en el momento en que se escriben dos caracteres:

Llamado a autocompletar al digitar 2 caracteres o más

despues en el momento de navegar con las flechas por las posibles opciones:

Selección de una de las opciones del autocompletar

En siguientes entradas les mostrare como acceder con jquery a las estructuras html, adicionar, modificar y eliminar entidades HTML.

Tags: , , , , , , ,

Los 4 secretos de escalabilidad en Facebook

Junio 24, 2010 Publicado en Escalabilidad, InfraEstructura con 2 Comentarios

Aditya Agarwal, Director de Ingenieía de Facebook, dio una excelente conferencia acerca del escalamiento en Facebook que cubrio su arquitectura, pero la charla realmente fue más sobre como escalar una organizacion preservando lo mejor de su cultura. La clave de la conferencia es:

You can get the code right, you can get the products right, but you need to get the culture right first. If you don’t get the culture right then your company won’t scale.

Puedes tener el codigo bien, puedes tener los productos bien, pero necesitas tener bien la cultura primero. Si no tienes bien la cultura entonces la compañia no podrá escalar

Esto nos lleva a los 4 secretos de escalabilidad en Facebook:

  1. Escalamiento necesita Iteración
  2. No sobredimensione
  3. Escoja la mejor herramienta, pero tenga en cuenta que traerá consigo otras consideraciones
  4. Ajuste la cultura. Muevase rápido – rompa paradigmas. Alto Impacto – equipos pequeños. Sea valiente – innove.

Estas son algunas consideraciones antes de hablar sobre cada uno de los cuatro secretos en Facebook:

Facebook es muy grande

400 millones de usuarios actuvos; los usuarios utilizan facebook 20 minutos al dia en promedio; 5 billones de piezas de contenido (actualizaciones de estado, comentarios, gustos, carga de fotos, carga de videos, mensajes de chat, mensajes de correo, eventos, paginas de fans, conexiones de amigos) son compartidas en facebook cada semana; 3 billones de fotos cargadas cada mes; 250 aplicaciones que tienen mas de 1 millon de usuarios al mes; 80.000 conexiones de aplicacion, 500.000 aplicaciones; 2 millones de desarrolladores; 150 millones de operaciones por segundo en memcache; miles de servidores de memcache con decenas de Terabytes en memoria.

Facebook es dificil de escalar

Cada tipo de contenido tiene su propio patrón de acceso lo cual hace dificil el escalamiento. Todos usan Facebook de una manera diferente. Cada experiencia de usuario es unica. La mayoria de sitios web escalan de manera horizontal, porque su data puede ser particionada. En Facebook los usuarios no pueden ser particionados porque pueden unirse a cualquier red, Facebook es una red global que trata de cautivar a todo el mundo, permite a cualquiera ser amigo de cualquiera, y puede representar cualquier relación entre usuarios. cada usuario nuevo puede acceder los datos de cualquier otro usuario por lo tanto no se puede particionar geograficamente o por otra tipo de criterio. En promedio, cada usuario de Facebook tiene 130 amigos.

La arquitectura tiene 4 componentes principales

  • Balanceador de Carga
  • Servidores Web (PHP)
  • Servicios (Buscador, publicidad, memcache,etc)
  • Bases de Datos

Los 4 secretos de escalabilidad en Facebook

1. Escalamiento necesita Iteración. Las soluciones por lo general funcionan al principio, pero deben ser modificadas a medida que pasa el tiempo. Lo que funciona en el primer año, podria no funcionar despues. PHP, por ejemplo, es simple usarlo al principio, pero no es una buena elección cuando se tienen miles de webservers.

Otro ejemplo son las fotos, actualmente sirven 1.2 millones de fotos por segundo. La primera versión se creo de la manera facil, sin preocuparse ucho por como escalaba, simplemente enfocandose en que funcionara bien. El cargador almacenaba el archivo en un NFS y la meta-data en MySql, funciono bien los 3 primeros meses y causo muchas noches sin poder dormir, aun lo hace. El Time to market, o tiempo para salir al mercado fue la ventaja más competitiva que se tenia, tener la funcionalidad era más importante que si esta escalaba bien o no.

La segunda fase fue la optimización, se evidencio que las imagenes pequeñas son mas accesadas por lo cual se empezaron a almacenar en cache, además empezaron a usar un CDN, el servicio NFS no fue diseñado para almacenar 80 billones de pequeños archivos, asi que toda la meta-data no se ajustaba a la memoria, por lo cual eran necesarios 2 o 3 IOs a disco, lo cual era lento.

La tercera fase es un sistema que crea un archivo que es un BLOB almacenado en el sistema de archivos. Las imagenes son almacenadas en un BLOB y se conoce el offset de la foto en el BLOB para su recuperacion, esto se traduce en 1 IO por cada foto.

2. No sobredimensione. Unicamente utilice lo necesario a medida que va escalando. Descubra donde debe iterar en una solución, optimice o construya la solución usted mismo. Ellos dedicaron mucho tiempo tratando de optimizar PHP, terminaron escribiendo HipHop, un transformador de código que convierte PHP en C++, lo cual genero una cantidad masiva de ahorro en CPU y memoria. Esto no debe ser realizado en el dia 1, pero deberia, enfoquese primero en el producto antes de escribir un lengueaje nuevo por completo.

3. Escoja la mejor herramienta, pero tenga en cuenta que traerá consigo otras consideraciones. Si usted realmente necesita usar Python adelante, pero tenga en cuenta que tendrá su costo, usualmente en instalación, monitoreo, operación. Si usted decide usar una arquitectura basada en servicios, tendrá que construir la mayoria del backend usted mismo y eso toma tiempo, con LAMP por ejemplo tiene todo esto gratis. A medida que incursiona en el alcance por servicios, tendrá que reinventar la rueda.

4. Ajuste la cultura. Muevase rapido – rompa paradigmas. Alto Impacto – equipos pequeños. Sea valiente – innove. Construya un ambiente interno que promueva la construcción correcta de las funcionalidades y despues se optimicen segun sea necesario, sin preocuparse por la innovación, sin preocuparse por romper paradigmas, pensando en grande, pensando en que será lo siguiente en construir despues de este primer paso. Usted puede tener el codigo correcto, los productos correctos, pero si la cultura no es la apropiada no podrá escalar de manera eficiente.

  • Muevase rápido. Sea el primero en el mercado, esta bien si rompe paradigmas. Por ejemplo, Facebook corre en una capa web compuesta en su totalidad por HipHop, el cual fue desarrollado por 3 personas. Muy arriesgado, esto llevo a que el sitio se cayera regularmente (Sin memoria, cilcos infinitos), pero al final la recompensa es que encontraron como hacer que funcionará. La alternativa era que se realizaran pruebas durante 3 meses, lo cual retrasaba todo el desarrollo. Este es un ejemplo puntual, pero lo más importante es la cultura, que la gente crea que lo más importante es que tan rápido se pueden mover en el mercado.
  • Alto Impacto. Los equipos pequeños pueden hacer grandes cosas. Buscador, fotos, chat, HipHop, fueron desarrollados por pequeños equipos. Arme los equipos con la gente adecuada, empoderelos y dejelos trabajar.
  • Sea Valiente. No le tema al fracaso, esta bien intentar cosas nuevas y fallar, puede ser descabellado decir “Vamos a hacer una nueva JVM”, pero la recompensa puede ser grandiosa cuando funciona.

En Facebook no hay dueños del producto, todos son dueños del producto. Dele a la gente apropiación de lo que hacen, si solo una persona obtiene el crédito, entonces nadie contribuira para llevar el producto al siguiente nivel. Las ideas vienen internamente de los usuarios y las personas, si la responsabilidad no esta distribuida y solo un número de personas siente que son parte del producto, entonces solo ellos serán suceptibles de ser motivados. Moverse rápido no es solo un deseable, las compañias deben encontrar maneras para que la gente sienta que es una realidad.

A continuación les dejo el link donde pueden ver el video completo de la conferencia :

http://www.infoq.com/presentations/Scale-at-Facebook

Tags: , , , , , , , , , , , , , , , , ,

Comandos linux para asignar propietario de archivos y carpetas

Junio 23, 2010 Publicado en Admin-tips, InfraEstructura con 0 Comentarios

En Red Hat, y en linux en general, encontramos que todo esta basado en archivos, inclusive los directorios en realidad son archivos especiales donde en su estructura se lista los archivos que contiene, pero esto lo veremos en una entrada posterior sobre el sistema de archivos y los inodos. Adicional a esto, para todos los archivos tenemos un usuario propietario y un grupo propietario:

[niquepa@vm1 ~]$ ls -l /tmp/
-rw-r–r– 1 niquepa wordpress 192 Jun 23 13:40 basura
-rw-r–r– 1 root          root     109 Jun 23 16:47 abc.txt
-rw-r–r– 1 root          root     381 Nov 10  2005 index.html
drwx—— 2 root root 4096 Jun 23 16:38 deploy
-rw-rw-r– 1 zabbix     zabbix 26976 Jun 18 17:08 zabbix_agentd.log
[niquepa@vm1 ~]$

en el anterior comando podemos observar que para el archivo “basura” el usuario propietario es “niquepa” y el grupo propietario es “wordpress”, al igual que para el directorio “deploy”. Existe una manera de cambiar estos propietarios, para efectos de seguridad principalmente, y es por medio de dos comandos “chown” y “chgrp”, aunque con “chown” es más que suficiente.

chown
Asigna el usuario propietario, y el grupo propietario si asi se quiere
chgrp
Asigna el grupo propietario, en caso de solo querer cambiar el grupo

Sintaxis para usar chown:

chown [OPCIONES]... [USUARIO][:GRUPO] ARCHIVO...

a continuación mostramos dos ejemplos de que como se usa, y en rojo se pueden evidenciar los cambios:

[niquepa@vm1 ~]$ ls -l /tmp/
-rw-r–r– 1 niquepa wordpress 192 Jun 23 13:40 basura
-rw-r–r– 1 root          root     109 Jun 23 16:47 abc.txt
-rw-r–r– 1 root          root     381 Nov 10  2005 index.html
drwx—— 2 root root 4096 Jun 23 16:38 deploy
-rw-rw-r– 1 zabbix     zabbix 26976 Jun 18 17:08 zabbix_agentd.log
[niquepa@vm1 ~]$ chown root basura
[niquepa@vm1 ~]$ ls -l /tmp/
-rw-r–r– 1 root wordpress 192 Jun 23 13:40 basura
-rw-r–r– 1 root          root     109 Jun 23 16:47 abc.txt
-rw-r–r– 1 root          root     381 Nov 10  2005 index.html
drwx—— 2 root root 4096 Jun 23 16:38 deploy
-rw-rw-r– 1 zabbix     zabbix 26976 Jun 18 17:08 zabbix_agentd.log
[niquepa@vm1 ~]$ chown -R niquepa:wordpress deploy
[niquepa@vm1 ~]$ ls -l /tmp/
-rw-r–r– 1 root          wordpress 192 Jun 23 13:40 basura
-rw-r–r– 1 root          root     109 Jun 23 16:47 abc.txt
-rw-r–r– 1 root          root     381 Nov 10  2005 index.html
drwx—— 2 niquepa wordpress 4096 Jun 23 16:38 deploy
-rw-rw-r– 1 zabbix     zabbix 26976 Jun 18 17:08 zabbix_agentd.log

al escribir dentro de las opciones -R estamos diciendo que queremos cambiar de manera recursiva el propietario para todos los archivos que contenga la carpeta. dentro de las posibles opciones tenemos:

-c, --changes 
Reporta unicamente los cambios realizados sobre archivos o carpetas

--dereference
Afecta el archivo o carpeta que se referencia en un link simbolico, en lugar de modificar el link simbolico como tal, Asi se comporta por defecto

-h, --no-dereference
Afecta el link simbolico en lugar de su referencia

-f, --silent, --quiet
Ejecuta de manera silenciosa

-R, --recursive
 Ejecuta de manera recursiva para directorios

-v, --verbose 
Muestra mensajes en pantalla de cada archivo o carpeta procesados

Sintaxis para usar chgrp:

chgrp [OPTION]... GROUP FILE...

Por medio de este comando modificaremos unicamente el grupo propietario de los archivos o las carpetas deseadas, y tiene las mismas opciones disponibles que “chown”

Tags: , , , , , , , , , , , , ,

Google TV – El TV conoce Internet. Internet conoce al TV

Junio 22, 2010 Publicado en Tecnología con 1 Comentario

google TvGoogle TV es una nueva experiencia hecha para combinar la televisión que conoces y te gusta, con la libertad y el poder de Internet.

Lo que quiere google con google TV, es que tengamos la libertad de ver lo que queremos ver, cuando lo queremos ver y no cuando lo estan presentando en la televisión común, sin necesidad de ajustarnos a los horarios que establecen los canales.

Porque ahora buscar los videos de nuestros programas favoritos en google Tv y no en youtube por ejemplo?, sencillo, la pantalla de un computador no se compara con los centros de entreteniemiento que tenemos en nuestros hogares hoy en dia.

Google anuncia que los TVs más recientes lo van a traer de fabrica, pero tambien es posible disfrutar google Tv en cualquier televisor por medio de un adaptador.

A continuación un video que explica la apuesta de google ahora en el mercado de la televisión:

Tags: , , , , ,

Microsoft hace publico el nombre de Kinect, su sistema de control por movimientos

Junio 21, 2010 Publicado en Xbox360 con 1 Comentario


Microsoft bautizó con el nombre de Kinect a su nuevo sistema de juegos con sensor de movimientos , que permitirá ofrecer un avance en los próximos títulos, con el objetivo de atraer a una nueva generación de jugadores ocasionales a la consola Xbox, que cuenta con 40 millones en todo el mundo.

En una representación preparada por el Cirque du Soleil, la compañía puso en escena simulaciones de cómo serían los juegos. Entre ellos había un torneo de atletismo, un simulador de conducción de autos y un juego de la Guerra de las Galaxias en el que se controla a un caballero Jedi y que arrancó aplausos.

Microsoft no anunció a los editores de juegos para Kinect, antes apodado Proyecto Natal , ni divulgó ningún otro detalle. LucasArts produce los títulos de la Guerra de las Galaxias.

Analistas estiman que el dispositivo de tres cámaras, que estará en las tiendas en noviembre en Estados Unidos, y de forma progresiva se lanzará en otros mercados.

La configuración, que permite juegos completamente manos libres y controlar la consola con órdenes de voz, está diseñada para atraer a jugadores casuales y principiantes, más que para jugadores incondicionales, dijeron analistas.

“Hay un montón de niños y madres que quieren tener una experiencia interactiva juntos”, dijo Mike Delman, vicepresidente de marketing mundial para la división de entretenimiento interactivo de Microsoft.

La ráfaga de nueva tecnología llega justo cuando la industria, que hace parecer pequeña la taquilla de películas de 10.000 millones de dólares, lo necesita.

Las ventas totales en Estados Unidos de hardware, software y accesorios han bajado más de un 10 por ciento, a 4.700 millones de dólares este año hasta abril, según la firma de investigación minorista NPD Group.

Cinco años después de su lanzamiento, hay más de 40 millones de Xbox 360s en hogares de todo el mundo y 23 millones de suscriptores de pago para la Xbox Live, según Microsoft.

La ambición de Microsoft, pese a su irregular historial a la hora de comprometer a los consumidores más allá de los juegos, es convertir a la Xbox en el nexo del entretenimiento del hogar. Ya ofrece películas de Netflix y música de Zune y vídeos a través de su suscripción online de Xbox Live.

Saldrá a la venta el proximo 4 de Noviembre de 2010 a un costo de $149.99 dolares, aca les dejo el link donde puede comprarlo ya en preventa

Microsoft Kinect en Amazon

Tags: , , , , , , ,