12/26/2012

Eliminar los ficheros .DS_Store y ._*


Los ficheros ".DS_Store" son unos ficheros ocultos que Mac OS X utiliza para almacenar ciertos metadatos como por ejemplo la posición del icono en pantalla. Estos ficheros en Mac OS X y en Linux permanecen ocultos, pero en Windows se vuelven visibles. Si utilizamos un pendrive USB de un compañero en nuestro Mac, cuando él lo conecte en su PC con Windows, verá una gran cantidad de ficheros .DS_Store que para él no tienen ninguna utilidad. Para elimiar estos ficheros solo abre la aplicación "Terminal" y ejecuta el siguiente comando:

 find /Volumes/PENDRIVE -name ".DS_Store" -depth -exec rm {} \;  

Lo mismo ocurre con los ficheros "._". Estos ficheros son "resource fork" que se crean en un volumen externo. En los sistemas de ficheros de Apple hay soporte para dos tipos de información de ficheros: uno es el resource fork y el otro es el data fork. El data fork contendrá información suministrada por el usuario, tal como el texto de un documento, y el resource fork contendrá información acerca del documento, tal como autor, preferencias específicas del documento, la aplicación que lo debe abrir y otros metadatos.

En los sistemas de ficheros de Mac OS X estos forks son tratados como un archivo, y aparecen como tal, sin embargo, los resource forks no son soportados por muchos sistemas de ficheros, incluyendo aquellos usados en máquinas de Windows. Como tal, cuando los usuarios copian ficheros a esos sistemas, el resource fork puede perderse. Por lo tanto, Apple ha construido un sistema en OS X que automáticamente divide el archivo en resource y data cuando son copiados a discos que no soportan resource forks.

 find /Volumes/PENDRIVE -name "._*" -depth -exec rm {} \;  

Los usuarios de Mac pueden evitar que los ficheros .DS_Store se creen en volúmenes en red (o en sus carpetas internas) añadiendo el siguiente comando en la aplicación "Terminal":

 defaults write com.apple.desktopservices DSDontWriteNetworkStores true  

Una ves realizada esta tarea, cierra la sesión o reinicia el ordenador.

Notas
  • El comando anterior funciona perfectamente, pero sólo sobre discos compartidos. Si "pinchas" un pendrive USB, los ficheros .DS_Store, y los ficheros ._ de recursos se seguirán escribiendo.
  • Normalmente las unidades de almacenamiento USB (pendrives) se montan en "/Volumes", pero si no está ahí y no tienes idea donde está montada la unidad puedes preguntarle a la "Utilidad de Discos", revisando la sección de "Punto de montaje".

Fuentes

12/17/2012

Herramientas y trucos para Arduino

Arduino tiene un editor de código, digamos que no muy pulido comparado con Sublime Text 2 o Notepad++, pero tenemos un truco para solventar eso.

Nos vamos a las preferencias del editor de Arduino y seleccionamos la opción "Usar editor externo" y guardamos los cambios, esto hace que el editor se bloquee y NO permita editar los ".ino" (los abre como "solo lectura"), ahora abrimos nuestro editor favorito y al guardar los cambios realizados en el sketch el editor de Arduino refrescará los cambios automáticamente pudiendo así subir las últimas modificaciones a nuestra placa.

Fritzing
Es una herramienta para crear y documentar diseños y prototipos de placas, la he ocupado para el proyecto "Topo", es intuitiva y de fácil uso, la recomiendo básicamente para la documentación de nuestros proyectos y así poder compartir de una manera mas "ordenada" los prototipos.



Y como bonus-track, le dejo un blog que nos ayudará a formatear nuestros códigos fuentes para su publicación web.

Fuentes

11/21/2012

Juego del topo en Arduino

Arduino Duemilanove
El juego es sencillo, se encienden unas luces de colores aleatoriamente que están vinculadas a unos botones, si presionamos el botón incorrecto se enciende la luz roja, de lo contrario se apaga la luz recién encendida.

Para construir este juego solo necesitamos una placa Arduino UNO, 3 LEDs, cables, 2 botones, 5 resistencias (3 de 1K ohms para los LEDs y otras 2 de 10k ohms para los botones) y una pequeña breadboard.

Un ejemplo básico entre un botón y un LED

En la página oficial de Arduino existen diversos tutoriales, donde explican detalladamente los distintos componentes de la placa, instalación y la forma de diseñar y programar. Si ya entiendes los conceptos básicos entonces estamos listos para revisar algo de código:

