3ENGINE

Programación y otros cachivaches

Archivo

Página 6/104

Tecnologia

Puesta en marcha y configuracion Wifi de Orange PI Zero


Orange PI Zero (OPI) es un mini ordenador de 7 euros que funciona con Android, Ubuntu, Debian. Utiliza el AllWinner H2 SoC y tiene 256MB/512MB DDR3 SDRAM

Puesta en marcha y configuración Wifi de una Orange PI Zero

Paso 1: Instalar SO

1. Descargar de armbian la ultima versión estable del SO para la OPI. Me recomiendan Ubuntu Xenial server legacy kernel como versión solo por linea de comandos o la Ubuntu Xenial desktop legacy kernel si necesitamos desktop.

La OPI Zero no dispone de salida HDMI. Pero dispone de salida de video compuesto. Dos opciones. Puedes adquirir la placa de expansión para la OPI Zero:

expboard

O bien fabricarte uno casero y mediante un adaptador RCA conectar la OPI a un monitor o a una TV:

rca_opi

2. Descargar un instalador para instalar el SO en la tarjeta SD. Yo recomiendo bajarse la versión portable que es standalone y por lo tanto no instala nada en el PC. No preocuparse si Windows no reconoce la tarjeta SD una vez que etcher ha instalado el SO.

etcher

3. Opcional. Si etcher no reconoce la tarjeta micro SD, intenta formatearla a ver si hay suerte. Sigue las instrucciones de como formatear una tarjeta sd (para linux):

  1. Conectar la tarjeta micro SD
  2. Identificar nuestra tarjeta (por ejemplo sdc)
    > lsblk
    ... o bien ...
    > fdisk -l
    
  3. Crear partición (por ejemplo sdc)
    > sudo parted /dev/sdc
    
  4. Introducir contraseña de root
  5. Crear etiqueta
    > mklabel msdos
    
  6. Crear partición única
    > mkpart primary fat32 1MiB 100%
    
  7. Salir
    > quit
    

Paso 2: Configurar WIFI

1. Conectar Orange PI Zero (OPI) al router mediante cable ethernet
2. Enchufar un cargador de smartphone de 5V y 2A (recomendado) al OPI
3. Esperar unos minutos, se tiene que encender una luz verde en la placa y una luz roja debe parpadear
4. Averiguar IP asignada al OPI. Por ejemplo con colasoft MAC scanner o desde la consola mediante un PING a la IP de broadcast (192.168.1.255)
colasoft
5. Conectarse mediante SSH al OPI. Por ejemplo con MobaXterm user: root / password: 1234
Puesta en marcha y configuracion Wifi de Orange PI Zero
6. Nos pide que cambiemos el password del usuario root. Lo hacemos.
7. Ahora nos pide crear un usuario para el trabajo diario. Lo hacemos.
8. Rebotamos y esperamos 1 minuto

> reboot

9. Actualizar el sistema (este paso puede tardar bastante y es opcional)
> sudo apt-get update
> sudo apt-get upgrade

10. Configurar wifi con nmtui
> nmtui

11. En el menu seleccionar “activate a connection”
tui activate connection
12. Elegimos el SSID (el nombre de tu wifi) que nos interese
13. Introducimos la contraseña
14. Editamos la conexión para que la IP asignada al OPI sea siempre fija y así no tener que averiguar la IP asignada cada vez que necesitemos conectarnos por terminal al OPI.
Puesta en marcha y configuracion Wifi de Orange PI Zero
15. Para activar el wifi al arranque, editar el archivo /etc/rc.local y añadir la línea ‘nmtui connect
> nano /etc/rc.local

16. Reiniciar (reboot) y retirar el cable de red. Al volver a encenderse, la OPI debería funcionar por wifi.



Tecnologia

Validar un XML mediante Notepad++


Para validar un XML con el Notepad++ primero necesitamos instalar el plugin «XML Tools». Que se puede instalar desde el plugin manager.

El XML necesita de dos tags para indicar el XSD requerido para la validación.

<?xml version="1.0" encoding="UTF-8" ?>
<mycars xsi:schemaLocation="mycars.xsd" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <car>
    <name>ford</name>
    <color>red</color>
  </car>
  <car>
    <name>seat</name>
    <color>green</color>
  </car>
</mycars>

Una vez abierto el XML podemos validar haciendo click en «plugins->XML Tools->validate now»

Validar un XML mediante Notepad++

Si la validación es exitosa aparecerá un mensaje como este o en su defecto un mensaje con los errores detectados:

Validar un XML mediante Notepad++

Si el validador no encuentra el XSD especificado en xsi:schemaLocation apacerá un mensaje de este estilo:

Validar un XML mediante Notepad++

Si sucede esto o bien corregimos la ruta o bien eliminamos xsi:schemaLocation. Ahora el validador nos preguntará la localización del XSD:

<?xml version="1.0" encoding="UTF-8" ?>
<mycars xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <car>
    <name>ford</name>
    <color>red</color>
  </car>
  <car>
    <name>seat</name>
    <color>green</color>
  </car>
</mycars>

Validar un XML mediante Notepad++




Tecnologia

Acceso a IIS Express desde un equipo remoto


