Variables locais e globais en autolisp

Cando creamos unha función en autolisp deberemos de ser coidadosos de non empregar variables globais. Estas xeran conflitos noutras funcións, e procurar o erro as veces resulta tedioso. En autolisp, se non declaramos a función como local, por defecto será global. Para declarar unha variable como local deberemos de facelo nos parámetros da función. Na seguinte función suma, os parámetros n1 e n2 serven para introducir eses datos na función. A variables n3 é local da función suma. Aínda que queiramos ler o seu valor desde outra función, non será posible.

(defun suma (n1 n2 / n3)
(setq n1 (+ n1 1))
(setq n3 (- n1 n2))
(setq n4 (+ n1 n2))
)

Vexamos o seguinte exemplo. Na función suma introducimos dos valores a través das variables n1 e n2. Concretamente á variable n1 asignámoslle o valor de a e a n2 asignámoslle o valor de b (definidas na función principal io), e a función suma sumámoslle unha unidade a n1, é dicir ao valor de a (2) sumámoslle 1 e quedará 3 . A variable n3 é local, fronte a n4 que é global, e polo tanto un punto crítico na programación

(defun suma (n1 n2 / n3)
(setq n1 (+ n1 1))
(setq n3 (- n1 n2))
(setq n4 (+ n1 n2))
)

(defun c:io(/ a b resultado)
(setq n3 nil)
(setq resultado nil)
(setq a 2)
(setq b 3)
(setq resultado (suma a b))
(princ "\n valor de n3:")
(princ n3)
(princ "\n resultado: ")
(princ resultado)
(princ)
)

Na función principal, o primeiro que facemos é resetear os posibles valores de n3 e n4. Asiámoslle valores a a e b. Non hai motivo ningún polo que deixalas como variables globais, polo tanto definímolas como locais na cabeceira da función, colocándooas á dereita da barra inclinada.

Seguidamente chamamdos a función suma (suma a b), e resultado da mesma gardámolo en resultado:

(setq resultado (suma a b))

Pero que valor gardamos?. Noutras linguaxes de programación pódese definir que parámetro queremos que devolva unha función con return n3, por exemplo. En autolisp non dispoñemos de return, e o resultado dunha función será o último setq que teñamos definido na función:

(defun suma (n1 n2 / n3)
(setq n1 (+ n1 1))
(setq n3 (- n1 n2))
(setq n4 (+ n1 n2))
)

Neste exemplo, o resultado da fucnión é n4, pois é o último setq que se definiu na función. Deste xeito o valor de n4 gardarese na variable resultado, que imprimos posteriormente. Se desde a función principal queremos acceder a unha variable definida como local noutra función, neste caso n3, veremos que non poderemos e a súa vez, teremos claro que o valor que colla non nos vai producir interferencias na variable da función principal no caso de que coincida o nome. Vemos aquí a saída do programa:

Comando: IO

 valor de n3:nil
 resultado: 6

No caso de que queiramos imprimir n4 desde a función principal (ou cambiar o seu valor), poderemos facelo, xa que non especificamos que fose unha variable local, e polo tanto é global. Isto, repito é unha fonte de problemas.

(defun c:io(/ a b resultado)
(setq n3 nil)
(setq resultado nil)
(setq a 2)
(setq b 3)
(setq resultado (suma a b))
(princ "\n valor de n3:")
(princ n3)
(princ "\n valor de n4:")
(princ n4)
(princ "\n resultado: ")
(princ resultado)
(princ)
)

Execución da rutina:

Comando: IO

valor de n3:nil
valor de n4:6
resultado: 6

Programar o robot mBot con mBlock e Arduino

O primeiro que debemos de facer é instalar o IDE de Arduino e o IDE de MBlock, no caso de que non o teñamos instalado

1. Arduino

usuario@debian:~$ su root

root@abalar6:/home/usuario# apt install arduino

2. mBlock

No caso de mBlock, instalamos a versión 3, xa que a 5 está en versión Alpha. Descargamos a versión de 32 bits ou de 64 bits, en función da arquitectura do noso sistema operativo. Para coñecer se a arquitectura do noso equipo é de 32 bits ou de 64 bits, podemos seguir o explicado na formación de Linux