Mole.h
Este archivo corresponde a la cabecera de nuestro proyecto, contiene las declaraciones de los métodos y atributos.
 /*  
  Mole.h - Library for mole game.  
  Created by brionescl, July 23, 2012.  
  Released into the public domain.  
 */  
 #ifndef Mole_h  
 #define Mole_h  
 #include "Arduino.h"  
 #define MAXLEDS 2  
 #define MAXBUTTONS 2  
 class Mole {  
      public:  
           Mole();  
           void setLed(int pin);  
           void setLedError(int pin);  
           void setButton(int pin);  
           void switchLed(int ledId, bool state);  
           void switchLedError(bool state);  
           void calculateRandomLed();  
           void captureButtonPress();  
           int timeLapse;  
           int maxTimeLapse;  
           int buttonPress;  
           int randomLed;  
      private:  
           int _ledId;  
           int _buttonId;  
           int _leds[MAXLEDS];  
           int _buttons[MAXBUTTONS];  
           int _pinLedError;  
 };  
 #endif  

Mole.cpp
Aquí se encuentra el desarrollo (lógica) de los métodos y uso de los atributos de la clase "Mole".
 /*  
  Mole.cpp - Library for mole game.  
  Created by brionescl, July 23, 2012.  
  Released into the public domain.  
 */  
 #include "Arduino.h"  
 #include "Mole.h"  
 Mole::Mole() {  
      _ledId = 0;  
      _buttonId = 0;  
      randomLed = -1;  
      timeLapse = 0;  
      maxTimeLapse = 1000; // 1 second  
      buttonPress = -1;  
      randomSeed(analogRead(0));  
 }  
 void Mole::setLed(int pin) {  
      if (_ledId < MAXLEDS) {  
           _leds[_ledId++] = pin;  
           pinMode(pin, OUTPUT);  
      }  
 }  
 void Mole::setButton(int pin) {  
      if (_buttonId < MAXBUTTONS) {  
           _buttons[_buttonId++] = pin;  
           pinMode(pin, INPUT);  
      }  
 }  
 void Mole::setLedError(int pin) {  
      _pinLedError = pin;  
      pinMode(pin, OUTPUT);  
 }  
 void Mole::switchLed(int ledId, bool state) {  
      if (state == true) {  
           digitalWrite(_leds[ledId], HIGH);  
      } else if (state == false) {  
           digitalWrite(_leds[ledId], LOW);  
      }  
 }  
 void Mole::switchLedError(bool state) {  
      if (state == true) {  
           digitalWrite(_pinLedError, HIGH);  
      } else if (state == false) {  
           digitalWrite(_pinLedError, LOW);  
      }       
 }  
 void Mole::calculateRandomLed() {  
      randomLed = random(0, MAXLEDS);  
 }  
 void Mole::captureButtonPress() {  
      int button = 0;  
      for (int buttonId = 0; buttonId < MAXBUTTONS; buttonId++) {  
           button = digitalRead(_buttons[buttonId]);  
           if (button == HIGH) {  
                buttonPress = buttonId;  
                break;  
           } else {  
                buttonPress = -1;  
           }  
      }  
 }  

Mole.ino
La definición de nuestro sketch
 #include <Mole.h>  
 const bool ON = true;  
 const bool OFF = false;  
 Mole mole;  
 void setup() {  
      //Serial.begin(9600);  
      // pin LEDs  
      mole.setLed(12); // 1 kohms +/-5  
      mole.setLed(11); // 1 kohms +/-5  
      // LED error  
      mole.setLedError(10); // 1 kohms +/-5  
      // pin Button  
      // 3.3v  
      mole.setButton(3); // 10 kohms +/-5  
      mole.setButton(2); // 10 kohms +/-5  
      mole.calculateRandomLed();  
      mole.maxTimeLapse = 2000; // 2 seconds  
 }  
 void loop() {  
      mole.captureButtonPress();  
      if (mole.buttonPress != -1) {  
           //Serial.println(mole.buttonPress);  
           mole.switchLed(mole.randomLed, OFF);  
           if (mole.randomLed == mole.buttonPress) {  
                delay(1000);  
           } else {  
                mole.switchLedError(ON);  
                delay(2000);  
                mole.switchLedError(OFF);  
           }  
           mole.timeLapse = 0;  
           mole.calculateRandomLed();  
      } else {  
           //Serial.println("NO PRESS");  
      }  
      if (mole.timeLapse == mole.maxTimeLapse) {  
           mole.timeLapse = 0;  
           mole.switchLed(mole.randomLed, OFF);  
           mole.switchLedError(ON);  
           delay(500);  
           mole.switchLedError(OFF);  
           mole.calculateRandomLed();  
      } else {  
           mole.switchLed(mole.randomLed, ON);  
           delay(1);  
           mole.timeLapse++;  
      }  
 }  
Diseño y cableado del proyecto


Fuentes

11/08/2012

Actualizar ICS en Sony Xperia S

Creo que algunos ya vienen de fábrica, otros solo reciben un mensaje para actualizar (via OTA o por USB), pero hay quienes les gusta (me incluyo) instalar desde cero una ROM a nuestro celular.

Instalar Ice Cream Sandwich (ICS) desde cero es muy sencillo, solo hay que descargar un par de cosas, seguir unos pasos (en windows) y ya está.

