jueves, 20 de septiembre de 2018

Allow port MongoBD port GCloud

https://docs.bitnami.com/google/faq/administration/use-firewall/

lunes, 27 de agosto de 2018

Cambiar libre office al español (Tambien la corrección ortográfica) Ubuntu 18.04

Instalas esto desde terminal:
sudo apt-get install myspell-es libreoffice-java-common libreoffice-l10n-es



Luego de reiniciar, descargas esta mierda en donde quieras:
https://extensions.libreoffice.org/extensions/spanish-dictionaries/2.3/@@download/file/es_ANY.oxt


Luego abres libre officar y seleccionas español en todo lo que te salga en  vas a Herramientas -> Gestor de extensiones y agregas el fichero es_ANY.oxt que acabas de agregar


Reinicias y listo

sábado, 18 de agosto de 2018

Instalar Android Studio Ubuntu 18.04

Primero instala las dependencias:

sudo apt install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6 libbz2-1.0:i386 lib32stdc++6 qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Luego instalar android studio

lunes, 9 de julio de 2018

Manejo de modem analógico 56k en linux

En esta entrada veremos un resumen del uso de un modem analógico en linux. (Esta es una guía para mi, así que me sabe a culo si no está bien explicada)



Primero vemos el model del dispositivo. En mi caso es un USR5637.



Luego nos conectamos al puerto y hacemos una prueba escribiendo AT+GCI?
El dispositivo debería responder con el código Annex A de T.35 de nuestro país, que en mi caso es BB (Venezuela). Puedes ver la lista completa de códigos de paises aquí:
http://www.katpatuka.org/pub/doc/t.35.html

Cabe destacar que el carácter de finalización es el retorno de carro (\r)


Probando 

Llamar a un número ATD<numero>. Ejemplo para llamar al número 04141234567
ATD04141234567\r


Usando NCID
El paquete NCID nos da un conjunto de facilidades para el manejo del modem usb.
En mi caso descargué el paquete ncid_1.7-3_amd64.deb y ncid-client_1.7-3_all.deb porque uso Ubuntu 64  bits.

Una vez instalado puedes probar que NCID funcione correctamente con el siguiente comando:

ncidd -Dv3







Probado en Ubuntu 17.10 x86_64

Otros:
Comandos
Todos los comandos inician con el prefijo AT siguiendo los estandares: T-REC-V.250-200307
Ejemplo: Para reiniciar de fábrica el comando es &F0 entonces se escribe AT&F0\r

Soporte de audio
Para que este dispositivo soporte audio debe tener el firmware en la versión 1.2.23. Para ello te recomiendo que actualices desde Windows. Puedes descargar el firmware desde aquí.
Para comprobar la versión del firmware debes escribir:
ATI3
U.S. Robotics 56K FAX USB V1.2.23
OK


Convertir de WAV a rmf
sox announce.wav -t pvf -c 1 -r 8000 -b 8 announce.pvf
pvftormd V253modem 8 announce.pvf announce.rmd


Referencias:
http://www.xmodus.ch/Downloads/XM3000S/XM3000S-A00-103.pdf

jueves, 5 de julio de 2018

Instalar paquetes en alphine linux

Para instalar git por ejemplo:

primero debes hacer updat
apk update

Luego buscas el nombre de paquete aqui :
https://pkgs.alpinelinux.org/packages?name=git&branch=edge

Al final instalas
apk add git

miércoles, 4 de julio de 2018

unpack, edit and repack .deb package

Using pluma editor:

fakeroot sh -c '
  mkdir tmp
  dpkg-deb -R *.deb tmp
  pluma tmp/DEBIAN/control
  dpkg-deb -b tmp fixed.deb
'

martes, 3 de julio de 2018

miércoles, 18 de abril de 2018

Run mqtt-spy in Ubuntu 17.10

first install javafx deps

sudo apt-get install openjfx

Then download the latest jar and put in /opt

Download: https://github.com/eclipse/paho.mqtt-spy/wiki/Downloads

Run!

miércoles, 11 de abril de 2018

