miércoles, 30 de julio de 2014

Script que avisa el estado de la carga de la batería de la laptop linux

#!/bin/bash

# low battery in %
LOW_BATTERY="40"

# critical battery in % (execute action)
CRITICAL_BATTERY="5"

# action
ACTION="/sbin/poweroff"

# sleep 5 mins
SLEEP="300"

# display icon
LOWBAT_ICON="/usr/share/icons/gnome/32x32/status/battery-low.png"
CRITBAT_ICON="/usr/share/icons/gnome/32x32/status/battery-caution.png"
FULLBAT_ICON="/usr/share/icons/gnome/32x32/status/battery-full-charged.png"

# path to battery /sys
BATTERY_PATH="/sys/class/power_supply/BAT0/"

# notify sound
PLAY="aplay /usr/share/sounds/linuxmint-gdm.wav"

while [ true ]; do
if [ -e "$BATTERY_PATH" ]; then
BATTERY_ON=$(cat $BATTERY_PATH/status)
CURRENT_BATTERY=$(cat $BATTERY_PATH/capacity)

if [ "$BATTERY_ON" == "Discharging" ]; then

if [ "$CURRENT_BATTERY" -lt "$CRITICAL_BATTERY" ]; then
$($PLAY)
notify-send -i "$CRITBAT_ICON" "Battery is Critical - $CURRENT_BATTERY%. Shutting down in 60 sec."
sleep 60
$($ACTION)

elif [ "$CURRENT_BATTERY" -lt "$LOW_BATTERY" ]; then
$($PLAY)
notify-send -i "$LOWBAT_ICON" "Battery is Low - $CURRENT_BATTERY%."
fi

elif [ "$BATTERY_ON" == "Full" ]; then
$($PLAY)
notify-send -i "$FULLBAT_ICON" "Battery is Full - 100%."
fi
fi
sleep $SLEEP
done

Obtener fecha del sistema y colocarlo en un JDateChooser Java

Recientemente me fue necesario obtener la fecha del sistema para colocarlo en un JDateChooser, con la finalidad de que la fecha no fuera null, ya que eso puede causar excepciones cuando se intente obtener la fecha de un JDateChooser en caso de que no haya fecha seleccionada.
Para agregar el JCalendar a la paleta seguir este tutorial 
La interfaz que se crea es sencilla, es la siguiente:

Previo a esto, es necesario agregar un jar llamado jcalendar, tal y como se ve en la imagen de abajo:


Es un JFrame que contiene una JLabel y un JDateChooser. Todo lo que hay que hacer es agregar lo siguiente el constructor que trae por el default.

public FechasJdate() {
        initComponents();
        Calendar c2 = new GregorianCalendar();
        jDateChooser1.setCalendar(c2);
}

Ahora a ejecutar el paquete y listo. Cuando inicie el programa automáticamente la fecha del día se mostrará en el JDateChooser

El ejemplo lo pueden descargar de aquí: https://mega.nz/#!DFg0mLRT!AsMvgh4DX3QDklgKRBKL0b-rohPgriekVBTEmaRTenw

Agregar un JCalendar a la paleta de componentes de netbeans

Para poder arrastrar y soltar componentes de tipo calendarios, selección de año, mes o día, es mejor usar JCalendar y así evitar validar fechas por separado. Los componentes que ofrece JCalendar son las siguientes:

Antes de comenzar, es necesario descargar el jar de aquí en caso de que el link ya no esté disponible, por favor tendrán que buscarlo por su cuenta.
Después de descargarlo es necesario agregar a su editor favorito, en mi caso lo agregaré a netbeans, es solo por comodidad, para que los componentes del jar lo puedan ver desde la paleta gráfica de opciones que presenta netbeans, usaré la versión 8.0.
Paso uno: abrir netbeans
Paso dos: ir a menú tools o herramientas según sea el idioma que usen, seleccionar palette y luego Swing/AWT Components. Como se muestra en la imagen de abajo.
Paso tres: cuando le den clic les abrirá la siguiente ventana: en dicha ventana hay que agregar una nueva categoría esto en caso de que quieran que el nuevo jar que se agregará tenga su propia categoría, o bien, lo pueden agregar en una ya existente.
Para agregar una nueva categoría dar clic sobre el botón New Category y luego aparecerá una ventana en la que capturan el nombre y clic en aceptar, después le dan en Add from JAR y buscan el jar que descargaron, a continuación seleccionan la categoría en la que quieran agregarlo y listo. Podrán ver su nueva categoría de la siguiente manera.

Y listo eso es todo lo que se necesita para poder realizar un arrastrar y soltar con componentes, en general es así para todo tipo de jars de swing.

lunes, 14 de julio de 2014