Descarga de mBlock 32

Descarga de mBlock 64

Procedín a instalalo en dúas distribucións diferentes: Linux Mint 64 bits e do Debian Jessie (maqueta Abalar). No caso do Linux Mint, quedou perfectamente instalado, co lanzador no menú, dentro do apartado Outros. Polo tanto, no caso de Mint, pasaremos ao punto nº3.

No caso do Debian Jessie, instalouno na carpeta /opt/makeblock. Dentro desta carpeta, crea outra que se chama mBlock e dentro da segunda carpeta entre outros ficheiros hai un executable chamado mblock. Co programa menulibre podemos crear un elemento no menú de programación que chame a /opt/makeblock/mBlock/mblock, para que sexa máis cómoda a súa execución.

Instalamos a aplicación menulibre

Creamos un enlace simbólico a ficheiro e colocarémolo en /usr/bin, de maneira que ao escribir mblock no terminal se abra o software de mBlock

root@debian:/home/usuario# ln -s /opt/makeblock/mBlock/mblock /usr/bin/mblock

root@debian:/home/usuario# apt install menulibre

usuario@debian:~$ menulibre

(a imaxe para a icona collémola de /opt/makeblock/mBlock/resources/web/images/mblock-ide-logo.png)

menulibre

 

3. Librerías de makeBlock para Arduino

Tamén deberemos de instalar as librerías de makeblock para Arduino. Descargámolas do seguinte enderezo:

https://github.com/Makeblock-official/Makeblock-Libraries/archive/master.zip

Descomprimimos o ficheiro master.zip, e copiamos a carpeta makeblock na carpeta na que está instalado o Arduino. Para coñecer esta carpeta, o máis sinxelo de abrir o Synaptic e buscar Arduino

sy_arduino

Cun clic co botón dereito do rato, e elixindo a opción Propiedades, podemos ver la lapela ficheiros a carpeta na que está instalado o Arduino

Ficheiros_instalados

No caso de Debian, o Arduino está instalado en /opt/arduino-1.6.7

Copiamos a carpeta das librerías en /opt/arduino-1.6.7/libraries/

cp -rp /home/usuario/Descargas/Makeblock-Libraries-master/makeblock /opt/arduino-1.6.7/libraries/

4. Enchufamos o robot a un porto usb, e acendémolo.

No mblock á dereita aparece un enlace chamado connect. Se prememos nel e escollemos a opción USB

connect

Debe de aparecer no selector, e seguidamente prememos en connect.

5. Do deseño á compilación e cargado do código  no mbot

Deseñamos o programa en mBlock. Unha vez que o teñamos deseñado, pinchamos en <>code/upload, para ver o código processing. Seguidamente pinchamos en Edit with Arduino IDE

EDIT

Automaticamente ábrese o IDE de Arduino, co código importado de mBlock. No Arduino debemos de elixir a placa Arduino UNO e en porto escollemos a opción USB0. Desde Arduino, tan só debemos de facer un clic en probar e subir.

No caso de que escollamos un programa de exemplo no arduino, debemos de cambiar a chamada á librería #include "MeOrion.h" por a librería #include "MeMcore.h"

mcore

Polo tanto, empregamos a interface de mBlock para deseñar o programa por bloques e o ide de Arduino para subilo ao mbot. Obviamente tamén podemos deseñar o programa directamente no IDE de Arduino en código processing, cando teñamos certa experiencia co deseño de bloques.

PostgreSQL 10 e pgAdmin4 en Debian

postgresql

PostgreSQL

Dirixímonos á páxina de PostgreSQL

https://www.postgresql.org/

No apartado de descargas podemos obter un paquete compilado para varias distribucións: Red Hat, Debian, Ubuntu, etc. Descargamos a versión para Debian:

https://www.postgresql.org/download/linux/debian/

Eleximos a versión. No meu caso Stretch (9.x)