En este tutorial explican detalladamente el como hacerlo, de todas maneras les resumo los pasos mas importantes:

  • Descargar FlashTool e instalar
  • Descargar la ROM oficial para tu modelo (en mi caso Xperia S) y copiar el archivo FTF en "C:/FlashTool/firmwares
  • Muy importante "Apagar el celular con al menos 80% de batería" y ejecutar el software FlashTool
  • Hacer click en el botón "Flash" en FlashTool y seleccionar la ROM descargada
  • Conecta el celular en "modo flash" (en mi caso fue enchufar el USB al celular manteniendo apretado el botón "bajar volumen", ojo el celular tiene que estar apagado)
  • Esperar a que se instalen las fuentes (15 minutos aproximadamente) y reiniciar el celular, el primer reinicio tomará un tiempo.

Fuente
http://androidmx.net/2012/06/actualiza-tus-xperia-a-ics-4-0-4-oficial-de-sony/

10/22/2012

Ready Player One


Todo geek amante de los video juegos tiene que leer este libro, en realidad es muy entretenido y en algunas partes llega a ser "épico" en su narración.

Ready Player One cuenta sobre un futuro cercano, a la mitad del Siglo XXI, donde una post-Internet llamada OASIS, híbrido entre MMORPG (Massively Multiplayer Online Role-Playing Games) y realidad virtual avanzada, conecta cada aspecto posible de la vida social y personal del planeta.

El héroe es un joven que narra para nosotros su epopeya geek: hacerse del primer lugar en el videojuego de videojuegos, el mayor de la historia, para ello tendrá que aprovechar las toneladas de datos coleccionados en su cabeza, con referencias cruzadas, claro, más sus habilidades extraordinarias como gamer.

Les dejo un review completo sobre el libro (ojo con algunos spoilers), en resumen, el libro en cuestión es ligero en su lectura (en 5 días con 30 minutos de lectura promedio lo acaban), con más fórmulas de best-seller que de ciencia ficción, cuya aventura (¿un derivado post-cyberpunk light?) está estructurada como un video juego. En líneas generales, no es más que una búsqueda del tesoro puesta por escrito, aunque puede resultar divertida e incluso absorbente para quienes hayan quemado una parte de su gloria adolescente jugando en las maquinitas de los ochenta.

Fuentes

10/10/2012

Scrollbars, Modal Dialog y jQuery en IE8

Uno de los problemas que se presenta a menudo son las barras de desplazamiento que aparecen en Internet Explorer 8 al desplegar un cuadro de diálogo (Modal Dialog) de jQuery, para corregir esto hay que asignar métodos a las opciones "open" y "close" al configurar el diálogo:
 var dialogOpts = {  
      title: 'Modal Dialog',  
      modal: true,  
      autoOpen: true,  
      height: 300,  
      width: 500,  
      /* Scrollbar fix */  
      open: function(event, ui) {  
           $('body').css('overflow', 'hidden');  
           $('.ui-widget-overlay').css('width', '100%');  
      },   
      close: function(event, ui) {  
           $('body').css('overflow', 'auto');  
      }  
 };  
Esto sobreescribe el CSS del <body> eliminando las barras vertical y horizontal, perdiendo la posibilidad de hacer scroll mientras se despliega el cuadro de diálogo.

Fuentes

10/04/2012

Ajustar ancho de jqGrid automaticamente

jqGrid es un plugin para jQuery muy útil, el cual te permite crear grillas muy completas con algunas pequeñas lineas de código, es  muy configurable, con una gran variedad de ejemplos y una wiki bastante extensa, pueden revisar un pequeño tutorial para mas información de como utilizar esta grilla.

Días atrás me topé con un problema al implementar la grilla en un proyecto, esta no modificaba su ancho al redimencionar la ventana del navegador, para solucionar esto debemos agregar las siguientes líneas en el <body>:
 $(window).bind('resize', function() {  
      var grid = null;  
      if (grid = $('.ui-jqgrid-btable:visible')) {  
           grid.each(function(index) {  
                var gridId = $(this).attr('id');  
                var gridParentWidth = $('#gbox_' + gridId).parent().width();  
                $('#' + gridId).setGridWidth(gridParentWidth);  
           });  
      }  
 }).trigger('resize');  
Fuente

10/02/2012

Expiró la sesión, timeout y AJAX

Si en nuestra aplicación web tenemos un sin fin de peticiones AJAX y queremos controlar la respuesta cuando la sesión del usuario expira (por timeout por ejemplo), solo debemos agregar el siguiente <script> al final de nuestro <body>.
 <script type="text/javascript">  
 $(function() {  
      $(document).ajaxSuccess(function(evt, request, settings) {  
           if (request.responseText.indexOf('string-para-identificar-que-expiro-sesion') != -1) {  
                location.href="/login";  
           }  
      });  
 });  
 </script>  
Cada vez que una petición Ajax se realiza "correctamente", jQuery activa el evento ajaxSuccess, con este handler podremos analizar lo que nos retornó el servidor como respuesta cuando expira la sesión y así poder redireccionar al usuario si el caso amerita.