Instalación de processing en fedora

Instalando Arduino

Instalando Arduino en nuevas versiones de Fedora es fácil basta con ejecutar, esto es opción, en caso de que ya lo tengan instalado, pues omitanlo:
sudo yum install arduino
También hay una herramienta comiler/uploader de línea de comandos que también es bastante util:
sudo yum install ino picocom
Asegurar de agregar nuestro usuario a lo siguientes grupos:
sudo gpasswd add $USER dialout lock

Instalación de Processing

Puesto que solo hay compatibilidad para 32 bits, entonces se tienen que instalar de la siguiente manera.

32 bit

Descargar el último paquete de Processing sitio web y extraer el  archivo en alguna parte.
Si estás ejecutando 64 bits de Linux tendrá que instalar los siguientes paquetes para garantizar compatibilidad.
sudo yum install redhat-lsb-desktop.i686
Si va a usar OpenGL también necesitará el controlador de gráficos de 32 bit propietario (intel por ejemplo):
sudo yum install mesa-dri-drivers.i686

64 bits

Para el de 64 bits, es necesario descargar el paquete y descomprimirlo en alguna parte de sus sistema de ficheros, por ejemplo /opt/

Configuración para un buen funcionamiento

32 bit

Processing al igual que arduino necesita permisos para poder modificar archivos de los directorios de /run/lock/ /var/lock para asegurar ese permiso, realizar los siguiente.
sudo chown root:lock /run/lock
sudo chmod 0775 /run/lock
Para no tener que dar permisos cada vez que vayas a utilizar dichos programas, puedes hacerlo permanente con la siguiente línea de comandos.
sudo cp /usr/lib/tmpfiles.d/legacy.conf /etc/tmpfiles.d/
Ahora editar el archivo /etc/tmpfiles.d/legacy.conf y cambie la línea:
d /run/lock 0755 root root -
a esto:
d /run/lock 0775 root lock -

Por último

Realizar lo siguiente:
Mover la carpeta descomprimida del archivo que descargaron de processing, cambiarle el nombre a processing y moverla a /opt/ pueden hacerlo abriendo en la terminal un gestor de archivos en modo superusuario o desde consola:
Abriendo un gestor de archivos desde terminal en modo superusuario:

sudo nautilus
Luego de ejecutar el comando anterior, abrirá nautilus en modo superusuario, mover la carpeta manualmente a /opt, es la manera más fácil.
Mover la carpeta desde consola:
sudo su -c "mv /tmp/processing* /opt/processing"
Después ejecutar el siguiente comando:
sudo su -c "ln -s /opt/processing/processing /usr/local/bin/processing"
Y eso es todo,  a usarlo ahora:
Para ejecutar processing realizar desde consola el siguiente comando:
cd /opt/processing
./processing

viernes, 11 de julio de 2014

Punteros en programas arduino

Recientemente realicé un proyecto con arduino. Necesitaba que al tener presionado un botón desde el protoboard conectado a un pin de arduino se encendiera un led, pero que únicamente validara el primer pulso sobre el botón.
Un programa en arduino se ejecuta en loop, es decir en un ciclo infinito, para detener un proceso se usan retardos, esto con la función delay(100), el parámetro que recibe son el total de milisengundos que se retardará le programa.
El problema que tuve en primer lugar es cómo validar únicamente el primer pulso, e ignorar los demás pulsos, lo que ocurre es que arduino sensa los pines cada 100 milisegundos, al menos ese es el tiempo que yo le dí, entonces cada 100 ms realizaba la misma acción, algo que no quería.
EL segundo problema fue usar apuntadores.
La solución quedó de la siguiente manera:
Primero vea el circuito y el material que usé para esta parte:

Ahí pueden ver los materiales usados, así como la conexión de cada componente. La idea es que cuando se presione un botón se encienda el led de salida, solo tomando en cueta el primer pulso, es decir, tanto en pantalla como en el resultado solo mostrará un uno sólo una vez.
El código es el siguiente:

const int buttonPinEntrada1 = 2;
const int buttonPinEntrada2 = 3;
const int ledPinSalida1 =  8;
const int ledPinSalida2 =  9;
int buttonState1 = 0;
int buttonState2 = 0;
int bBoton1=0;
int bBoton2=0;
int *band;

void setup(){
  Serial.begin(9600);
  pinMode(ledPinSalida1, OUTPUT);
  pinMode(ledPinSalida2, OUTPUT);
  pinMode(buttonPinEntrada1, INPUT);
  pinMode(buttonPinEntrada2, INPUT);
}

