linux1

Problemas de espacio de almacenamiento en Linux, como encontrarlos

Quizás algunos de ustedes se hayan encontrado con este “pequeño” problema:

linux1

Pues si, inesperadamente, y por causas no planificadas, se llenó el espacio de almacenamiento de nuestro servidor Linux. Ahora la pregunta es: Cómo sabemos que archivos o carpetas son los causantes?

Para esto, podemos usar el siguiente comando desde el terminal

sudo du -sx /* 2>/dev/null | sort -n

Este comando revisará el uso de espacio de cada carpeta (en este caso de la raiz /) y nos irá indicando que carpeta tiene el mayor uso de espacio en nuestro disco duro. Así, navegando por las subcarpetas, podremos ver que archivos son los que se han comido nuestro almacenamiento, y sabremos que medidas tomar.

linux2

Carga elevada de CPU con MySQL

Quizás la mayoría de ustedes no hayan tenido este problema, pero en el servidor web de mi trabajo, tenía una elevada carga (60/70%) de cpu al proceso mysqld. No es un sitio con tráfico elevado (unas 300 visitas diarias), y tiene ram y disco suficiente para aguantar eso y más, y muchas veces esta carga elevada, ralentizaba la carga de la página web.

Resulta que el problema estaba en la falta de optimización periódica de las tablas. Para solucionar esto, ejecutamos el siguiente comando:

mysqlcheck -u usuario_mysql -p --auto-repair --check --optimize --all-databases

Y listo! asunto arreglado. El proceso mysqld volvió a la normalidad, y el servidor volvió a ser el de antes

Paginador para custom post types en wordpress > quick fix!

Quizás se hayan topado con el problemita del paginador, al trabajar con custom types en wordpress. Simplemente el paginador no aparece.

Les dejo este código para arreglar esto. El truco es temporalmente mover la variable $wp_query a un temporal, y cargar $wp_query con el query del custom post type

 

< ?php
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('post_type=custom_post_type' . '&paged=' . $paged . '&posts_per_page=10');
?>
< ?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>

 

< ?php endwhile; ?>
< ?php previous_posts_link(); ?>
< ?php next_posts_link(); ?>
< ?php $wp_query = null; $wp_query = $temp; ?>

Al final, volvemos la variable $wp_query a su lugar, y listo!

CX-10 Micro Quad – Cuando creíamos que no podían ser mas pequeños

Mis amigos en www.tmart.com han sido muy amables en enviarme un nuevo microcóptero. Cuando pensaba que no podían hacer algo más pequeño aún, aparece esto! La miniaturización al máximo nivel!

DSC01186

Este microquad, dentro del paquete contiene:

  • Micro quad, de 4cm de ancho (realmente pequeño)
  • Control de 2.4Ghz para evitar interferencias
  • Batería LiPo de 50mah, para unos 3 minutos de vuelo aproximadamente
  • Micro transmisor de bolsillo
  • Cargador USB
  • Hélices de repuesto y manual de usuario

El microquad vino en una cajita bastante peculiar (dentro de un sobre pequeño, para ahorrar gastos de envío), y al verlo inicialmente, más parece una caja de un juguete pequeño, que de una aeronave RC. El quad viene en la parte superior, y el transmisor en la parte inferior de la caja transparente. El empaque es bastante delicado, pero con suerte no hubo ningún daño durante el envío.

DSC01187

 

Antes de iniciar el vuelo, recuerden que esto no es un juguete!, a pesar de ser muy pequeño y simpático (el modelo es un clon del DJI phantom, pero a escala 1:16) sus helices giran a muy altas velocidades, y podrían causar alguna herida en caso de tener contacto con la piel cuando estén en movimiento. Vale recalcar que para cualquier tipo de multirotor que se vuele en interiores, debe cuidarse que exista el espacio suficiente y que no existan obstáculos para su vuelo.

Primer vuelo

Luego de poner a cargarlo por unos 10 mins, y buscar un par de baterías AAA para el transmisor, lo primero que salta a la vista es lo pequeño de todo. El microquad como les mencionaba solo mide 4cm de lado, y el transmisor no mide mas de 6cm de longitud. El transmisor es bastante cómodo, y las palancas se ven bastante resistentes, pero eso no quita el efecto “juguete” que muestra por su pequeño tamaño. El transmisor tiene trims digitales para la palanca derecha, para ajustar el movimiento ya en vuelo.

DSC01190

DSC01191

Una vez que se ha cargado totalmente el microquad (se enciente la luz del conector USB del cargador), procedemos a encenderlo con el microswitch que se encuentra en la parte posterior, y encendemos a la vez en transmisor. Cuando la comunicación entre el transmisor y el microquad esté lista, el transmisor emitirá un bip de aviso, y en el microquad dejarán de parpadear los leds de cada rotor, quedando encendidos permanentemente.

Dado el pequeño tamaño del microquad, han sido muy inteligentes en colocar luces LED que facilitan su ubicación en el espacio. Además, las luces (2 azules adelante y 2 rojas atras) facilitan el control en el aire, indicando para donde se va a mover.

DSC01193Subimos la palanca de la velocidad y el microquad despega super rápido. Es super sensible a los comandos. los giros son bastante buenos y el cambio de dirección es rápido. Adicionalmente es super estable cuando no recibe ningun control desde el transmisor.

Al ser tan pequeño, el punto débil del microquad son sus hélices. Lastimosamente, éstas, al entrar en contacto con una pared o algun objeto grande, se van a romper. Por suerte dentro del paquete se incluyen 2 hélices (una de cada sentido) para solventar un caso fortuito.

Como multicóptero de oficina funciona excelentemente. Intenté volarlo en exteriores, pero es imposible. Su escaso peso lo hace incontrolable con la brisa más leve :( además, no sería muy optimista en la distancia a la que se perderá de vista volando en un parque o en el patio de la casa.

Como siempre, la curiosidad es mala consejera, y quise ver como es que algo tan complejo como un multirotor puede estar en un empaque tan pequeño, así que manos a la obra, a desarmarlo.

DSC01195

DSC01196

En sí, todo es miniaturizado. El microquad tiene un microcontrolador ST, un acelerómetro y el receptor de 2.4Ghz, todo en un circuito impreso que no mide más de 1cm2. El PCB se extiende hacia los lados y funciona como soporte de los motores, quedando únicamente la batería por debajo. Quizás para aligerar un poco el peso, podríamos deshacernos de la carcasa plástica y dejarlo “al desnudo”

DSC01203
Les dejo un video del vuelo en mi sala… resulta bastante complicado filmarlo por su pequeño tamaño, pero muy divertido de volarlo

Stellaris Launchpad + Energia (pt. 2 – Timers)

En el post anterior, pudimos comprobar lo facil que nos va a resultar usar al Stellaris Launchpad con el IDE Energía, como reemplazo del Arduino.

En este post vamos a revisar como usar las interrupciones del timer, para poder ejecutar eventos periódicamente. El Launchpad que estamos usando (LM4F120XL) tiene 27 timers que pueden ser activados independientemente.

Para poder utilizar el timer, en este caso el Timer 0 del Launchpad, necesitamos implementar 2 rutinas: 1 de inicialización y otra de interrupción. Para nuestro ejemplo, las rutinas son las siguientes:

Inicialización:

void initTimer(unsigned Hz)
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
  TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
  unsigned long ulPeriod = (SysCtlClockGet() / Hz) / 2;
  TimerLoadSet(TIMER0_BASE, TIMER_A, ulPeriod -1);
  IntEnable(INT_TIMER0A);
  TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
  TimerIntRegister(TIMER0_BASE, TIMER_A, Timer0IntHandler);
  TimerEnable(TIMER0_BASE, TIMER_A);
  
}

Interrupción:

void Timer0IntHandler()
{
  
  TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
  digitalWrite(RED_LED, j&0x01);  
  j++;

}

Como podemos observar, la rutina de inicialización recibe como parámetro la frecuencia de activación del timer en Hz. Y la rutina de interrupción, simplemente activa o desactiva el led Rojo, para comprobar la funcionalidad del timer.

El sketch completo sería el siguiente:

#include "Energia.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/debug.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"

int j=0;

void setup()
{
  pinMode(RED_LED, OUTPUT);
  initTimer(1); // timer a 1 hz
  
}

void loop()
{
  // put your main code here, to run repeatedly:
  while(1) {} 
}

void initTimer(unsigned Hz)
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
  //TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);
  TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
  unsigned long ulPeriod = (SysCtlClockGet() / Hz) / 2;
  TimerLoadSet(TIMER0_BASE, TIMER_A, ulPeriod -1);
  IntEnable(INT_TIMER0A);
  TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
  TimerIntRegister(TIMER0_BASE, TIMER_A, Timer0IntHandler);
  TimerEnable(TIMER0_BASE, TIMER_A);
  
}

void Timer0IntHandler()
{
  
  TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
  digitalWrite(RED_LED, j&0x01);  
  j++;

}

Stellaris Launchpad + Energia (pt. 1)

He decidido escribir una serie de posts, acerca del uso del Stellaris Launchpad. Este mini tutorial, vamos a analizar la primera versión del Stellaris Launchpad, que veía con el microcontrolador LM4F120H5QR, pero aplica a las nuevas versiones del board, que tienen el microcontrolador Tiva-C.

Este development board de Texas Instruments, sobresale de otros similares, por que su microcontrolador LM4F120XL tiene las siguientes características:

  • Microcontrolador Stellaris LM4F120H5QR con núcleo ARM® Cortex™-M4 con las siguientes características:
    • Operaciones de punto flotante
    • Velocidad de operación máxima de 80 MHz
    • 256 KB de memoria flash
    • EEPROM interna
    • SRAM de 32 KB
    • 8 UARTs
    • 4 I2C
    • 4 SPI
    • 27 Temporizadores
  • Interfaz ICDI (In-Circuit Debug Interface) USB incluida en la tarjeta.
  • Conexión micro USB-B para depuración.
  • Conexión micro USB-B de dispositivo para aplicaciones de usuario.
  • Switch selector de alimentación de dispositivo/depuración.
  • Pines BoosterPack XL, compatible con muchas tarjetas BoosterPack existentes.
  • 2 botones para aplicaciones de usuario
  • Botón de reset
  • 1 LED RGB
  • Puente (jumper) para medición de corriente
  • Cristal principal de 16 MHz
  • Cristal de 32.768 KHz para hibernación y reloj en tiempo real (RTC – Real Time Clock)

Si lo comparamos con el cásico y conocido Arduino, vemos que tenemos un procesador mucho más poderoso, con muchos mas pines de Entrada y Salida y mas periféficos, lo que permitirá que podamos diseñar aplicaciones embebidas con mayor facilidad. Además de esto, el Stellaris Launchpad, tiene un precio aproximado de USD.12,00  (en su nueva versión, que lleva un microcontrolador TIVA C) lo que lo coloca al nivel de los clones del Arduino Uno, por lo que vale la pena el intento.

Texas Instruments, con el fin de promover el uso de sus microcontroladores, permite descargar de forma gratuita (luego de un pequeño registro) sus herramientas de desarrollo, y son bastante completas. Pero al ser un entorno de desarrollo basado en Eclipse, es bastante lento y pesado, si no tienes un computador bastante potente.

Es aquí cuando aparece Energia. Este entorno de desarrollo, ha sido pensado para facilitar el desarrollo de aplicaciones usando la linea Stellaris de TI, presentando la posibilidad de usar el IDE de Arduino, para los procesadores de TI. Con este entorno, podemos programar fácil y rápidamente aplicaciones con el Launchpad, de la misma manera que lo hacemos con el Arduino, traduciéndose esto en velocidad de desarrollo, y facilidad de uso. Además, Energía es multiplataforma, existiendo versiones para Windows, MacOS y Linux.

En primer lugar, y si estamos trabajando bajo Windows, debemos descargar los Drivers Stellaris ICDI  para USB. esto lo podemos descargar desde este enlace. Si estamos usando Linux o MacOS, podemos saltarnos este paso sin problema.

Una vez descargados los drivers, los descomprimimos en alguna carpeta facil de ubicar, y procedemos a conectar el Launchpad a nuestro puerto USB. Se iniciará el proceso de detección del dispositivo, y deberemos buscar la carpeta donde se descomprimió nuestro Driver, para que windows lo detecte e instale los dispositivos. Si todo sale bien, debemos tener 3 dispositivos nuevos en nuestro computador.


stellaris1

 

Luego descargamos el IDE  Energia desde este enlace, escogiendo la versión que corresponda a nuestro sistema operativo. La descarga es algo grande (alrededor de 200MB) así que tomará algunos minutos. Una vez concluida la descarga, lo descomprimimos en una carpeta (puede ser en Mis Documentos) y listo, podemos empezar.

Al ejecutar Energia, a primera vista, observamos un clon del IDE de Arduino (algo bastante obvio, porque es un fork) pero en color rojo. Además del cambio de color, todas las barras de herramientas y menús, son identicos al IDE de Arduino.

 

Antes de empezar a programar, debemos cerciorarnos de que estamos utilizando la configuración correcta para nuestro Launchpad. Para esto, debemos seleccionar el puerto serie, y tipo de board correctos en el menu Herramientas. En mi caso estoy usando el puerto COM7 y el board LM4F120, que es de la primera serie de los Launchpad con Cortex M4.

stellaris3

Ahora si tenemos todo listo para empezar a programar, y vamos a empezar con el “Hello World!” de los microcontroladores: El blink. Vamos a crear un pequeño sketch que encienda el led Rojo del Launchpad, espere 1 segundo, lo apague, espere 1 segundo, y lo vuelva a encender. Para esto, pegamos el siguiente código en la ventana del editor Energia.

#define LED RED_LED
void setup() {                
  pinMode(LED, OUTPUT);     
}

void loop() {
  digitalWrite(LED, HIGH);   
  delay(1000);               
  digitalWrite(LED, LOW);    
  delay(1000);              
}

Una vez copiado el código, presionamos en boton de descarga, y listo! El Led rojo de nuestro Launchpad empieza a parpadear.

Si queremos jugar un poco, podemos cambiar el color del Led. El launchpad incluye un led RGB, que podemos hacerlo parpadear cambiando esta línea:

#define LED GREEN_LED

O por

#define LED BLUE_LED

En los próximos días, continuaré con la serie, explicando como usar los distintos periféricos, y algunas funciones avanzadas del Launchpad.

Aviator YK016 – El quadcopter creado para principiantes

En este post, y gracias a mis amigos de www.tmart.com, he probado su nuevo Microquad Aviator YK016, que se presenta como una de las mejores opciones de quadcopters, para todos aquellos que quieran iniciarse en el radiocontrol, sin tener que perforar sus bolsillos, o vaciar sus cuentas bancarias.

Este multicóptero viene en un paquete Ready to Fly, es decir, incluye todo lo necesario para su vuelo abrir la caja. Lo único que se deben agregar, son 6 baterías AA para el transmisor.

DSC01169

Como vemos, el multicóptero, además de venir debidamente protegido para el largo viaje desde las bodegas de www.tmart.com en China (o en EEUU en algunos casos) tiene todo lo necesario para iniciar el vuelo. El paquete incluye lo siguiente.

  • Multicóptero (tamaño: 9.5cm entre ejes de rotores)
  • Transmisor de 2.4Ghz
  • Cable cargador USB
  • 4 hélices de repuesto
  • Manual de usuario

DSC01170

Antes de iniciar el vuelo, es necesario cargar completamente la batería del multicóptero. Esta batería está previamente insertada en el quadrotor, por lo que únicamente debemos conectar el cargador a un puerto USB libre en nuestro computador (o usar un cargador de pared, como muchos tenemos para nuestros teléfonos celulares) y conectar la batería del multicóptero al conector del cargador. La carga de esta batería demora alrededor de 15 minutos.

Mientras la batería se va cargando, podemos observar que la principal ventaja de este multirotor con respecto a otros de este tamaño, es su protector de hélices, integrado en cada uno de los 4 motores.

DSC01171

Este protector resulta realmente útil, cuando estamos aprendiendo a volar en interiores. Protege de muy buena forma contra golpes contra paredes u otros objetos que se puedan atravesar durante el vuelo.  Además de los protectores laterales, tiene pequeñas patas bajo los motores, que amortiguarán cualquier caída abrupta del mismo

DSC01172

El transmisor es bastante liviano, y se asemeja a un control de consola (digamos que tiene un aire de control de playstation). Tiene trims digitales, y 2 opciones adicionales: Selección de velocidad de respuesta y selector de modo acrobático.

DSC01175

El selector de velocidad de respuesta, permite cambiar la sensibilidad de las palancas del control remoto, teniendo 3 posiciones: lento, medio y rápido. Inicialmente, el control siempre está en modo lento, y para cambiar el modo, basta con presionar hacia abajo la palanca de la izquierda. Esto resulta un poco incómodo, ya que al presionar, se pierde la posición actual del mando.

Ec modo actobático se activa presionando hacia abajo la palanca de la derecha. Con esto, el multicóptero realizará un giro automático de 360 grados, y regresará a su posición estable automáticamente. Es divertido el giro, pero necesita estar al menos a 1.80m de altura para poder recuperarse del giro, y no golpear contra el piso.

Como mencionamos anteriormente, el transmisor necesita 6 baterías AA para su funcionamiento, y lastimosamente, no incluye un conector USB para cargar el cargador, cuando estemos lejos de una toma de corriente.

Para resumir, la principal ventaja de este multicóptero, es el precio! por $29,99 con envío incluido, se lo puede comprar directamente en www.tmart.com. El paquete, por su peso y volúmen no presenta ningún impedimento para pasar por aduana sin problema, así que es una ganga. Por ese precio, podemos conseguir un controller board para un multicóptero más grande únicamente, así que es una ganga.

Les dejo un video, para que vean cuan estable y resistente es

Nuevo microquad de 4 canales. El mejor de todos!

Bueno, se acercan las navidades, y yo recibí mis regalos adelantados! :D

Aparte de otros artículos electrónicos de uso diario, mis amigos de www.tmart.com fueron muy amables en enviarme un nuevo microcoptero. En este caso específico, un JXD 385 2.4GHz 4 Channel 6 Axis RC Quadcopter UFO, que reune todas las características de los multicópteros que he probado, en un solo paquete.

Al igual que otros multicópteros, esta unidad tiene un costo especialmente bajo. por $38.62 incluído el envío, uno obtiene todo lo necesario para iniciarse en el mundo de los multicópteros.

La gente de www.tmart.com siempre se encarga de proteger los paquetes de sobremanera para que no se maltraten en el largo viaje desde la china, y este caso no fué la excepción. El paquete llegó sano y salvo a las 3 semanas de haber confirmado la orden.

DSC00898

Como en casos anteriores, este es un multicóptero listo para volar. El paquete incluye todo lo necesario para empezar el vuelo, excepto las 6 baterías AA que necesita el transmisor.  El paquete incluye:

  • Microcoptero de 2.4 Ghz
  • Transmisor de 2.4 Ghz
  • Batería de Lipo 1s 150mah
  • Cargador de baterías USB
  • Hélices de repuesto
  • Manual de usuario

DSC00900

Todo viene protegido debidamente en un encapsulado plástico transparente, salvando así cualquier maltrato que pudiera generarse en el viaje.

EL multicóptero como tal es pequeño, de unos 10cm entre ejes. Viene con las hélices de 2 colores distintos para facilitar la ubicación y dirección en el aire. La verdad, no es dificil de perder de vista en un rango de unos 20m.

DSC00902

El transmisor incluido, aunque bastante básico, resulta cómodo, liviano, y de controles suaves y precisos. Como mencioné, necesita 6 baterias AA para funcionar, y tiene un puerto USB que puede cargar la batería usando el cargador suministrado. Para esto, si recomiendo el uso de baterías recargables.

DSC00901

 

El transmisor tiene 2 botones en su parte superior. El de la izquierda es para seleccionar el modo, entre 3 modos diferentes: lento, rápido y super rápido; El transmisor hará uno, dos o tres bips según el modo seleccionado. El botón de la derecha sirve para activar el modo acrobático. Al presionarlo, el multicoptero realizará un giro de 360 grados en la dirección de la palanca que movamos. Bastante cool!

Que tal funciona se preguntarán? Pues bueno, de todos los multicópteros que han pasado por mis manos, este es el mejor de todos.

  • Super facil de controlar. Sus 3 gyros hacen su trabajo a la prefección.
  • La batería dura unos 10 mins por vuelo, y se carga de 15 a 20 minutos.
  • Sus modos lento, rápido y super rápido, lo hacen perfecto para quienes van iniciando de a poco en el uso de multicopteros, o tienen ya alguna experiencia previa
  • Se puede usar en exteriores. En situaciones de viento moderado, se mantiene super estable y controlable.
  • Puede levantar cierto peso, yo lo probé con una microcámara.
  • Precio super conveniente
  • Envío rápido y gratuito.

Para que observen sus características de vuelo, he grabado un pequeño video. Se los dejo y espero que les agrade