Publish / Share / Register your own library in PlatformIO Library Registry

Step 1: publish your project on github

You must first create your manifest file that must be called "library.json" and it must be in the root of the project


In my case it has the following structure:

{
  "name": "EasyOta",
  "keywords": "ota, over,to, air,esp8266",
  "description": " The easiest way to implement ota on an esp8266 based chip using an HTTP server",
  "repository":
  {
    "type": "git",
    "url": "https://github.com/Eitol/EasyOta.git"
  },
  "authors":
  [
    {
      "name": "Hector Oliveros",
      "email": "hector.oliveros.leon@gmail.com",
      "maintainer": true
    }
  ],
  "license": "MIT",
  "version": "1.0",
  "frameworks": "arduino",
  "platforms": "espressif8266"
}



Step 2: copy the url of the raw project

The url is some like this:
https://raw.githubusercontent.com/GITHUB_USER/PROJECT/master/library.json

Example:

For my project with url = https://github.com/Eitol/EasyOta

Then, the url is:

https://raw.githubusercontent.com/Eitol/EasyOta/master/library.json



Step 3: Use the url to register your library

The command is:

platformio lib register [MANIFEST_URL]

example:

platformio lib register https://raw.githubusercontent.com/Eitol/EasyOta/master/library.json


lunes, 9 de abril de 2018

FIX: No output from qDebug

Si qDebug no muestra nada en Qt 5.9 entonces debes crear un fichero qtlogging.ini (vacio) en el directorio home: 
.config/QtProject/qtlogging.ini

lunes, 2 de abril de 2018

Raspberry PI 3 Composite video problem

Si conectando la raspberry al television usando un cable plug - RCA ves una imagen como la siguiente:


es porque el cable que estas usando no es el adecuado y tiene intercambiado el pin de tierra con el de video:


Solución:

Solución cara pero fácil: Comprar un cable que sea compatible que transmita el video por el último segmento (como los de Apple)

Solución fea: Soldar los cables a la rb: https://www.raspberrypi.org/forums/viewtopic.php?t=181288

Solución fácil y barata:  Con un conector dc hembra y otro macho puedes pasar intercambiar la señal de video por la de tierra (Esta me funcionó perfecto)










Pueder ver mas info aquí:

viernes, 2 de marzo de 2018

Usar una Raspberry Pi como programador AVR

En esta entrada veremos el proceso de creación de un Programador Remoto de AVR.


Componentes

Se utilizarán los siguientes componentes:

- Una Raspberry Pi 3 Model B con Raspbian 9 como SO
(También se probó en una Orange Pi con Ubuntu server 16.04)

- Un Arduino Uno o un Mega 2560


Proceso

El proceso sería el siguiente:
1- Un usuario carga el código compilado (hex) a firebase
2- Firebase envía la notificación de cambio a la raspberry (Utilizando la base de datos en tiempo real)
3- La raspberry descarga el código
4- La raspberry sube el código al Arduino




Conexiones

Puedes alimentar el Arduino por USB o por los pines GND y VCC del ICSP.
Puedes cambiar los pines a utilizar, pero no puedes usar el BCM 4 (PIN 7) que por alguna razón da problemas (Ver más info aquí)
Note que las conexiones en la Raspberry son a los pines BCM. 
Arduino ICSP | Raspberry BCM
reset       | 12; # Pin 32
sck         | 11; # Pin 23
mosi        | 10; # Pin 19
miso        | 9;  # Pin 21


Conexiones Arduino -> Raspberry ICSP

Así quedó

Instalando avrdude


La versión 6.2 y 6.3 de avrdude por alguna razón muy rara no está habilitada para usar los GPIO para cargar código (linuxgpio) y no funciona bien. Pude hacerlo funcionar con la versión 6.1

Debes ejecutar lo siguiente:

sudo apt-get install bison flex libusb-dev gcc gcc-avr avr-libc libelf-dev libusb-1.0-0-dev libusb-1.0-0-dev libftdi1-dev libftdi-dev libhidapi-libusb libevent-pthreads-2.0-5 libpthread-workqueue0 -y