Creamos o fichero: /etc/apt/sources.list.d/pgdg.list

su root

touch /etc/apt/sources.list.d/pgdg.list

Editámolo e engadimos a seguinte liña:

mousepad /etc/apt/sources.list.d/pgdg.list

deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main

Importamos a clave do repositorio:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get update

Procedemos a instalar a versión 10

apt install postgresql-10

Debemos de configurar o contrasinal para o usuario postgres. Para iso abrimos o terminal e escribimos a seguinte instrución:

sudo -u postgres psql postgres

Aparecerá a seguinte liña

postgres=#

Despois da almofadiña, debemos de escribir o seguinte:

postgres-# \password postgres

E poñemos o contrasinal dúas veces

pgAdmin

pgAdmin4

Xa temos o servidor postgresql instalado. Se embargo agora debemos de instalar un cliente para interaccionar co servidor. Un deles é o pgAdmin 4

cd /tmp

git clone https://github.com/edwinspire/pgadmin4-deb-package.git

cd /pgadmin4-deb-package/

Creamos un paquete .deb do pgadmin

fakeroot dpkg -b pgadmin4-2.0/

Instalamos o paquete .deb

dpkg -i pgadmin4-2.0.deb

Teremos que executar a seguinte instrución para rexistarnos (correo e password)

sudo python /usr/local/lib/python2.7/dist-packages/pgadmin4/pgAdmin4.py

Unha vez instalado crease o seguinte servizo: /etc/systemd/system/pgadmin4.service

systemctl enable pgadmin4

systemctl start pgadmin4


Comprobamos que funciona correctamente no navegador:

http://127.0.0.1:5050

Instalar ATOM en Debian Jessie 32 bits

atom

Engadimos as seguintes fontes, desde root (su root)

add-apt-repository ppa:webupd8team/atom

Debemos de modificar o ficheiro webupd8team-atom-jessie.list

cd /etc/apt/sources.list.d

mousepad webupd8team-atom-jessie.list

Aparece a seguinte liña: deb http://ppa.launchpad.net/webupd8team/atom/ubuntu jessie main. Cambiamos jessie por trusty:

deb http://ppa.launchpad.net/webupd8team/atom/ubuntu trusty main

Gardamos e saimos do mousepad. Procedemos a actualizar as fontes:

apt-get update

Instalamos o atom con aptitude, para que arranxe automaticamente as dependencias:

aptitude install atom

Scratch 2.0 en debian jessie

scratch

Para iso o primeiro que debes de facer é desinstalar a versión 1.4, é que a tiveras instalada

su root

apt-get remove scratch

Continuamos agora coa instalación do Scratch 2.0

Creamos as seguintes ligazóns simbólicas

sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0 /usr/lib/

sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0.2.0 /usr/lib/

Descargamos o Adobe Air desde a páxina web: http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRInstaller.bin

Dámoslle permisos de execución desde o terminal

chmod +x AdobeAIRInstaller.bin

E execútalo:

./AdobeAIRInstaller.bin

Seguidamente descargas o paquete de Scratch 2.0 desde o seguinte enderezo: https://scratch.mit.edu/scratchr2/static/sa/Scratch-448.air

E execútalo. E comeza a instalar. No medio do proceso vaiche pedir o contrasinal de root.

Instalar Sublime Text en Debian Jessie

sublime

Agregamos o repositorio con apt-add-repository

sudo add-apt-repository ppa:webupd8team/sublime-text-3

Pero, debemos de saber nos crea en /etc/apt/sources.list.d/webupd8team-sublime-text-3-jessie.list

Procedemos a editalo ficheiro:

nano /etc/apt/sources.list.d/webupd8team-sublime-text-3-jessie.list

Substituímos jessie por trusty, quedando do seguinte xeito:

deb http://ppa.launchpad.net/webupd8team/sublime-text-3/ubuntu trusty main
deb-src http://ppa.launchpad.net/webupd8team/sublime-text-3/ubuntu trusty main

Actualizamos os repositorios e instalamos:

apt-get update

apt-get install sublime-text-installer

Subscribe to Programación