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