wget http://ftp.nchc.org.tw/Unix/NonGNU/avrdude/avrdude-6.1.tar.gz

tar xfv avrdude-6.1.tar.gz

cd avrdude-6.1

./configure --enable-linuxgpio

make -j4

sudo make install


Probando la instalación de avrdude

Copias el fichero avrdude.conf al home del usuario
cp /usr/local/etc/avrdude.conf ~/avrdude_gpio.conf

Luego abres el fichero que acabas de copiar 
nano ~/avrdude_gpio.conf

y le agregas esto al final

programmer 
 id    = "pi_1"; 
 desc  = "Use the Linux sysfs interface to bitbang GPIO lines"; 
 type  = "linuxgpio"; 
 reset = 12; 
 sck   = 11; 
 mosi  = 10; 
 miso  = 9; 
;

Luego probamos la conexión con el Arduino ejecutando lo siguiente:

sudo avrdude -p atmega2560 -C avrdude_gpio.conf -c pi_1 -v

Deberías ver algo así en la consola:


Y el arduino debe parpadear como en el siguiente video:



Probando la carga del código

Primero debemos generar el codigo compilado con extensión .hex.
Para ello abrimos Arduino IDE en cualquier PC (no necesariamente en la raspberry) y entramos en Preferencias y marcamos lo siguiente:


Luego compilamos (Estoy usando el ejemplo de Blink) y buscamos el archivo .hex y lo copiamos y pegamos en el home de la raspberry al lado del fichero avrdude_gpio.conf



Para subir el codigo al Arduino debes ejecutar el siguiente comando:

sudo avrdude -p atmega2560 -C ~/avrdude_gpio.conf -c pi_1 -v -U flash:w:NOMBRE_DEL_HEX:i

En nuestro caso como el fichero se llama Blink.ino.hex:

sudo avrdude -p atmega2560 -C ~/avrdude_gpio.conf -c pi_1 -v -U flash:w:Blink.ino.hex:i


NOTA: Debes tener MUCHO cuidado con ese comando y el parámetro "p". He cargado por error un codigo compilado para atmega2561 en mi atmega2560 y se ha brickeado.


Referencias:
https://learn.adafruit.com/program-an-avr-or-arduino-using-raspberry-pi-gpio-pins
http://ozzmaker.com/program-avr-using-raspberry-pi-gpio/
http://blog.stevemarple.co.uk/2012/07/avrarduino-isp-programmer-using.html

FIX: ImportError: cannot import name 'opentype'

Fix this problem:

File "/usr/local/lib/python3.5/dist-packages/oauth2client/_pure_python_crypt.py", line 24, in <module>
    from pyasn1_modules.rfc2459 import Certificate
  File "/usr/local/lib/python3.5/dist-packages/pyasn1_modules/rfc2459.py", line 20, in <module>
    from pyasn1.type import opentype

ImportError: cannot import name 'opentype'



SOLUTION: 

pip3 install --upgrade pyasn1-modules

Saber si el código se esta ejecutando en una Raspberry Pi

Estoy haciendo un código y deseo saber si se está ejecutando en una Orange Pi o en una Raspberry Pi

Para poder determinarlo se debe usar os.uname()

import os
os.uname()

Para la raspberry retorna:
posix.uname_result(sysname='Linux', nodename='raspberrypi', release='4.9.59-v7+', version='#1047 SMP Sun Oct 29 12:19:23 GMT 2017', machine='armv7l')

Para la orange:
posix.uname_result(sysname='Linux', nodename='OrangePI', release='3.4.39', version='#46 SMP PREEMPT Wed Nov 9 09:50:08 CST 2016', machine='armv7l')os.uname()
posix.uname_result(sysname='Linux', nodename='OrangePI', release='3.4.39', version='#46 SMP PREEMPT Wed Nov 9 09:50:08 CST 2016', machine='armv7l')

Best way to generate requeriments.txt

La mejor forma de generar un fichero requirements.txt

