AlphaAr

AlphaAr

This user hasn't shared any profile information

Home page: http://www.rgnu.com.ar

Posts by AlphaAr

Gwibber: Ubuntu y las Redes Sociales

1

Siempre dije que no entendía cual era “la cosa” con esto de las redes sociales, con el Facebook, Twitter y cuanta red social apareciera, aunque la verdad sea dicha, tengo mi cuenta en varias redes sociales, dígase HI5, Facebook, Twitter, Linked In, Menéame… en la única que tenía actividad constante era en Menéame, pero luego cada vez más el contenido de esta se empezo a enfocar en una región (España o Europa) y bueno, aquí lo interesante era intercambiar opiniones y votar noticias, pero, que iba a comentar y a votar si por un lado no entendía las noticias y por otro tampoco me importaban? así que terminé abandonando la única red social que alguna vez me interesó.

Con el resto de redes sociales, nunca terminaron de atraerme por completo y nunca me concentré en ninguna de ellas, de vez en cuando miraba mi twitter y llegaba tarde a los mensajes que alguna vez me enviaron, asi que si vos sos uno de los que alguna vez me escribió, perdón hermano. Lo mismo pasó con mi cuenta de Facebook, y no digamos el HI5, a este último ni asunto le puse, abrí mi cuenta solo porque alguien me envió una invitación y queria ver algunas fotos pero de allí nunca subi nada.

Con el cambio de versión de Ubuntu se anunciaba que esta versión introduciría aplicaciones para redes sociales, y que muchas de sus funciones estaban orientadas a hacer fácil el manejo de tus cuentas, específicamente había una aplicación que me llamaba la atención y tenía curiosidad de explorar, se trataba de Gwibber.

Gwibber es un intento por centralizar en un solo lugar la interacción con las redes sociales, esto para mi tiene mucho sentido pues el principal problema que tengo es que no me gusta estar yendo de red en red para ver si hay nuevos mensajes o actualizaciones de mis amigos, con Gwibber en un solo lugar se tiene acceso a Facebook, Twitter, FriendFeed, Digg y algunas otras.

Estoy usando Gwibber desde hace un mes y la experiencia ha sido buena, hay cosas que podrían mejorar pero aún asi me parece una buena alternativa, ya que me evita el tener que ir a cada sitio. Ahora le doy seguimiento a los que escriben mis amig@s y llego a tiempo para responder los mensajes :D , lo cual ha mejorado mucho mi percepción de las redes sociales, más ahora que he encontrado en Facebook amigos que no veo desde hace años.

(más…)

Node.js – Express vs Sinatra Benchmarks

2

Siguiendo con una serie de post referidos a Node.js, vamos a ver a continuación una serie frameworks para Node.js y su performance respecto a sus contrapartes para Ruby.

Comenzamos realizando un benchmark para Express, con resultados realmente sorprendentes! Los números indicados deben tomarse a la ligera, sin embargo, coinciden en afirmar que Express es bastante rápido.

Si estás interesado en realizar un benchmark de tus propias aplicaciones web puedes leer el artículo ApacheBench Gnuplot Graphing Benchmarks.

Todos los benchmark que verás a continuación fueron realizado con ApacheBench, una concurrencia de 50 y realizando 2000 requests. Tené en cuenta que se utilizó Thin para servir Sinatra requests.

Express vs Sinatra

Para los que no conocen Express, es un NodeJS framework inspirado en Sinatra para Ruby. Debajo pueden encontrar los resultados de un benchmark para un típico “Hello World” response, que incluye NodeJS benchmarks sin el overhead de las características provistas por Express:

Express vs Sinatra Benchmark

Express vs Sinatra
(más…)

Node.js – Server-Side JavaScript

4

Si, ya no solamente para los navegadores web. Aunque existan varias implementaciones de javascript, entre ellas Rhino, Flusspferd, Narwhal (el equivalente de JRuby, IronRuby, MRI, etc) la que está tomando mayor tracción es Node.js.

Node.js es un framework en javascript para el desarrollo de aplicaciones web en el lado del servidor. A partir de todas las implementaciones mencionadas, en enero del 2009 Kevin Dangoor se creo el proyecto de CommonJS, con el fin de crear una especificación que cada implementación pueda cumplir y así tener un API I/O en común.

Node.js es un tanto diferente de otras soluciones, porque está orientado al evento en lugar de ser basado en threads. Web servers como Apache están diseñados en base al modelos de thread, porque utilizan un thread/process para cada request entrante. Mientras esto funciona correctamente para muchas aplicaciones, el módelo de threads no escala muy bien con demasiadas conexiones, como las que se necesitan para servir aplicaciones de tiempo real como Friendfeed o Google Wave.