IIS Express es el servidor de desarrollo de ASP.NET que viene incorporado en Visual Studio y que también está disponible de manera gratuita para su descarga.

Esta versión recortada de IIS es perfectamente válida para desarrollos aunque esto no quita que al final para entornos de producción debas hacer el deploy en un IIS real.

Acceso desde un equipo remoto

A veces necesitamos hacer público el acceso al IIS Express para hacer pública nuestra aplicación. Por ejemplo para comprobar que la aplicación funciona en otros navegadores no disponibles en el entorno de producción, para que otras personas del equipo validen los desarrollos o simplemente porque no disponemos de un IIS real, etc..

Pasos

  1. Permitir conexiones de entrada
  2. * En Windows casi todas la conexiones de entrada están bloqueadas. Para comprobar conexiones de entrada permitidas ejecuta:

    > netsh http show urlacl
    

    * Para permitir conexiones ejecuta:

    > netsh http add urlacl url=http://08APC0501:61277/ user=todos
    

    donde url es la IP o nombre de máquina + puerto a publicar y user el nombre de usuario o grupo de usuarios (‘todos’ es ‘everyone’ si el S.O está en inglés)

  3. Añadir un regla al Firewall de Windows
  4. > netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=61277 profile=private remoteip=localsubnet action=allow
    
  5. Modificar applicationhost.config
  6. Es posible que necesites modificar el archivo de configuración de IIS Express.
    Normalmente se encuentra en C:\Users\TuUsuario\Documents\IISExpress\config\applicationhost.config

    <site name="NombreDeTuAplicacion" id="11">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
       <virtualDirectory path="/" physicalPath="C:\Projectes\TuProyecto\NombreProyecto" />
    </application>
    [....]
    <bindings>
    <binding protocol="http" bindingInformation="*:61277:localhost" />
    <binding protocol="http" bindingInformation="*:61277:08APC0501" />
    </bindings>
    </site>
    



Tecnologia

Python y PyQt: cómo implementar un selector de color (PyQt4, PySide6)


A continuación muestro como implementar en Qt y Python un selector de color (color picker) que hereda de un QFrame.

Al hacer clic en el botón izquierdo aparece un cuadro de diálogo estandar (QColorDialog) para seleccionar un color y se actualiza el color del widget al color seleccionado. También incluye la opción de hacer clic en el botón derecho que deja un color por defecto.

cómo implementar un selector de color

Código PyQt4

from PyQt4.QtGui import *
from PyQt4.QtCore import *

class QColorBox(QFrame):

    colorChanged = pyqtSignal()

    def __init__(self, parent=None, defaultColor=Qt.white):
        super(QColorBox,self).__init__(parent)

        self.setStyleSheet("border-color: rgba(0,0,0,0);")
        self.__color = None
        self.__defaultColor = QColor(defaultColor)
        self.setColor(self.__defaultColor)
        self.setFixedHeight(20)
        self.setFrameStyle(1)

    def setColor(self, color):
        if color != self.__color:
            self.__color = QColor(color)
            self.setStyleSheet("background-color: %s;" % self.__color.name())
            self.colorChanged.emit()

    def color(self):
        return self.__color

    def mousePressEvent(self, e):
        if e.buttons() == Qt.LeftButton:
            color = QColorDialog.getColor(self.__color)
            if color.isValid():
                self.setColor(color)
                self.colorChanged.emit()
        elif e.button() == Qt.RightButton:
            self.setColor(self.__defaultColor)

#
# test
#

if __name__ == "__main__":
    app = QApplication([])
    c = QColorBox(defaultColor=Qt.red)
    c.show()
    app.exec_()

Código PySide6

from PySide6.QtCore import Qt, Signal
from PySide6.QtWidgets import QFrame, QColorDialog
from PySide6.QtGui import QColor


class QColorBox(QFrame):
    """
    Custom Qt Widget to show a choosen color.
    Left-clicking the button shows the color-chooser, while
    right-clicking resets the color to default color.
    """

    colorChanged = Signal()

    def __init__(self, parent=None, defaultColor=Qt.GlobalColor.white):
        super(QColorBox, self).__init__(parent)

        self.setStyleSheet("border-color: rgba(0,0,0,0);")
        self._color = None
        self._defaultColor = QColor(defaultColor)
        self.setColor(self._defaultColor)
        self.setFixedHeight(20)
        self.setFrameStyle(1)

    def setColor(self, color):
        if color != self._color:
            self._color = QColor(color)
            self.setStyleSheet("background-color: %s;" % self._color.name())
            self.colorChanged.emit()

    def color(self):
        return self._color

    def mousePressEvent(self, e):
        if e.buttons() == Qt.LeftButton:
            color = QColorDialog.getColor(self._color)
            if color.isValid():
                self.setColor(color)
                self.colorChanged.emit()
        elif e.button() == Qt.RightButton:
            self.setColor(self._defaultColor)

#
# test
#

if __name__ == "__main__":
    from PySide6.QtWidgets import QApplication

    app = QApplication([])
    widget = QColorBox()
    widget.show()
    widget.setColor(Qt.GlobalColor.red)
    app.exec()