es con pipreqs

$ pip install pipreqs
$ pipreqs /path/to/project
Más info:
http://www.idiotinside.com/2015/05/10/python-auto-generate-requirements-txt/

jueves, 1 de marzo de 2018

Valid AVRDUDE Part model list

Valid parts are:
 uc3a0512 = AT32UC3A0512       [/home/pi/avrdude_gpio.conf:14158]
 c128     = AT90CAN128         [/home/pi/avrdude_gpio.conf:3255]
 c32      = AT90CAN32          [/home/pi/avrdude_gpio.conf:3639]
 c64      = AT90CAN64          [/home/pi/avrdude_gpio.conf:3447]
 pwm2     = AT90PWM2           [/home/pi/avrdude_gpio.conf:8684]
 pwm2b    = AT90PWM2B          [/home/pi/avrdude_gpio.conf:8877]
 pwm3     = AT90PWM3           [/home/pi/avrdude_gpio.conf:8867]
 pwm316   = AT90PWM316         [/home/pi/avrdude_gpio.conf:8904]
 pwm3b    = AT90PWM3B          [/home/pi/avrdude_gpio.conf:8891]
 1200     = AT90S1200          [/home/pi/avrdude_gpio.conf:1716]
 2313     = AT90S2313          [/home/pi/avrdude_gpio.conf:1945]
 2333     = AT90S2333          [/home/pi/avrdude_gpio.conf:2058]
 2343     = AT90S2343          [/home/pi/avrdude_gpio.conf:2186]
 4414     = AT90S4414          [/home/pi/avrdude_gpio.conf:1832]
 4433     = AT90S4433          [/home/pi/avrdude_gpio.conf:2310]
 4434     = AT90S4434          [/home/pi/avrdude_gpio.conf:2434]
 8515     = AT90S8515          [/home/pi/avrdude_gpio.conf:2517]
 8535     = AT90S8535          [/home/pi/avrdude_gpio.conf:2631]
 usb1286  = AT90USB1286        [/home/pi/avrdude_gpio.conf:11466]
 usb1287  = AT90USB1287        [/home/pi/avrdude_gpio.conf:11657]
 usb162   = AT90USB162         [/home/pi/avrdude_gpio.conf:11670]
 usb646   = AT90USB646         [/home/pi/avrdude_gpio.conf:11262]
 usb647   = AT90USB647         [/home/pi/avrdude_gpio.conf:11453]
 usb82    = AT90USB82          [/home/pi/avrdude_gpio.conf:11857]
 m103     = ATmega103          [/home/pi/avrdude_gpio.conf:2752]
 m128     = ATmega128          [/home/pi/avrdude_gpio.conf:3075]
 m1280    = ATmega1280         [/home/pi/avrdude_gpio.conf:9693]
 m1281    = ATmega1281         [/home/pi/avrdude_gpio.conf:9883]
 m1284    = ATmega1284         [/home/pi/avrdude_gpio.conf:4451]
 m1284p   = ATmega1284P        [/home/pi/avrdude_gpio.conf:4645]
 m1284rfr2 = ATmega1284RFR2     [/home/pi/avrdude_gpio.conf:10318]
 m128rfa1 = ATmega128RFA1      [/home/pi/avrdude_gpio.conf:10103]
 m128rfr2 = ATmega128RFR2      [/home/pi/avrdude_gpio.conf:10206]
 m16      = ATmega16           [/home/pi/avrdude_gpio.conf:3832]
 m161     = ATmega161          [/home/pi/avrdude_gpio.conf:5977]
 m162     = ATmega162          [/home/pi/avrdude_gpio.conf:4837]
 m163     = ATmega163          [/home/pi/avrdude_gpio.conf:5035]
 m164p    = ATmega164P         [/home/pi/avrdude_gpio.conf:4011]
 m168     = ATmega168          [/home/pi/avrdude_gpio.conf:7723]
 m168p    = ATmega168P         [/home/pi/avrdude_gpio.conf:7912]
 m169     = ATmega169          [/home/pi/avrdude_gpio.conf:5193]
 m16u2    = ATmega16U2         [/home/pi/avrdude_gpio.conf:12234]
 m2560    = ATmega2560         [/home/pi/avrdude_gpio.conf:9896]
 m2561    = ATmega2561         [/home/pi/avrdude_gpio.conf:10090]
 m2564rfr2 = ATmega2564RFR2     [/home/pi/avrdude_gpio.conf:10308]
 m256rfr2 = ATmega256RFR2      [/home/pi/avrdude_gpio.conf:10157]
 m32      = ATmega32           [/home/pi/avrdude_gpio.conf:5800]
 m324p    = ATmega324P         [/home/pi/avrdude_gpio.conf:4035]
 m324pa   = ATmega324PA        [/home/pi/avrdude_gpio.conf:4227]
 m325     = ATmega325          [/home/pi/avrdude_gpio.conf:12604]
 m3250    = ATmega3250         [/home/pi/avrdude_gpio.conf:12985]
 m328     = ATmega328          [/home/pi/avrdude_gpio.conf:8113]
 m328p    = ATmega328P         [/home/pi/avrdude_gpio.conf:8298]
 m329     = ATmega329          [/home/pi/avrdude_gpio.conf:5375]
 m3290    = ATmega3290         [/home/pi/avrdude_gpio.conf:5574]
 m3290p   = ATmega3290P        [/home/pi/avrdude_gpio.conf:5588]
 m329p    = ATmega329P         [/home/pi/avrdude_gpio.conf:5560]
 m32u2    = ATmega32U2         [/home/pi/avrdude_gpio.conf:12046]
 m32u4    = ATmega32U4         [/home/pi/avrdude_gpio.conf:11071]
 m406     = ATMEGA406          [/home/pi/avrdude_gpio.conf:14496]
 m48      = ATmega48           [/home/pi/avrdude_gpio.conf:7323]
 m48p     = ATmega48P          [/home/pi/avrdude_gpio.conf:7510]
 m64      = ATmega64           [/home/pi/avrdude_gpio.conf:2892]
 m640     = ATmega640          [/home/pi/avrdude_gpio.conf:9503]
 m644     = ATmega644          [/home/pi/avrdude_gpio.conf:4243]
 m644p    = ATmega644P         [/home/pi/avrdude_gpio.conf:4434]
 m644rfr2 = ATmega644RFR2      [/home/pi/avrdude_gpio.conf:10328]
 m645     = ATmega645          [/home/pi/avrdude_gpio.conf:12795]
 m6450    = ATmega6450         [/home/pi/avrdude_gpio.conf:12997]
 m649     = ATmega649          [/home/pi/avrdude_gpio.conf:5601]
 m6490    = ATmega6490         [/home/pi/avrdude_gpio.conf:5787]
 m64rfr2  = ATmega64RFR2       [/home/pi/avrdude_gpio.conf:10219]
 m8       = ATmega8            [/home/pi/avrdude_gpio.conf:6117]
 m8515    = ATmega8515         [/home/pi/avrdude_gpio.conf:6278]
 m8535    = ATmega8535         [/home/pi/avrdude_gpio.conf:6436]
 m88      = ATmega88           [/home/pi/avrdude_gpio.conf:7523]
 m88p     = ATmega88P          [/home/pi/avrdude_gpio.conf:7710]
 m8u2     = ATmega8U2          [/home/pi/avrdude_gpio.conf:12422]
 t10      = ATtiny10           [/home/pi/avrdude_gpio.conf:14451]
 t11      = ATtiny11           [/home/pi/avrdude_gpio.conf:1211]
 t12      = ATtiny12           [/home/pi/avrdude_gpio.conf:1275]
 t13      = ATtiny13           [/home/pi/avrdude_gpio.conf:1408]
 t15      = ATtiny15           [/home/pi/avrdude_gpio.conf:1583]
 t1634    = ATtiny1634         [/home/pi/avrdude_gpio.conf:14184]
 t20      = ATtiny20           [/home/pi/avrdude_gpio.conf:14461]
 t2313    = ATtiny2313         [/home/pi/avrdude_gpio.conf:8311]
 t24      = ATtiny24           [/home/pi/avrdude_gpio.conf:10339]
 t25      = ATtiny25           [/home/pi/avrdude_gpio.conf:8957]
 t26      = ATtiny26           [/home/pi/avrdude_gpio.conf:6594]
 t261     = ATtiny261          [/home/pi/avrdude_gpio.conf:6751]
 t4       = ATtiny4            [/home/pi/avrdude_gpio.conf:14407]
 t40      = ATtiny40           [/home/pi/avrdude_gpio.conf:14478]
 t4313    = ATtiny4313         [/home/pi/avrdude_gpio.conf:8500]
 t43u     = ATtiny43u          [/home/pi/avrdude_gpio.conf:10892]
 t44      = ATtiny44           [/home/pi/avrdude_gpio.conf:10523]
 t45      = ATtiny45           [/home/pi/avrdude_gpio.conf:9139]
 t461     = ATtiny461          [/home/pi/avrdude_gpio.conf:6942]
 t5       = ATtiny5            [/home/pi/avrdude_gpio.conf:14424]
 t84      = ATtiny84           [/home/pi/avrdude_gpio.conf:10707]
 t85      = ATtiny85           [/home/pi/avrdude_gpio.conf:9320]
 t861     = ATtiny861          [/home/pi/avrdude_gpio.conf:7133]
 t88      = ATtiny88           [/home/pi/avrdude_gpio.conf:7925]
 t9       = ATtiny9            [/home/pi/avrdude_gpio.conf:14434]
 x128a1   = ATxmega128A1       [/home/pi/avrdude_gpio.conf:13478]
 x128a1d  = ATxmega128A1revD   [/home/pi/avrdude_gpio.conf:13494]
 x128a1u  = ATxmega128A1U      [/home/pi/avrdude_gpio.conf:13504]
 x128a3   = ATxmega128A3       [/home/pi/avrdude_gpio.conf:13515]
 x128a3u  = ATxmega128A3U      [/home/pi/avrdude_gpio.conf:13525]
 x128a4   = ATxmega128A4       [/home/pi/avrdude_gpio.conf:13536]
 x128a4u  = ATxmega128A4U      [/home/pi/avrdude_gpio.conf:13594]
 x128b1   = ATxmega128B1       [/home/pi/avrdude_gpio.conf:13647]
 x128b3   = ATxmega128B3       [/home/pi/avrdude_gpio.conf:13706]
 x128c3   = ATxmega128C3       [/home/pi/avrdude_gpio.conf:13405]
 x128d3   = ATxmega128D3       [/home/pi/avrdude_gpio.conf:13458]
 x128d4   = ATxmega128D4       [/home/pi/avrdude_gpio.conf:13468]
 x16a4    = ATxmega16A4        [/home/pi/avrdude_gpio.conf:13136]
 x16a4u   = ATxmega16A4U       [/home/pi/avrdude_gpio.conf:13063]
 x16c4    = ATxmega16C4        [/home/pi/avrdude_gpio.conf:13116]
 x16d4    = ATxmega16D4        [/home/pi/avrdude_gpio.conf:13126]
 x16e5    = ATxmega16E5        [/home/pi/avrdude_gpio.conf:14053]
 x192a1   = ATxmega192A1       [/home/pi/avrdude_gpio.conf:13780]
 x192a3   = ATxmega192A3       [/home/pi/avrdude_gpio.conf:13796]
 x192a3u  = ATxmega192A3U      [/home/pi/avrdude_gpio.conf:13806]
 x192c3   = ATxmega192C3       [/home/pi/avrdude_gpio.conf:13717]
 x192d3   = ATxmega192D3       [/home/pi/avrdude_gpio.conf:13770]
 x256a1   = ATxmega256A1       [/home/pi/avrdude_gpio.conf:13880]
 x256a3   = ATxmega256A3       [/home/pi/avrdude_gpio.conf:13896]
 x256a3b  = ATxmega256A3B      [/home/pi/avrdude_gpio.conf:13917]
 x256a3bu = ATxmega256A3BU     [/home/pi/avrdude_gpio.conf:13927]
 x256a3u  = ATxmega256A3U      [/home/pi/avrdude_gpio.conf:13906]
 x256c3   = ATxmega256C3       [/home/pi/avrdude_gpio.conf:13817]
 x256d3   = ATxmega256D3       [/home/pi/avrdude_gpio.conf:13870]
 x32a4    = ATxmega32A4        [/home/pi/avrdude_gpio.conf:13225]
 x32a4u   = ATxmega32A4U       [/home/pi/avrdude_gpio.conf:13152]
 x32c4    = ATxmega32C4        [/home/pi/avrdude_gpio.conf:13205]
 x32d4    = ATxmega32D4        [/home/pi/avrdude_gpio.conf:13215]
 x32e5    = ATxmega32E5        [/home/pi/avrdude_gpio.conf:14105]
 x384c3   = ATxmega384C3       [/home/pi/avrdude_gpio.conf:13938]
 x384d3   = ATxmega384D3       [/home/pi/avrdude_gpio.conf:13991]
 x64a1    = ATxmega64A1        [/home/pi/avrdude_gpio.conf:13325]
 x64a1u   = ATxmega64A1U       [/home/pi/avrdude_gpio.conf:13341]
 x64a3    = ATxmega64A3        [/home/pi/avrdude_gpio.conf:13352]
 x64a3u   = ATxmega64A3U       [/home/pi/avrdude_gpio.conf:13362]
 x64a4    = ATxmega64A4        [/home/pi/avrdude_gpio.conf:13373]
 x64a4u   = ATxmega64A4U       [/home/pi/avrdude_gpio.conf:13241]
 x64b1    = ATxmega64B1        [/home/pi/avrdude_gpio.conf:13383]
 x64b3    = ATxmega64B3        [/home/pi/avrdude_gpio.conf:13394]
 x64c3    = ATxmega64C3        [/home/pi/avrdude_gpio.conf:13294]
 x64d3    = ATxmega64D3        [/home/pi/avrdude_gpio.conf:13305]
 x64d4    = ATxmega64D4        [/home/pi/avrdude_gpio.conf:13315]
 x8e5     = ATxmega8E5         [/home/pi/avrdude_gpio.conf:14001]
 ucr2     = deprecated, use 'uc3a0512' [/home/pi/avrdude_gpio.conf:14174]