void loop(){
  /*boton 1*/
  buttonState1 = digitalRead(buttonPinEntrada1);
  band=&bBoton1;
  validarUnicoPulsoBoton(ledPinSalida1,band,buttonState1);
  /*boton 2*/
  buttonState2 = digitalRead(buttonPinEntrada2);
  band=&bBoton2;
  validarUnicoPulsoBoton(ledPinSalida2,band,buttonState2);
  delay(100);
}

/*procedimiento que se usa para validar una sola pulsacion de un boton*/
void validarUnicoPulsoBoton(int ledPinSalida,int *band,int buttonState){
  /*se verifica si el estado del buton es igual a uno, es decir, si esta presionado, de tal forma que si el boton se mantiene presionado
  por mucho tiempo, pasara la siguiente condicion, esto evita que se realize la misma accion muchas veces*/
  if(buttonState == 1){
    /*se veirifica si la bandera de ese boton esta desactivada, lo que significa que no se ha realizado ninguna accion
    tras a ver pulsado dicho boton*/
    if(*band == 0){
      /*se realiza la accion, en este caso se enciende un led*/
      digitalWrite(ledPinSalida, HIGH);
      /*se actualiza la bandera para indicar que la accion ya se ha realizado al menos una vez*/
      *band=1;
      /*se imprime en pantalla el valor de la bandera, solo para asegurar en que estado se encuentra (opcional)*/
      Serial.println(*band);
    }
  }
  /*se verifica si el estado del boton es igual a cero, esto indicara que el boton ha cambiado de valor, presionado a no presionado*/
  if(buttonState == 0){
    /*se valida que la bandera sea igual a 1, indica que la accion que se realiza cuando es presionado el boton se ha realizado al menos
    una vez*/
    if(*band == 1){
      /*sin la bandera esta activada, en este caso se encendio el led, entonces es necesario apagarlo*/
      digitalWrite(ledPinSalida, LOW);
      /*se actuliza el valor de la bandera, para indicar que el  estado del boton ha sido actualizado*/
      *band=0;
      /*opcional se imprime el nuevo valor de la bandera*/
      Serial.println(*band);
    }
  }
}

Y eso es todo, buena suerte.

lunes, 7 de julio de 2014

Cambiar la dirección MAC a la tarjeta de red de tu laptop con macchanger

La dirección MAC de la tarjeta de red,es una de las maneras más fáciles de rastrear e identificar un equipo, por suerte es bastante sencilla de cambiar sobre todo si utilizamos una pequeña aplicación llamada macchanger, disponible en la mayoría de repositorios de las diferentes distros linux.

1. Identificar MAC actual en nuestra PC

Ejecutar el siguiente comando
$ ifconfig

2. Detener la interfaz que estén usando

Ejecutar el siguiente comando ojo, seleccionen el que estén usando, con el comando anterior se puede obtener la lista de interfaces de red.
$ ifconfig wlp6s0 down

3. Cambiando la mac

Ahora es el momento de ejecutar macchanger con el parametro -r que nos proporciona una direccion mac aleatoria, seguido de la interfaz de red
Para cambiar la mac se ejecuta la instrucción siguiente.
$ macchanger -r wlp6s0

4. Cambiando la mac manualmente

Para cambiar la mac manualmente se ejecuta la instrucción siguiente.
$ macchanger -m 00:01:12:35:8f:0b wlp6s0

5. Reiniciando el servicio de red

Como recordaréis habíamos desactivado la red, ahora es el momento de iniciarla otra vez.
$ ifconfig wlp6s0 up


Ojo: esto no cambia de modo permanente la dirección física de nuestro equipo, la próxima vez que reiniciemos volveremos a tener la MAC original.

domingo, 6 de julio de 2014

Cómo configurar gt-recordMyDesktop para grabar tu escritorio sin problemas Gtk

Cómo configurar gt-recordMyDesktop para grabar tu escritorio sin problemas

Gtk-recordmydesktop es, sin dudas, el mejor programa para grabar tu escritorio disponible para Linux. No obstante, tiene un ENORME problema: para que funcione bien (que el video y el audio no salten, por ejemplo) es necesario configurarlo correctamente. He aquí la guía que va a resolver todos tus problemas con Gtk-recordmydesktop. Grabá tus screencast sin problemas y muy fácilmente.



Instalación
$ sudo dnf install gtk-recordmydesktop

Configurarción

1.- Abrir gtk Gtk-recordmydesktop.

2.- Clic en el botón que dice Avanzado

3.- Configurar las opciones de la pestaña rendimiento de la siguiente manera

4.- Configurar la pestaña Sonido del siguiente modo:
5.- Configurar la pestaña miscelánea así:



Y listo, eso sería todo, la pestaña archivo lo dejo a su criterio cada uno le gusta guardar los archivos en distinta parte, de modo que si quieren cambiar la ruta en la que se guardarán los archivos, modifiquen la ruta en la pestaña archivo.


 

martes, 1 de julio de 2014

Instalar MySQL Server y MysqlWorkbech en fedora 20 usando paquetes descargados

Instalar MySQL Server y MysqlWorkbech en fedora 20

 A veces es necesario instalar mysql para usarlo en aplicaciones que se crean. Se me dificultó instalarlo la primera vez, así que decidí documentar la forma en que lo hice.

Lo primero que necesitan es la lista de paquetes a instalar de mysql, lo pueden descargar del sitio oficial de mysql. Actualmente ya existe soporte de mysql para fedor, pueden instalarlo desde los repositorios oficiales o descargarlo e instalarlos por separado. Instalarlos desde los repositorios es mejor, ya que podrán actualizarlos de manera automática.
Los paquetes son los siguientes:

  1. MySQL-client-5.6.19-1.el6.x86_64.rpm
  2. MySQL-devel-5.6.19-1.el6.x86_64.rpm
  3. MySQL-server-5.6.19-1.el6.x86_64.rpm
  4. mysql-workbench-community-6.1.7-1.el6.x86_64.rpm

Dependiendo de la arquitectura que vayan a usar así es como de beben de elegir los paquetes, los nombres de los paquetes deben ser casi igual, sobre todo cuando el6.x86_64 ojo, es muy importante que sean de la misma versión, ya que si no lo son, causará problemas de incompatibilidad.

Ahora la instalación se realiza en el orden en que están los paquetes en la lista anterior, para instalarlos pueden dar doble clic y teclear la contraseña y listo, o pueden usar la consola.

En caso de usar la consola, se realiza lo siguiente, posiblemente les cause error si lo instalan directamente, dependiendo si automáticamente el SO no puede resolver las dependencias, en caso de que sea por consola, sabrán qué paquetes descargar.
Abrir la consola, ir al directorio donde se encuentran los paquetes e instalarlos en orden:
sudo rpm -ivh MySQL-client-5.6.19-1.el6.x86_64.rpm
sudo rpm -ivh MySQL-devel-5.6.19-1.el6.x86_64.rpm
sudo rpm -ivh MySQL-server-5.6.19-1.el6.x86_64.rpm
sudo rpm -ivh mysql-workbench-community-6.1.7-1.el6.x86_64.rpm
El último paquete requerirá de dependencias que tendrás que descargar por separado e instalarlos de la misma manera como se instalaron los de arriba.
Las dependencias faltantes las pueden descargar de: http://rpmfind.net/
Después de instalar el paquete con el nombre de MySQL-server-5.6.19-1.el6.x86_64.rpm
hay que configurar el servidor:
En la ruta /root encontraran un archivo oculto que se llama .mysql_secret dicho archivo contiene la contraseña que se le asigna por default al servidor de mysql es muy importante que dicho archivo no sea eliminado para poderlo abrir es necesario teclear la siguientes instrucciones:
su -
ls -la
gedit .mysql_secret
Abrimos el archivo sólo para poder ver la contraseña, ahora es necesario iniciar el servidor mysql, pueden usar las siguientes instrucciones:
sudo systemctl start mysqld.service sudo service mysql start
Después de haber iniciado el servidor, es necesario cambiarle la contraseña, se realiza lo siguiente:
/usr/bin/mysql_secure_installation
La información que le arrojará es la siguiente:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY! 
In order to log into MySQL to secure it, we\'ll need the current
password for the root user. If you\'ve just installed MySQL, and
you haven\'t set the root password yet, the password will be blank,
so you should just press enter here.
 
Enter current password for root (enter for none): 
OK, successfully used password, moving on...
 
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
 
Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
 ... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
 ... Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
 ... Success!
Cleaning up...
All done! If you\'ve completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
 Si quieren cambiar su contraseña que al inicio cuando lo ejecuten por primera vez se los pedirá.
Si quieren cambiarlo por separado la instrucción es:
mysqladmin -u root password [tu_contraseña_aqui]
## Ejemplo ##
mysqladmin -u root password minuevacontrasenias
Para conectarse al servidor desde consola la instrucción es:
mysql -u root -p
## o también pueden usar ##
mysql -h localhost -u root -p
Pero como nosotros hemos instalado mysql-workbench-community-6.1.7-1.el6.x86_64.rpm 
para evitar usar la consola, lo que tienen que hacer es abrir el editor y crear una nueva conexión.
Y por mi parte eso es todo, crear una conexión al servidor desde el editor
mysql-workbench-community-6.1.7-1.el6.x86_64.rpm
es bastante intuitivo, de modo que no lo explicaré.