10/01/2012

Liderazgo: Inteligencia Emocional

En el escenario actual de los negocios, la complejidad, el cambio acelerado y la inestabilidad del medio ambiente son una constante y las variables del éxito son múltiples y de diversa índole. En este contexto, los líderes auténticos tienen que ajustar sus conductas al contexto en que se mueven sin perder su originalidad.

"Lo primero que hay que destacar es cómo han cambiado las empresas. Su estructura, por ejemplo, es mucho más plana, menos jerarquizada, además se trabaja en equipo, en red, y las relaciones interpersonales son mucho más importantes", destaca Nureya Abarca, profesora titular de la Escuela de Administración de la Pontificia Universidad Católica de Chile y profesora de la clase ejecutiva de El Mercurio y la PUC.

Pero para que una empresa sea exitosa debe haber un liderazgo organizacional. "Hoy se demanda más que nunca una nueva generación de líderes que sepa actuar frente a las consecuencias no deseadas y comprender que las claves para una transformación exitosa pueden encontrarse en el propio conocimiento oculto dentro de la empresa", dice.

El éxito de un líder, en el largo plazo, no se debe a la pura fuerza de su personalidad ni a la amplitud e intensidad de sus habilidades. Si no se tiene la capacidad para percibir y adaptarse a las claves ambientales y a las condiciones cambiantes del mundo de los negocios, es poco lo que sus capacidades pueden mantener en el tiempo.

Inteligencia emocional

En los últimos años se ha hablado de que un líder exitoso se distingue por su "inteligencia emocional". "Y ésta no es más que un conjunto de disposiciones que hacen que una persona tenga control y conocimiento de sí misma, a la vez que una capacidad de relacionarse con otros, basada en su empatía y habilidades sociales", asegura Abarca.

Y agrega: "Hoy, lo relevante de un líder son sus características como ser humano, y no como especialista de una materia. El énfasis está puesto en la humanidad y en la capacidad de relacionarse con otros. Los líderes no nacen, llegan a serlo a través de sus esfuerzos personales en el que van adquiriendo esa difícil capacidad de movilizar a los demás".

Y para conseguir los mejores resultados, el líder debe tomar en cuenta, por un lado, su personalidad, experiencia, conocimientos, pero también debe considerar el historial, preparación y expectativas de sus seguidores y ser capaz de evaluar el contexto organizacional.

Trabajo en equipo

"Así, el líder de éxito es aquel capaz de comportarse en forma apropiada a las circunstancias, si lo que se necesita es dirección, es capaz de dirigir; si se requiere de libertad de participación, también es capaz de darla. Son todas capacidades que se pueden desarrollar. Por eso, para mí existe una unión entre la inteligencia emocional y el liderazgo", sostiene.

El líder también debe saber descifrar la situación que le toca vivir y conseguir la adhesión de sus seguidores.

"A veces la orientación a la tarea es ineludible, pero, en otras, son las emociones las que exigen una atención prioritaria", explica Nureya Abarca.

El grado de participación que se otorga a los miembros de una organización es uno de los elementos más importantes del liderazgo. "Debe ser capaz de elegir, frente cada situación, el grado de participación que resulta más apropiado para su equipo de trabajo en dichas circunstancias", dice.

Y agrega: "Sólo de esta forma se pueden tomar decisiones de calidad y en forma eficiente, satisfaciendo al mismo tiempo las necesidades de los empleados que, en los tiempos actuales, son cada vez más exigentes".

Pero no basta con darles participación a los colaboradores. Tanto o más importante es poder mantener entusiasmadas a las personas a lo largo del tiempo, de modo que no sólo sepan hacer bien las tareas, sino que quieran hacerlas con ganas.

"Cuando la dirección tiene el hábito de comunicar, gana en credibilidad y confianza. La herramienta por excelencia que logra la adhesión de los seguidores es la capacidad que tienen los líderes para comunicar", explica.

Liderazgo interno

Una organización, sea cual fuere su tamaño y naturaleza, es un conjunto de personas que cooperan entre sí para el logro de resultados. "La cooperación requiere que las personas se comuniquen entre sí de un modo eficaz y eficiente, que se hagan entender bien y con el mínimo esfuerzo", asegura Abarca.

También el líder debe saber entregar un reconocimiento a sus colaboradores por un trabajo bien hecho y conseguir así el compromiso y participación de su gente, que son la base de un vínculo sólido entre empresa y empleado.

"La clave de un buen líder es crear un ambiente de confianza, en el cual las personas se sientan trabajando a gusto, sin temores, con libertad para expresarse, donde se favorezca la experimentación y se premie la innovación y en el cual los errores se consideren parte del aprendizaje".

Una vez que se genera esta forma de trabajar, muchas personas en distintas situaciones pueden servir. "La organización permite eso y ahí surge el concepto que, para mí, es el más audaz o moderno, y es que en el fondo el líder lo único que hace es crear los espacios sociales para que las personas creen en esos mismos espacios nuevas ideas y nuevas formas de trabajo", sostiene.