FIX: Can't export GPIO 4 (AVRDUDE Raspberry)

Por alguna razón avrdude falla cuando se intenta utilizar el Pin 4 como RESET en una conexión ICSP.
Y muestra el siguiente error:
Can't export GPIO 4, already exported/busy?: Device or resource busy
avrdude done.  Thank you.

Para solucionarlo puedes usar otro puerto. Yo he usado el GPIO 12 y me fue de maravillas.



miércoles, 28 de febrero de 2018

Run remote x11 graphical application ssh in PyCharm

Intentando correr una aplicación grafica en mi raspberry pi utilizando pycharm me he conseguido con el siguiente error:

"tkinter.TclError: no display name and no $DISPLAY environment variable"


Esto ocurre porque para correr aplicaciones gráficas usando ssh se debe establecer la variable de entorno DISPLAY=:0
Para ello abrimos el RUN/DEBUG Configuration y la seteamos como en la siguiente imagen
NOTA: Note que el valor es :0 (Incluye el signo dos puntos)



Result:


autologin skype in linux

Para hacer que skype inicie automáticamente debe estar instalado gnome-keyring

Para ello:
sudo apt install gnome-keyring

Luego agregas la siguiente linea al autostart:
gnome-keyring-daemon --start --components=secrets

domingo, 25 de febrero de 2018