Node.js, usa un modelo de event loop en lugar de threads, de esta forma puede escalar para manejar ciento de miles de conexiones concurrentes. Node.js toma ventaja del hecho de que los servidores pasan la mayoría del tiempo esperando por operaciones de I/O, como leer un file desde el disco, acceder a servicios web externos o esperar para que el upload de un file termine, porque estas operaciones son mucho más lentas que las realizadas en memoria. Todas las operaciones de I/O en Node.js son asincrónicas, de esta forma el server puede continuar procesando request entrantes mientras espera que las operaciones de I/O finalicen. JavaScript esta muy bien preparado para la programación orientada a eventos, porque tiene funciones anónimas y closures que permiten definir callbacks inline, además que los desarrolladores en JavaScript ya conocen como programar de esta forma. Este modelo event-based hace de Node.js muy rápido, y hace que escalar aplicaciones de tiempo real sea muy sencillo.

Paso 1. Instalación
Node.js corre en sistemas tipo Unix, como Mac OS X, Linux, y FreeBSD. Desafortunadamente o no ;) , Windows no está soportado. Vas a necesitar utilizar la terminal para instalar y correr Node.js.

Abre una terminal y corre los siguientes comandos.

$ wget http://github.com/ry/node/tarball/v0.1.99
$ tar -zxvf ry-node-v0.1.99-0-ga620b72.tar.gzls
$ cd ry-node-87230e6
$ ./configure
$ make

(más…)

La pantalla de inicio se ve mal – Ubuntu 10.04 Lucid Lynx

11


Y aquí viene otra de las sorpresas desagradable. Plymouth es el nuevo sistema, heredado de Fedora, que sustituye a XSplash, que a su vez sustituía a USplash (que es similar a Plymouth :( ) para acompañarnos en el arranque del equipo. Si bien el arranque no es tan rápido como cabría esperar después de todo lo que se ha hablado (la búsqueda del arranque en 10 segundos), lo cierto es que es sensiblemente más rápido que las ediciones anteriores y que otros sistemas operativos. Sin embargo, no son pocos los equipos que tienen estos problemas de video que comentan. En su caso, el Splash screen se mostrará con una resolución limitada, generalmente de 640×480 pixels y 4 bits de profundidad de color, por lo que se verá “dentado” o “pixelado”, con unos escasos 16 colores en total.

Les indicaré una solución que he probado con un equipo Acer Aspire 5542 munido de video ATI 4200, y que además emplea el controlador privativo ATI Catalyst 10.4 en Ubuntu Karmic 64 de bitios.

(más…)

Ubuntu Lucid Lynx se queda sin sonido

2

Ya vimos, al descubrir Ubuntu Lucid Lynx, que podemos tener problemas con el sonido. A mí me sucedió cuando actualicé de Karmic Koala y hace un par de días me preguntaban por este problema (que al menos para mí se ha convertido casi en una tarea rutinaria), así que creo que es interesante volver a tocar el tema.

Lo primero que tenemos que comprobar es si tenemos volúmen. Lo más fácil será hacerlo desde el icono de la bandeja de sistema, pero desde consola también es posible lanzando alsamixer.

Si todo está OK, procedemos a borrar la carpeta de configuración, en nuestra carperta personal:

sudo rm -R /home/usuario/.pulse

Donde usuario es tu nombre de usuario en el sistema.

NetworkManager disabled en Kubuntu 10.04 Lucid Lynx

7

Después de instalar las últimas actualizaciones en Kubuntu 10.04 LTS ya no me pude conectar a ninguna red usando el applet NetworkManager, incluso el icono muestra el estado de desactivado, al dar clic derecho aparece el mensaje de “Network management is disabled” y no da la opción de activarlo.
Después de unos segundos de buscar en google información de “lucid network management is disabled” encontre el bug 555571 en el cual explican el problema tal cual como me paso y la resolución, aquí les dejo mi versión para resolver el problema.
Veamos el archivo del estado de NetworkManager:

$ cat /var/lib/NetworkManager/NetworkManager.state
[main]
NetworkingEnabled=false
WirelessEnabled=false
WWANEnabled=true

Como podemos ver el soprte de red cableado (NetworkEnabled) y la inalambrica (WirelessEnabled) están desactivados.

Cambiamos los valores de false a true:

$ sudo sed -i s/false/true/ /var/lib/NetworkManager/NetworkManager.state

Y reinicie el servicio de NetworkManager:

$ sudo restart network-manager

Y listo Network Manager vuelve a estar activo y ya me pude conectar a la red inalambríca.
Para más información puede ver el Ubuntu Bug #555571.

Ejecutando procesos en paralelo con Javascript

0

El sistema usado en el ejemplo que croczilla.com publica, está desarrollado usando Stratified Javascript (SJS), una implemenetación de Javascript con Javascript O.o. Se trata de una librería multinavegador que nos permite añadir concurrencia a Javascript fácilmente.
La clave está en el uso de tags <script/> de un tipo diferente al que conocemos como text/javascript, usando uno propio se encarga de evaluar el código contenido en él añadiendo una serie de funcionalidades como hold(),resume(), suspend() y la posibilidad de usar concurrencia en Javascript.

Ejemplo

<script type="text/javascript" src="sjs-loader.js"></script>
<script type="text/sjs">
….
function animate(elemname, duration_ms, step_ms) {
 var elem = document.getElementById(elemname);
 var start_time = new Date();
 var x = 0;
 do {
 elem.style.left = x;
 x = (x + 10) % 200;
 hold(step_ms); // Parando la ejecución
 } while (duration_ms > new Date() - start_time);
 }

 function par(a, b) {
 alert("all done");
 }
 // Procesos paralelos
 par(animate("animated_element_1", 10000, 100),
 animate("animated_element_2", 7000, 80));
…
</script>

Como podemos ver, en esta porción de código sacada de una demo de crockzilla.com, usamos hold() para detender la ejecución y usamos el paso de parámetros para comenzar la concurrencia de procesos.
Con los Web Workers a la vuelta de la esquina, estas técnicas nos puedes empezar a mostrar el camino a seguir en unos meses (años). Por el momento, recomendaría usarla con precaución ya que no debemos olvidar que la librería basa su funcionamiento en la evaluación del código, con el coste que esta operación conlleva.

Remote Tail sobre HTTP con Shell Script

1

Surgió un problemática en el trabajo, debíamos debuguear lo que estaba sucediendo en unos Solr que se encontraban en el datacenter y la única via de acceso a los logs era por medio de un webserver.

Seguramente alguien desarrollo alguna herramienta para hacer los mismo que hacemos con nuestro querido tail, pero con files que se encontraban accesible via HTTP. Pero lamentablemente o no, yo no encontre ninguna, y lo primero que se me vino a la mente es el resume, que tienen algunas utilidades de download.

Así que hechando mano a algunas herramientas disponible en la mayoría de los UNIX (bash, curl, awk, wc, cat), y después de un rato de darle vuelta salió este engendro, que si bien no tiene mucho diseño, ni patrones, ni nada por el estilo, increiblemente funciona :) . Por si alguno tiene la misma problemática acá les dejo esta pequeña porción de código, espero les sirva