Esto, además, asegura que la organización pueda perdurar, ya que, si bien el éxito se puede dar por situaciones externas o ajenas, si una empresa tiene internamente capacidad de liderazgo, que no está centrado en una o dos personas, se puede mantener sin ningún tipo de problemas a lo largo de los años.

"El know how o el trabajar con las personas dentro de la organización, ninguna compañía lo puede copiar o quitar, por eso es tan importante tener este tipo de liderazgo en la organización", precisa.

Estilos de liderazgo

Se pueden identificar tres estilos de liderazgo:

  • Los emprendedores, que se anticipan a menudo a su época y no se encuentran sujetos al contexto en que viven. Detectan el potencial de tecnologías innovadoras y emergentes. Vencen obstáculos y desafíos a veces insuperables y tienen una gran capacidad para perseverar hasta encontrar la solución.
  • Los ejecutivos, que tienen la habilidad para interpretar y explotar el contexto. Son capaces de tener una profunda comprensión de su ambiente y de esta forma hacen crecer su empresa. 
  • Los líderes, que enfrentan el cambio e identifican el potencial latente en empresas que otros dan por perdidas. Allí donde otros ven fracasos, ellos ven oportunidades.


Fuente
http://www.edicionesespeciales.elmercurio.com/destacadas/detalle/index.asp?idnoticia=0121062006021X0160010&idcuerpo=526

9/27/2012

Sublime Text 2 - tips y trucos

Sublime Text 2 es un excelente editor para programar, de fácil acceso, minimalista, rápido, con autocompletado de código y tiene un sin fin de atajos de teclado que nos facilitará el trabajo del día a día. Es muy parecido a VIM (inclusive se puede configurar para que funcionen los comandos de este), lo he ocupando por un tiempo (lo reemplacé por Netbeans) y me ha sido bastante cómodo.

Tiene muchos plugins gratuitos (los hay de pago también) de fácil instalación (svn, phpdocs, etc) y para administrar nuestros plugins debemos instalar "Package Control", este plugin nos ayudará en la tarea de instalar otros plugins que se encuentran en el sitio http://wbond.net/sublime_packages


Fuentes

8/20/2012

Timeout en SoapClient en PHP

Según la documentación oficial de PHP, al crear un objeto de la clase "SoapClient" se puede pasar como parámetro la configuración del "timeout", pero esto no siempre funciona:

$ws = new SoapClient($url_wsdl, array('connection_timeout' => $segundos));

La documentación dice al respecto:
La opción connection_timeout define el tiempo de espera en segundos para la conexión del servicio SOAP. Esta opción no define el tiempo de espera para servicios con respuestas lentas. Para limitar el tiempo de espera para finalizar las llamadas, está disponible la opción default_socket_timeout.
Si el servicio web es muy lento en responder se puede definir el tiempo de espera predeterminado (en segundos) para sockets basados en flujos. Agregamos la siguiente linea antes de crear el objeto:

ini_set('default_socket_timeout', $segundos);

Fuentes
http://www.php.net/manual/es/soapclient.soapclient.php
http://www.php.net/manual/es/filesystem.configuration.php#ini.default-socket-timeout

8/01/2012

Instalar Arduino en Ubuntu


Solo por curiosidad adquirí una placa Arduino Uno, y lo primero que hice fue buscar si tiene soporte para Linux. La herramienta de desarrollo está disponible para en el sitio oficial para descargar, descomprimir y ejecutar, este no necesita ser instalado (está desarrollado en Java).

Hay que instalar el compilador gcc-avr y las librerías avr-libc:

sudo apt-get install gcc-avr avr-libc

Ahora falta asignarnos los permisos para que el USB pueda ser ocupado como puerto de conexión a la placa Arduino:

sudo usermod -a -G dialout usuario

Como la herramienta para compilar y subir los scketch a la placa Arduino es ejecutada sobre java, tendremos que instalar el paquete sun-java6-jre:

sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts


Podemos probar si java quedó instalado correctamente con el comando "java -version".


Fuentes
http://arduino.cc/en/Main/Software
http://usemodj.com/blog/?p=409
http://arduino.cc/es/Tutorial/Sketch

6/27/2012

Error GPG en PPA de Ubuntu

Agregué un nuevo repositorio con apt-add-repository y al actualizar la lista de paquetes (apt-get update) me arrojaba el siguiente mensaje:
Error de GPG: http://ppa.launchpad.net oneiric Release: Las firmas siguientes no se pudieron verificar porque su clave pública no está disponible: NO_PUBKEY D6B6DB186A68F637
Googleando me topé con la siguiente solución:

sudo apt-add-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install launchpad-getkeys

Después de actualizar e instalar el paquete launchpad-getkeys lo ejecutamos como root:

sudo launchpad-getkeys