Mover ventana a la derecha o izquierda en KDE

Si queremos usar la funcionalidad de Windows de mover una ventana a la izquierda o derecha presionando Win + Left / Right
Debemos entrar en Shortcuts -> Global Shortcuts -> KWin y escribir "Tile" en la barra de busqueda



domingo, 18 de febrero de 2018

Add user to dialout

sudo adduser $(whoami) dialout

Instalar ilsap en ubuntu 17.10

Todos sabemos para que queremos instalar ilsap ;)

Pero bueno... manos a la obra:

Primero instala nodejs 8+

apt install curl
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

Luego instalamos ilsap

npm install ilsap



Luego instalamos ngrok (sniarbteJ últimamente esta poniendo en la blacklist al localhost)

Lo descargas de aquí:
https://ngrok.com/download

Lo descomprimes en /opt




Luego copias el comando TAL CUAL indica el paso 2





Para hacerlo permanente agregalos a los programas de arranque:



lunes, 12 de febrero de 2018

Disable serial echo in Raspbian

Por alguna extraña razón, por defecto en Raspbian Strech,  todo lo que que se escribe por serial se "devuelve".
Para solucionarlo:

stty -F /dev/ttyS0 -echo -onlcr

martes, 6 de febrero de 2018

Solve: laravel requires ext-mbstring in AWS Linux