URL='http://example.com/access.log'; \
SIZE=$(curl -I "$URL" 2> /dev/null | awk '/Content-Length:/ {printf("%d", $2)}'); \
while [ 1 ]; do \
curl -r$SIZE- "$URL" > /dev/null > out; cat out; \
LEN=$(cat out | wc -c); \
SIZE=$(expr $SIZE + $LEN ); \
sleep 1; \
done

La salida se puede combinar con otro comando (siguiendo la filosofía UNIX)

URL='http://example.com/access.log'; \
SIZE=$(curl -I "$URL" 2> /dev/null | awk '/Content-Length:/ {printf("%d", $2)}'); \
while [ 1 ]; do \
curl -r$SIZE- "$URL" 2> /dev/null > out; \
cat out; \
LEN=$(cat out | wc -c); \
SIZE=$(expr $SIZE + $LEN ); \
sleep 1; \
done | grep foo

Ubuntu 10.04 – Mover los botones de ventana hacia la derecha

9

Uno de los cambios más polémicos en Ubuntu 10.04 es el cambio inspirado en Mac OS para tener botones de la ventana en el lado izquierdo. Le mostraremos cómo mover los botones de nuevo a la derecha.

(más…)

Análisis: Ubuntu 10.04 (Lucid Lynx)

0

Finalmente está aquí. Fieles a su puntualidad, las mentes maestras de Canonical han puesto en línea la versión final de Ubuntu 10.04 LTS, también conocido como Lucid Lynx. Hace no muchos días le dimos un vistazo a la beta, y si bien quedaban varios detalles por resolver, Ubuntu ha llegado tanto en fecha como en forma. La importancia de esta versión no acepta discusión: Al ser un LTS, veremos a Ubuntu 10.04 al menos durante los próximos tres años.

Han pasado dos años desde la última versión LTS. A pesar de las varias actualizaciones intermedias, una cantidad considerable de usuarios ha conservado a esta versión de soporte extendido, y de hecho hemos visto que varios de nuestros lectores la seguían recomendando en los comentarios sobre los análisis de otras versiones de Ubuntu. Pero incluso para esta clase de ediciones, llega el momento de seguir adelante, más allá de que Hardy Heron todavía cuente con un año de soporte en su versión de escritorio. Los cambios y las mejoras que ha experimentado el mundo Linux en general, están mejor reflejados a través de una nueva distro, por más sólido que sea el sistema de actualizaciones. La gente de Canonical ha depurado su cronograma de versiones hasta alcanzar una impresionante precisión. El ciclo abril-octubre funciona muy bien, y nos alegra saber que no han hecho alteraciones en ese aspecto. ¿Por qué? Porque el sistema operativo en sí ha tenido varios cambios, y no todos han sido del agrado de los usuarios. Quienes ya hayan visto más de cerca a la beta entienden lo que estoy diciendo, pero para los que recién se nos unen en el recorrido por esta nueva versión de Ubuntu, será mejor que elaboremos.

Ubuntu 10.04, recién instalado

Ubuntu 10.04, recién instalado

(más…)

AlphaAr's RSS Feed
Go to Top