Fuentes:
http://www.webupd8.org/2010/05/automatically-import-all-missing.html
http://www.nosinmiubuntu.com/2011/11/launchpad-getkeys-importa-rapidamente.html

5/07/2012

Load average


¿Qué es eso de "load average" cuando ejecutamos el comando "top" o "uptime" en una consola?

$uptime
12:22:11 up 154 days, 4:57, 1 user, load average: 0.27, 0.23, 0.19

El load average es la cantidad de procesos que están encolados, calculados sobre un cierto período de tiempo (load average: 1min, 5min, 15min).

¿Qué es lo que bloquea al proceso?, pueden ser 3 factores:
  • CPU 
  • Lectura/Escritura de disco 
  • Lectura/Escritura de la red 

Entonces un proceso bloqueado sería:
  • A la espera que la CPU pueda procesarlo 
  • Está esperando a que el disco lo deje escribir. 
  • Necesita leer algo de la Internet pero la red está ocupada. 

¿Qué significa un load average elevado o que el servidor tenga carga alta?

Ésto es una indicación de que la CPU no aguanta el uso que le damos, o que algo está fallando (hardware), un disco (partición) o una tarjeta de red.

Diagnosticar el problema

El comando "top" nos muestra información sobre el estado actual de los procesos que están en ejecución, la tercera línea nos puede ayudar ya que nos informa el uso de la CPU:
  • us: procesos iniciados por algún usuario. 
  • sy: procesos iniciados por el sistema. 
  • ni: procesos iniciados con prioridad especial (nice). 
  • id: porcentaje sin usar (idle). 
  • wa: procesos esperando para continuar (waiting).
Si el porcentaje de usuarios (us) o de sistema (sy) está constantemente en 90% o 100%, significa que la CPU no da abasto para el uso que le estás dando a la máquina (o que tiene algún problema de performance).

Si en cambio el porcentaje alto es el de espera (wa), significa que la CPU está consumiendo mucho tiempo esperando a que se ejecuten las operaciones de lectura/escritura. Ésto significa que puedes tener un disco que falla, una tarjeta de red que no funciona bien o el ancho de banda no es proporcional a lo requerido por las aplicaciones.

Para saber qué aplicaciones están causando carga, corremos el comando que lista los procesos corriendo en el sistema "ps faux".


Hay que fijarse en la columna STAT, que indica el estado del proceso. Los estados más comunes son:
  • R - Running (ejecutandose) 
  • S - Sleeping (en pausa) 
  • D - Waiting for something (en espera) 

Así que busca algún proceso que esté en D, y empieza desde ahí a diagnosticar el problema. Para hacer diagnósticos más completos puedes ocupar los siguiente programas:
  • strace - rastrea lo que hace un programa. 
  • iostat - muestra la actividad del disco. 
  • bwmon - muestra la actividad de la red. 

4/25/2012

Aplicar skins a Midnight Commander

Es algo viejo, anticuado... pero, con soporte (en constante desarrollo y correcciones de bugs) y muy funcional. Para los amantes de lo "retro" existe la posibilidad de modificar los colores base de MC.

En Linux hay que crear el directorio "skins" en $HOME/.mc/ y descargar darkone.tar.bz2 (copiamos darkone.ini en $HOME/.mc/skins/).

Luego modificamos $HOME/.mc/ini y buscamos la etiqueta "skin" que por defecto tiene como valor "default"  (si no está la creamos) y le asignamos el valor "darkone" (que es el nombre del .ini que acabamos de copiar en el directorio skins).

 [Midnight-Commander]  
 skin=darkone  

Fuente

3/20/2012

Buscar MP3 en Google

Pueden llamarlo como truco, piratería, buscar respaldos o simplemente para conocer un artista y así decidir si comprar o no su disco. Para buscar y descargar MP3 con la ayuda de Google hay que ingresar lo siguiente en el cuadro de búsqueda:

intitle:index.of.mp3 nombre_artista -htm -html -php -asp

Reemplazamos "nombre_artista" por el artista o canción que queremos encontrar y Google buscará sobre las páginas que tiene indexadas, sencillo no?

Fuente
http://google.dirson.com/post/1153/

Mockups en Linux



Balsamiq Mockups es una herramienta de escritorio para crear maquetas de sistemas (web también!), esta se ejecuta sobre Adobe Air y para instalarlo en Ubuntu 11.10 hay que hacer lo siguiente:
Nos descargamos Adobe Air para Linux:

~# wget http://airdownload.adobe.com/air/lin/download/latest/AdobeAIRInstaller.bin
~# sudo chmod +x AdobeAIRInstaller.bin
~# sudo ./AdobeAIRInstaller.bin

Luego de instalar Adobe Air ejecutamos como root el instalador de aplicaciones:

~# sudo Adobe\ AIR\ Application\ Installer

Buscamos el MockupsForDesktop.air que nos descargamos desde www.balsamiq.com y dejamos que la instalación continúe.

Fuentes