Solución:

sudo yum install php70-mbstring.x86_64

(Cambiar la versión de PHP en la linea de comandos de ser necesario)

domingo, 28 de enero de 2018

Debug Asyncio async script in PyCharm

Por defecto no se puede debuguear las funciones async de asyncio.

Para activar el debugueo debes añadir lo siguiente:
-E PYTHONASYNCIODEBUG a los parámetros


Instalar VSPDL (Virtual Serial Port Driver for Linux)

*** Probado en Ubuntu 17.10 x86_64
Primero debes descargar el tar de VSPDL desde aquí:


Lo descomprimes en cualquier directorio

Si tienes una versión de kernel > a la 4.13 debes entrar en el directorio que descomprimiste y luego editar el fichero vspm.h que esta en usr/local/vspd-1.49-dist/lib/src/


Debes sustituir la linea 81 que indica:
"typedef wait_queue_t waitq_t;"

y cambiarla por:

#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 13, 0)
       wait_queue_entry_t wait;       
#else
        wait_queue_t wait;
#endif


Luego vas a usr/local/vspd-1.49-dist/ y ejecutas:
# bash install.sh /usr/local/vspd

Luego arrancas los servicios:
# /etc/init.d/vspm start # /etc/init.d/vspd start

viernes, 26 de enero de 2018

Serial Port Sniffer in Ubuntu with IO Ninja

para visualizar lo que emite un puerto serial sin necesidad de utilizar un cable espía puedes utilizar esta una magnífica herramienta llamada tdevmon en combinación con IONinja:

Instrucciones de instalación:
http://ioninja.com/doc/kb/tdevmon_linux_installation.html



Luego de instalado ve y abre IO Ninja

En este caso el módulo tdevmon.ko instalado en el kernel intercepta la data que se envié y se reciba desde el puerto serial (en este caso /dev/ttyUSB0)



Ejemplo de salida:




jueves, 25 de enero de 2018

Correr un programa en segundo plano al iniciar Windows 10

Si deseas correr una aplicación en background al iniciar Windows 10, sigue los siguientes pasos:

1. Tecla windows + R y ejecutar shell:startup


2. En la carpeta que se abrió a continuación, crea un archivo llamado boot.bat


3. El archivo boot.bat debe contener estas líneas de código:

@Echo off
Echo Set WshShell = CreateObject("WScript.Shell")              >>%temp%\ghost.vbs
Echo WshShell.CurrentDirectory = "D:\Documents\PythonProjects\mqtt-ngrok" >>%temp%\ghost.vbs
Echo WshShell.Run chr(34) ^& "main.py" ^& Chr(34), 0           >>%temp%\ghost.vbs
Echo Set WshShell = Nothing                                    >>%temp%\ghost.vbs
start %temp%\ghost.vbs
timeout /t 1 >nul
del %temp%\ghost.vbs


Nota: En mi caso estoy ejecutando un script python en segundo plano.