2/15/2012

ROOT en Galaxy Tab 10.1

Ser ROOT en un Samsung Galaxy Tab 10.1 es muy sencillo, con un ZIP y un par de pasos podemos rootear nuestro equipo.

En resumen, hay que descargar el archivo skitzandroid-10-1v-root.zip y copiarlo (sin descomprimir) en la raíz del tablet, luego apagamos el dispositivo y lo volvemos a encender manteniendo presionado el botón de encendido y el botón "bajar volumen". Cuando aparezca el logo del tablet en pantalla soltamos el botón de encendido pero no así el botón "bajar volumen".

Soltamos el botón "bajar volumen" cuando aparezca en pantalla 2 iconos (una caja y la mascota de android), con el mismo botón (bajar volumen) seleccionamos la imagen de la izquierda (caja) y aceptamos con el botón "subir volumen".

Podemos navegar entre las opciones con los botones "subir y bajar volumen" y para aceptar ocupamos el botón de encendido. Seleccionamos la opción "apply firmware from /sdcard", buscamos el archivo skitzandroid-10-1v-root.zip y lo seleccionamos, cuando termine el proceso de carga y se reinicie el tablet ya seremos ROOT.

Fuente

2/07/2012

El tesoro cósmico

Foto: Emol.com
Una nueva aventura por el cosmos, Lucy y Stephen Hawking, El tesoro cósmico. Es un libro entretenido, orientado para los mas pequeños de la casa, 100% recomendado para los niños aficionados al cosmos.

Entre los capítulos existen pequeñas descripciones y datos sobre planetas y constelaciones que hacen mas enriquecedora la lectura.

Algo no marcha bien, Eric, el antiguo vecino de George está en florida trabajando en un proyecto científico para descubrir si hay vida en el planeta Marte y en otros lugares del sistema solar. El robot encargado de la misión actúa de forma muy extraña y, según le cuenta Annie a George, !UN ALIEN LES HA ENVIADO UN MENSAJE PARA DECIRLES QUE DEBEN VOLVER AL ESPACIO SI NO QUIEREN QUE EL MUNDO SE ACABE! Una vez mas, Annie y George deberán enfundarse sus trajes espaciales y seguir las pistas que los conducirán hasta un peligrosísimo y siniestro personaje...

Mas información en http://www.emol.com/noticias/magazine/2010/02/08/397784/stephen-hawking-y-su-hija-regresan-con-su-segunda-novela-el-tesoro-cosmico.html

1/16/2012

Trucos para kindle 4

En el trabajo me regalaron un Kindle 4, me ha salvado los tiempos muertos que tenía durante los viajes en Metro. Les dejo un par de links con algunos trucos para el Kindle 4, unos son bien útiles como por ejemplo el refrescar la pantalla (si pulsamos la tecla del teclado + tecla Atrás) u ocupar "Calibre" para sincronizar tu Kindle con el PC.
Imagen referencial desde
http://www.amazon.com/

Cómo cambiar el refresco de página para que lo haga cada página

Desde la pantalla principal, seleccionar Ajustes en el Menú. Ahí, avanzar hasta la página 3 de 3 y verás la opción: Refresco de página. Si está encendido refrescará cada página, si está apagado lo hará cada 6 páginas.

Cómo usar el visor de imágenes

Funciona como en el Kindle 3. Crea las imágenes. Colócalas en un archivo comprimido .ZIP. Copia el archivo zip en la carpeta "Document"s del Kindle. El archivo zip se mostrará como un libro con el mismo nombre pero cuando se abra mostrará tus imágenes. Las imágenes han de ser menores de 600×800 pixeles. El tamaño que mejor parece que se adecua es 520 x 640.

  • Si habilitas el modo pantalla completa, las imágenes de 600 x 800 pixels se mostrarán correctamente.
  • Te recomiendo que, para visualizar mejor imágenes, actives el refresco de página para cada página.
Las opciones de menú cuando estamos usando el visor de imágenes son: disable dithering, anchor to top right (podemos encontrar mangas que se muestren según la convención japonesa, de derecha a izquierda. Esta opción permite comenzar en la esquina correcta cuando se ven con la máxima resolución), enable full screen mode (esconde la barra que aparece arriba), use partial refresh y enable pan to next page (útil para navegar por los mangas o cómics a plena resolución, mayor que la de la pantalla del kindle. Con el pad podemos avanzar o retroceder página).

Como importar Colecciones de Kindle para PC
Crear colecciones en el K4 es posible, pero muchos lo encontrareis tedioso sin un teclado físico. Una buena alternativa es utilizar la última versión de Kindle For PC y crear tus colecciones con ella. Una vez que las tengas creadas en el programa puedes importarlas a tu Kindle de la siguiente manera:

En tu K4 ve a la pantalla de inicio, desplazate hacia abajo y selecciona los Elementos Archivados. Ahí, selecciona: añadir colecciones de otro dispositivo. Te aparecerá una lista de dispositivos seleccionables. Selecciona el correspondiente a tu Kindle For PC. Todas lascolecciones que hayas creado en el programa pasarán a tu K4 y los libros asociados a cada colección se trasladarán a la colección adecuada.

Importante: si no colocas los libros en tu K4 ANTES de importar las colecciones, al importarlas sólo se crearán colecciones vacias. Pero si los libros ya estaban en tu K4 antes de importar las colecciones, entonces se moverán a la colección apropiada que hayas seleccionado en Kindle para PC.

Atajos de Teclado

Hacer una captura de pantalla

Mantener presionado el botón de teclado y presionar el botón Menú. Tras 5 segundos la pantalla parpadeará brevemente. Se creará la captura de pantalla en formato .gif en la carpeta Documents de tu Kindle.

Refrescar la pantalla

Mantener presionado el botón del teclado y presionar el botón de retroceso.

Ir más rápido por el teclado

Cuando aparece la pantalla del teclado, si presionas el botón de página siguiente te moverás a la pestaña de la derecha. Y si presionas el botón de página previa te moverás a la pestaña de la izquierda.

Poner una letra en mayúsculas

Cuando aparece la pantalla del teclado, colócate en la letra que quieras poner en mayúsculas y mantén presionado el botón del teclado mientras presionas el botón central de la tecla central.
Otra forma: con el teclado abierto, ve hasta la letra y presiona Página Siguiente o Página Previa para mover la pestaña hasta las letras mayúsculas.

Saltar 7 letras

Con el teclado abierto, presiona y mantén presionado el botón del teclado y a la vez presiona el botón Derecho o Izquierdo de la tecla central.

Borrar

Con el teclado abierto, presiona a la vez el botón del teclado y el de página previa del lado derecho del Kindle.

Espacio

con el teclado abierto, presiona a la vez el botón del teclado y el de página siguiente del lado derecho del Kindle.

Cursor a la derecha

El teclado abierto, presiona a la vez el botón del teclado y el de página siguiente del lado izquierdo del Kindle.

Cursor a la izquierda

El teclado abierto, presiona a la vez el botón del teclado y el de página previa del lado izquierdo del Kindle.

Código de barras y número de serie

Abrir el teclado, mantener presionada la tecla y pulsar dos veces el retroceso de página del lado izquierdo. El cursor ha de estar a la izquierda.

Entrar en página 711 (aparato, conexión, network e interfaz)

En configuración, mantener pulsada la tecla del teclado y pulsar página siguiente (del lado derecho del teclado)

Entrar en página 411 (device y device status)

En configuración, mantener pulsada la tecla del teclado y pulsar página anterior (del lado derecho del teclado)

Buscar desde el texto en la wikipedia o google

Situarse con el cursor al principio de la frase o palabra que queremos buscar, pulsar intro, pulsar comenzar subrayado, pulsar dos veces la tecla correspondiente al teclado, se abre un cuadro desde donde podemos elegir buscar la frase subrayada en google, la wikipedia, el diccionario o en mi contenido.

Siguiente capítulo

Pulsa Flecha derecha del cursor mientras lees.

Hora y memoria libre

Pulsa la Tecla Menú.

Páginas ocultas de información

Entra en Configuración y pulsa Teclado y Página Siguiente. Si usas Teclado + Página Anterior obtendrás otros datos.

También les dejo un link para descargar los "respaldos" de nuestros libros que poseemos físicamente.

1/10/2012

Enchular gnome-shell en Ubuntu 11.10


Con la herramienta Gnome-Tweak-Tool (Configuración Avanzada de Gnome 3) podemos modificar los íconos, fuentes, temas de ventana y hasta activar plugins para gnome-shell. Primero debemos instalar gnome-tweak-tool:

# sudo apt-get install gnome-tweak-tool

Luego agregamos el siguiente repositorio de webupd8 (testeado en Ubuntu 11.10) y nos instalamos gnome-shell-extensions-user-theme:

# sudo add-apt-repository ppa:webupd8team/gnome3
# sudo apt-get update
# sudo apt-get install gnome-shell-extensions-user-theme

Después reiniciamos o cerramos sesión. Puedes descargar temas de gnome-shell en gnome-look.org

Fuentes
http://live.gnome.org/GnomeTweakTool
http://artescritorio.com/como-instalar-temas-de-gnome-shell
http://www.webupd8.org/
http://gnome-look.org/index.php?xcontentmode=191

1/03/2012

Bienvenido 2012!

Se vienen cambios importantes, desafíos por cumplir, libros que leer y compartir, juegos que terminar y experiencias que postear, se viene un año cargado de nuevas tareas y hay que afrontarlo de la mejor manera posible.

Por el momento le estoy dando una nueva oportunidad a Ubuntu 11.10 (con nuevo notebook), eso sí, con gnome-shell instalado, me ha funcionado impecable y hasta el momento no se ha colgado.

Feliz año a todos y gracias por sus comentarios y visitas!