Como acceder a un W2000 desde W10 y no morir en el intento


Puede parecer descabellado en los tiempos  que corren que aún quede alguna máquina corriendo con Windows 200, pero  por extraño que puede parecer,  en  efecto para determinados servicios legados es posible que necesitemos conectarnos a esa máquina   mediante alguna utilidad  de escritorio remoto ( por ejemplo   mediante el famoso servicio VNC , o el viejo escritorio remoto  mstsc de Windows ,las cual sonra la manera estándar  de trabajar en ambiente Windows)   quizás para actualizar algún desarrollo de nuevo servicio  .

Bien  , quizás  lo «fácil»   sea  acceder mediante el  VNC , o el  mstsc de Windows dado   que son servicios prácticamente integrados en el so,  pero quizas  en realidad lo complejo se haga cuando la máquina está aislada de internet y tratemos de copiar ficheros desde o hacia  esa máquina  a  una local que ejecute un so actual como puede ser w10 +

Si lo intenta  , lo  primero    ya sabemos deberia ser  comprobar la  conectividad  a  esa máquina desde nuestro w10 ,para lo  cual lo  primero es lanzar el comando Ipconfig en el W2000   para saber la dirección IP del servidor

Como vemos en el ejemplo, puede haber diferentes IP’s asociadas al mismo equipo  , pero al menos la ip  de servicio o producción debería devolvernos el ping desde nuestro equipo a la Ip obtenida con el comando ipconfig

 

Una vez sepamos que hay conectividad tcp/ip desde nuestro w10 al w2000   tendremos que comprobar que tiene los servicios de transferencia de ficheros iniciados

 

Si ambas circunstancias se dan  y no puede copiar ficheros desde el terminal server  o desde una unidad de red , probablemente le falle por diversas causas  que vamos a  ver para intentar dilucidar;  

 

SMB1

Si intenta conectar dispositivos que solo admiten SMBv1 o si estos dispositivos intentan conectarse con usted, es posible que reciba alguno de los siguientes mensajes de error:

No se puede conectar con los recursos compartidos de archivos porque no es seguro. Este recurso compartido requiere el protocolo SMB1 obsoleto, el cual no es seguro y podría exponer su sistema a ataques.
Su sistema requiere SMB2 o superior. Para obtener más información sobre cómo solucionar este problema, visite: https://go.microsoft.com/fwlink/?linkid=852747.

Desde luego este error anterior es el más típico, pero  existen otros errores parecidos  que tiene mucha relación con el error anterior:

  • El nombre de red especificado ya no está disponible.
  • Error no especificado 0x80004005
  • Error de sistema 64
  • El servidor especificado no puede realizar la operación solicitada.
  • Error 58

Precisamente  SMBv1 no está instalado de forma predeterminada en Windows 10 versión 1709 ni en Windows Server versión 1709 y posteriores. Tampoco  en Windows 10 Fall Creators Update y Windows Server versión 1709 (RS3) y posteriores, el protocolo de red Bloque de mensajes del servidor versión 1 (SMBv1) no está instalado de forma predeterminada, poruqe desde 2017, se utiliza SMBv2 y protocolos posteriores. Microsoft desaprobó públicamente el protocolo SMBv1 en 2014.

SMBv1 tiene el siguiente comportamiento en Windows 10 Fall Creators Update y en Windows Server versión 1709 (RS3):

  • SMBv1 ahora tiene subcaracterísticas, tanto para el cliente como para el servidor, que pueden desinstalarse por separado.
  • Windows 10 Enterprise y Windows 10 Education ya no contienen SMBv1 para el cliente o el servidor de forma predeterminada después de una instalación limpia.
  • Windows Server 2016 ya no contiene SMBv1 para el cliente o el servidor de forma predeterminada después de una instalación limpia.
  • Windows 10 Home y Windows 10 Pofessional ya no contienen SMBv1 para el cliente o el servidor de forma predeterminada después de una instalación limpia.
  • Windows 10 Home y Windows 10 Professional ya no contienen SMBv1 para el cliente o el servidor de forma predeterminada después de una instalación limpia. Si SMBv1 para cliente no se utiliza durante 15 días en total (excepto cuando el equipo está apagado), se desinstala automáticamente.
  • Las actualizaciones directas y los pilotos de Insider de Windows 10 Home y Windows 10 Professional no quitan SMBv1 automáticamente desde el inicio. Si SMBv1 para el cliente o el servidor no se utiliza durante un total de 15 días (sin incluir el tiempo durante el que el equipo está apagado), cada uno se desinstala automáticamente. 
  • Las actualizaciones directas y los pilotos de Insider de Windows 10 Enterprise y Windows 10 Education no quitan SMBv1 automáticamente. Un administrador debe decidir desinstalar SMBv1 en estos entornos administrados. En Windows 10 versión 1809 (RS5) y versiones posteriores, un administrador puede activar la eliminación automática de SMBv1 activando la característica «Eliminación automática de SMB 1.0/CIFS».
  • Quitar automáticamente SMBv1 después de 15 días es una operación de un solo uso. Si un administrador reinstala SMBv1, no se harán más intentos para desinstalarlo.
  • Las características de los SMB versión 2.02, 2.1, 3.0, 3.02 y 3.1.1 aún son totalmente compatibles y se incluyen de forma predeterminada como parte de los archivos binarios de SMBv2.
  • Debido a que el servicio Explorador de equipos utiliza SMBv1, el servicio se desinstalará si SMBv1 para el cliente o el servidor también se desinstala. Esto significa que Explorer Network ya no puede mostrar a los equipos con Windows por medio del método de exploración de datagramas NetBIOS heredado.
  • SMBv1 aún puede reinstalarse en todas las ediciones de Windows 10 y Windows Server 2016.

Windows 10 versión 1803 (RS4) Profesional controla SMBv1 de la misma forma que la versión 1703 de Windows 10 (RS2) y Windows 10 versión 1607 (RS1). Este error se corrigió en Windows 10 versión 1809 (RS5). Todavía puede desinstalar SMBv1 manualmente. Sin embargo, Windows no desinstalará automáticamente SMBv1 después de 15 días en los siguientes escenarios:

  • Si realiza una instalación limpia de Windows 10 versión 1803.
  • Si actualiza Windows 10 versión 1607 o Windows 10 versión 1703 a Windows 10 versión 1803 directamente, sin actualizar primero a Windows 10 versión 1709.

 

Volver a activar SMBv1 en Windows 10

Con la nueva versión de Window 10 Fall Creators, microsoft a tomado la decisión de deshabilitar el protocolo SMB versión 1 ,después de todos los problemas sufridos por Wannacry,Petya… que aprovechaban una vulnerabilidad del protocolo.  Si no tenemos más remedio que habilitar SMB v1 en Windows 10  ,tendremos que abrir una consola de powershell como administrador y ejecutamos el  comando de activación de este protocolo, es decir seguiremos los siguientes pasos :

  1. Para activar el Power Shell debemos ejecutarlo como permisos de administrador
  2. Nos debe  salir una ventana de texto con el prompt   con el  PS
  3. Ejecutar la siguiente orden:  Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
  4. Reiniciamos el sistema para aplicar los cambios
  5. En   teoría   ya deberíamos poder  acceder a los recursos compartidos.

Podemos volver a deshabilitar SMB v1 en cualquier momento con : Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol

 

Windows 10 «el servicio de inicio de sesión de la red no se ha iniciado» y error 1068

Si a pesar de haber realizado el paso anterior cuando se intente conectar a una unidad de red aparece el error «el servicio de inicio de sesión de la red no se ha iniciado» lo  primero es averiguar los permisos

Si da igual con que usuario entre y  siempre sale ese error, probaremos   usando el usuario administrador.

)

 

Si entrando con el usuario administrador va buscando el problema, intentando cambiar el nombre del equipo (pero aparece en gris y sale un mensaje de que el servicio de «estación de trabajo no funciona» y no deja cambiar el nombre del equipo, nos deberíamos   ir a ver los servicios para intentar activar el servicio «estación de trabajo«

Si nos aparece  el error 1068  esto  significa «No se puede iniciar el servicio o grupo de dependencia».

El servicio Estación de trabajo tiene dos componentes que dependen de él

  • Los servicios Net Logon
  •  Configuración de Escritorio remoto.

Es posible que el servicio Net Logon tenga algún problema. Accede a la consola de servicios, desde la cuenta administrador y compruebe el servicio

Anuncio publicitario

Comparación de WordAds con otras opciones


Al presentar su propio programa de publicidad, WordAds, Automattic ha intentado probar la monetización de blogs durante los últimos años. La compañía había estado experimentando el programa en sus blogs de WordPress.com desde 2012. En enero de 2017 WordAds  se renombró a Automattic Ads y pasó  a formar parte del complemento Jetpack WordPress. A partir de ese momento, el programa solo estaba disponible para usuarios de Jetpack en el plan Premium ($ 9.00 / mes o $ 99 / año). El programa resultó muy exitoso con los editores de WordPress.com y fue aceptado por los VIP de WordPress sobre todo con el te lanzamiento de WordAds versión 2.0. en noviembre de 2015. WordAds ahora está abierto a todos los blogs de WordPress autohospedados, lo que facilita monetizar el 25% de la web siendo una forma muy interesante de rentabilizar  sus blogs de WordPress .

 

En efecto  generar ingresos extra en un sitio de WordPress es posible  con  unos pocos clics, gracias WordAds: la plataforma líder de optimización de publicidad para sitios de WordPress, donde los principales proveedores de anuncios de Internet pujan entre sí para entregar sus anuncios a su sitio, maximizando sus ingresos para lo cual WordAds añade anuncios a la parte inferior de cada publicación y página en su sitio de WordPress.

De hecho más de 50 anunciantes de Internet, incluidos Google AdSense & Adx, AppNexus, Amazon A9, AOL Marketplace, Yahoo, Criteo y más, pujan por mostrar los anuncios de sus clientes en los spots de WordAds. Con tantos anunciantes que compiten para mostrar sus anuncios en su sitio,los gestores  WordAds intentan asegura que los sitios obtengan anuncios que generen los mayores ingresos haciendo todas las negociaciones, por lo que en teoría   y solo en teoría a los editores  solo les queda  publicar en su sitio para  intentar monetizar su trabajo.

WordAds  de hecho es tan popular que  muestra anuncios en decenas de millones de sitios web WordPress.com, llegando a más de mil millones de personas al mes. De hecho con el historial probado de asociación con sitios web de alta calidad, a los anunciantes les «encanta» competir por nuestros anuncios. Además recientemente han abierto la plataforma WordAds a sitios de WordPress autohospedados a través de Jetpack Ads, disponible como parte del plugin Jetpack, lo que significa millones de oportunidades publicitarias adicionales, lo que hace que la plataforma sea aún más atractiva para los anunciantes y la conducción hasta ofertas  y que esto pueda repercutir los ingresos.

En cuanto a las condiciones para ser elegible para WordAds:

  • El blog debe estar configurado como público
  • Debe tener un dominio personalizado como principal o bien, sea autohospedado y que utilice Jetpack.
  • Debe justificarse un número razonable de visitas diarias
  • Se debe ser el propietario del blog

 

Quizás  una de las mayores ventajas de WordAds es  que  no tiene que entender el código para agregar WordAds  como pasa  con otros sistema para publicar   publicidad en un su sitio, ( normalmente con un pequeño código en javascript),   pues incluso eso se encargan,   por lo que únicamente  hay que rellenar su solicitud. Recientemente  ademas , WordPress.com los usuarios Premium y Business y aquellos con una cuenta Jetpack Premium  aceptan automáticamente su inclusión ( incluso con pocas visitas)

 

Comparación con otros editores

El equipo de WordAds quería entender cómo cada socio publicitario comparó WordAds en términos de monetizar el inventario e impulsar el rendimiento para los editores.

WordAds agrega y evalúa holísticamente la demanda de más de 50 socios programáticos proporcionando servicios completos de monetización de rendimiento y mediación de demanda para ayudar a los editores a extraer el mayor rendimiento para cada impresión. Saben que cada sitio de WordAds tiene disponibles otras opciones ( como su competidor directo Adsense de Google )  y pueden publicar anuncios de otros socios publicitarios, así que ¿cómo se  puede comparar WordAds con sus competidores?

Pues  ellos han configurado una prueba que selecciona aleatoriamente un porcentaje estadísticamente significativo de oportunidades de impresión y se las da exclusivamente a ciertos socios de demanda. Cada vez que un socio no puede llenar la impresión, se contabiliza un anuncio a un ingreso de 0 USD. A continuación, se extrapa los ingresos que cada socio de demanda pudo generar hasta el 100% y se compara los resultados entre todos los socios y WordAds.

En todos los casos, según esta prueba que hizo WordAds , la publicidad con   WordAds generó más ingresos por lo menos un factor de 2:1 que los otros socios de demanda probados, que incluía Oath, AppNexus, Pubmatic, Media.net y Google AdSense.

¿Qué significa esto para los propietarios de sitios que ejecutan WordAds? Pues en teoría  que WordAds está entregando valor mediante la gestión de la subasta de los 50 socios publicitarios

Es cierto que el propietario de un sitio podría intentar replicar el sistema WordAds, pero les costaría mucho crear el sistema de subastas, firmar acuerdos con 50 socios publicitarios y mucho más que el equipo de WordAds hace en segundo plano, así  que no podemos decir que sea una mal sistema.

Respecto   a consejos sobre como aumentar la  rentabilidad  no hay mucho que se pueda hacer sobre la mayor parte de eso pues  el equipo de WordAds  equipo se centra en la visibilidad, los bloqueadores de anuncios, las ubicaciones de anuncios, las relaciones con los compradores, la mejora de la dinámica de pujas en tiempo real, etc  pero las palancas principales las tiene que manejar  el editor

 

Estos son algunos de los consejos que dan para mejorar la rentabilidad de un sitio :

  • Como siempre, para maximizar ganancias se debe centrarse en escribir contenido de alta calidad, publicar regularmente y atraer y cultivar  audiencia.
  • La optimización de motores de búsqueda (SEO) es otra táctica importante para aumentar potencialmente el tráfico a su sitio y mejorar sus ganancias. Si está alojado en WordPress.com es recomendabalerevisar las herramientas SEO, y si es autohospedado y ejecuta Jetpack, puede aprovechar las herramientas de SEO de Jetpack. 
  • En definitiva se debe concentrar  en construir más tráfico orgánico, siendo lo ideal  el tráfico desde América del Norte, donde se pueden encontrar las tasas de publicidad en Internet más altas.
  • El género no tiene un impacto importante en las ganancias, así que se debe concentrar  en cualquier tema que crea que impulsará más visitas.
  • Los anunciantes se centran principalmente en quién es su público, no en lo que están leyendo,así que un sitio de punto puede ganar tanto como un sitio sobre software.
  • No publique contenido que no sea «Family Safe»
  • Además de la publicidad, la herramienta de pagos simples podría valer la pena considerar para su sitio. Simple Payments le permite crear e incrustar botones de pago con tarjeta de crédito y débito en su sitio habilitado para WordPress.com o Jetpack. Si tiene bienes o servicios para vender a su audiencia, puedes agregar fácilmente Pagos Simples siguiendo unas pocas  instrucciones.

Algunas trampas potenciales a evitar:

  • Comprar visitas a su sitio es una mala idea
  • Dañará sus ganancias si paga por tráfico potencialmente fraudulento o si publica contenido o imágenes que no son amigables con la familia.

Por cierto, todos los editores  que esten usando WordAds  deberian saber  que uno de los compradores de anuncios con un mayor peso ( no han difundido cual )  ha pausado recientemente su asociación con WordAds, lo cual  llevará a algunos sitios de WordAds experimenten disminución  de sus ganancias este mes. La plataforma WordAds no depende de un solo comprador, y otros compradores ya han comenzado a tomar su relevo  así que el modelo está funcionando, pero algunos sitios, especialmente los más pequeños, pueden ver ganancias más bajas hasta que el inventario se reequilibre por completo…U(y no sabemos cuanto durara ese periodo de «reajuste»)

Simple cámara de seguridad


En efecto gracias al nivel de integración alcanzado , cada vez hay soluciones más «sencillas» a problemas de computación en tiempo real que tradicionalmente han sido  muy complejos  como por ejemplo puede ser el reconocimiento y detección de imágenes en tiempo real .

Como muestra  de este tipo de soluciones  vamos a ver la placa ESP-EYE , una  pequeña placa de desarrollo del fabricante chino Espressif centrada en el  reconocimiento de imágenes  con  procesamiento de audio en aplicaciones AIoT

Realmente esta solución  se basa en dos componentes claramente  diferenciados:

  • El hardware  :  esta solución es soportable por muy diferentes propuesta  pero el  hw  más sencillo  y del que vamos  a ver en este post   el ESP-EYE , una placa de desarrollo  de  menos de 30€  para el reconocimiento de imágenes y el procesamiento de audio, que se puede utilizar en varias aplicaciones AIoT. Cuenta con un chip ESP32, una cámara de 2 megapíxeles y un micrófono. ESP-EYE ofrece mucho almacenamiento, con una PSRAM de 8 Mbyte y un flash de 4 Mbyte. También es compatible con la transmisión de imágenes a través de Wi-Fi y depuración a través de un puerto Micro-USB. Aunque el ESP-EYE es una opción en kit  muy asequible, el fabricante también ofrece una opción más potente :Esp-Wrover-Kit

 

  • El software :  ESP-WHO, que  es un marco de desarrollo de detección y reconocimiento de rostros diseñado para aplicaciones AIoT. Puede usarse con la placa de desarrollo ESP-EYE, el ESP-WROVER-KIT calificado por Amazon FreeRTOS u otras placas de desarrollo basadas en ESP32. Luego, al agregar solo unos pocos periféricos, como cámaras y pantallas, puede crear fácilmente aplicaciones AIoT completas.  Para ejecutar ESP-WHO, debe tener una placa de desarrollo que integre un módulo ESP32 que tenga suficientes pines GPIO y más de 4 MB de RAM externa SP  como la placa  anteriormente comentada (ESP-EYE ), aunque  no obstante  ESP-WROVER-KIT  también pueden ser otra opción como placa de pruebas.

 

Espressif ESP-EYE

Como hemos comentados hablado  estamos ante una Placa de desarrollo de Espressif para reconocimiento de imágenes y procesamiento de audio en aplicaciones AIoT.

Espressif , el fabricante  ofrece una solución AIoT completa que combina ESP32 con un marco de desarrollo de inteligencia artificial (AI).  Esta solución incluye la placa de desarrollo ESP-EYE, junto con los marcos de desarrollo IoT y AI de Espressif, también conocidos como ESP-IDF y ESP-WHO, respectivamente.

 

 

ESP-EYE es una placa de desarrollo para el reconocimiento de imágenes y el procesamiento de audio, que se puede utilizar en varias aplicaciones AIoT. Cuenta con un chip ESP32, una cámara de 2 megapíxeles y un micrófono, todo ello integrado en una minúscula placa de 8 x4 cm (mas o menos como un pen-drive USB).

ESP-EYE ofrece mucho almacenamiento, con una PSRAM de 8 Mbyte y un flash de 4 Mbyte. También es compatible con la transmisión de imágenes a través de Wi-Fi y depuración a través de un puerto Micro-USB.

 

 

Aunque el sl fabricante ha dejado disponible en Github su sw , también  puede apoyarse en otras soluciones del mismo fabricante como el ESP-WROVER-KIT-VB que f ofrece una solución integrada  AIoT completa que combina un ESP32 con un marco de desarrollo de inteligencia artificial   y además incluye la placa de desarrollo ESP-EYE, junto con los marcos de desarrollo IoT y AI de Espressif, también conocidos como ESP-IDF y ESP-WHO, respectivamente.

 

ESP-WROVER-KIT-VB

Es una placa de desarrollo de ultra bajo consumo altamente integrada que incluye Flash y PSRAM  agregando una interfaz USB, una pantalla LCD de 3.2 «, una interfaz de cámara OV7670 y una ranura para tarjeta micro SD.Alcanza un gran rendimiento con una RAM de 4.5 MB y una CPU de doble núcleo de 240 MHz permitiendo creer cámaras de Internet, pantallas inteligentes o radios de Internet conectando pantallas LCD, micrófonos y códecs ) , todo ello a un precio relativamente competitivo (  unos 62€)

Esta  placa Esp-Wrover-Kit  también del mismo  fabricante   Expressif es otra opción  que puede soportar el software  ESP-WHO , En este caso es una una placa de desarrollo calificada por AWS( Amazon Web Services ) . Además del ESP-IDF SDK de Espressif, puede usar Amazon FreeRTOS en ESP-WROVER-KIT-VB. Amazon FreeRTOS proporciona conectividad lista para usar con AWS IoT, AWS Greengrass y otros servicios de AWS.

Aunque  ESP32 admite la depuración JTAG, este modulo  ESP-WROVER-KIT-VB integra un depurador USB también, lo cual  hace que la depuración y el rastreo de aplicaciones complejas sea muy fácil, sin la necesidad de ningún hardware adicional.

ESP-WROVER-KIT-VB es pues la versión mejorada del ESP-WROVER-KIT ( de hecho cuesta casi el doble que la  version anterior) . Su PSRAM  en l aversion 2 aumenta a 8 MBytes, mientras que esta placa de desarrollo también cuenta con una interfaz de tarjeta Micro-SD de alta velocidad, una interfaz de cámara VGA, un panel LCD SPI de 3.2 ”y capacidades de expansión de E / S. Asimismo cuenta con  un procesador de doble núcleo, radios Bluetooth y WiFi, y 520 KB de SRAM.

Ultimamente estan distribuyendo la versión 3 que contiene 32 Mbit adicionales de PSRAM  siendo  el ESP32 s compatible con SPI, I2C, serie, etc.

Espressif admite dos cadenas de herramientas:

  • El entorno de lenguaje C nativo que se ejecuta bajo el sistema operativo en tiempo real FreeRTOS
  • El entorno Arduino C / C ++. Los programas desarrollados usando el entorno Arduino en realidad se ejecutan como una tarea en FreeRTOS y pueden usar las bibliotecas FreeRTOS.

Puede ser  preocupante el soporte para el controlador LCD  ya  que las versiones 2 y 3 de la placa utilizan un controlador ST7789V pero la placa de la versión 1 utiliza un controlador ILI9341.  La última versión de la demostración TFT simple en ESP32 SDK llamada spi_master se puede configurar para ejecutarse en cualquiera de los ESP32-WROVER-KIT. No obstante «Loboris» en github tiene una biblioteca TFT  con todas las funciones con opción de configuración para construir la biblioteca y el programa de demostración para la versión 3 WROVER-KIT. Incluso con SPI, la actualización de la pantalla es muy rápida.

No se incluye documentación con la placa, pero hay mucha documentación en la web, y el SDK nativo viene con una serie de ejemplos útiles. La desventaja es que el ESP32 es relativamente nuevo, parte del software está cambiando y faltan algunas bibliotecas de Arduino.

Sin dua el ESP32-WROVER-KIT es una gran pieza de hardware, aunque su uso requiere cierta experiencia con microcontroladores y cierta tenacidad para examinar la documentación en línea y el código de ejemplo , pero quizás valga la pena el esfuerzo por toda la potencia que le brinda esta placa.

EL software

El sw   necesario se  compone del  marco de desarrollo IoT  ( también llamado ESP-IDF  ) y la AI de Espressif ( también conocidos como ESP-WHO ).

Para ejecutar ESP-WHO, debe tener una placa de desarrollo que integre un módulo ESP32 generico que tenga suficientes pines GPIO y más de 4 MB de RAM externa SPI  y una cámara CCD . Lo mas sencillo es usar el  ESP-WROVER-KIT o el recomndado  por el fabricante:  el   ESP-EYE que hemos visto integra el ESP32 y la cámara integrado en una solución de bajo coste

 

 

ESP-WHO es pues  la utilidad de detección, reconocimiento e imagen son el núcleo de la plataforma   constando en realidad de los siguientes módulos:

  • Image Utility ofrece API de procesamiento de imágenes fundamentales.
  • La detección toma imágenes como entrada y proporciona la posición de la cara si hay una cara. Se implementa con el modelo MTMN, que se refiere a MTCNN y MobileNets .
  • El reconocimiento es identificar a la persona en particular y necesita los resultados de la detección. Se implementa con el modelo MobileFace.
  • La optimización consiste principalmente en aumentar la precisión de la inferencia y acelerar todo el proceso. Pero también podría cambiar la estructura de la red, actualizar los coeficientes, refactorizar el código, etc.

Tanto la entrada como la salida son flexibles porque las fuentes de imagen pueden ingresarse a través de la cámara ( aunque sin embargo, no proporcionan  muchos controladores en este momento, ya que los de otros módulos de cámara se lanzarán en el futuro)  y porque los resultados se pueden mostrar  a través de la línea de comando, un LCD o incluso el sitio web a través del servicio de Wi-Fi http.

 

Para saber cómo configurar el módulo ESP32 para sus aplicaciones, puede consultar el archivo README.md de cada ejemplo del respositorio de github ( https://github.com/espressif/esp-who )

Preparación de software

La resolución recomendada de la imagen de entrada es QVGA (320×240) . En cuanto a elegir la cámara si no usa el citado modulo recomendado  ESP-EYE      el módulo ESP32 usado   deberá tener libre los  pines específicos según la  cámara que use Por ahora el  sw  proporcionado soporta el controlador de OV2640 y OV3660 , que son muy recomendables para comenzar.

Veamos como instalar los dos módulos sw necesarios:

 ESP-WHO

Asegúrese de clonar el proyecto de forma recursiva usando el siguiente comando:

git clone --recursive https://github.com/espressif/esp-who.git

Si clona un proyecto sin --recursive ( es decir usando el indicador --recursive), vaya al directorio esp-who y ejecute el comando git submodule update --init antes de hacer nada.

 ESP-IDF

Consulte las guías de configuración para obtener instrucciones detalladas para configurar el ESP-IDF:Guía de inicio para la versión estable de ESP-IDF

En este caso, tomamos ESP-IDF v3.2 como la versión de prueba.Si ya ha configurado ESP-IDF antes y no desea cambiar el existente, puede señalar IDF_PATH al ESP-IDF que se encuentra en ESP-WHO.

 Otros componentes sw

Otros componentes  sw necesarios lo constituye  el marco principal del SDK, con algunos controladores y algunos  algoritmos dentro.

  • Cámara :  El componente de cámara contiene controladores para dispositivos de cámara de ESP32.
  • Face de esp: El componente esp-face contiene las API de las redes neuronales ESP-WHO, incluido el marco de detección y reconocimiento de rostros.

Ejemplos

La carpeta de /examples/  del respositorio de github ( https://github.com/espressif/esp-who )   contiene ejemplos de aplicaciones que demuestran las características API de ESP-WHO.

Una buena muestra es la  detección de rostros , para lo cual habría que seguir los siguientes pasos:

  1. esp-who/examples/single_chip/detection_with_command_line a una carpeta de ejemplo esp-who/examples/single_chip/detection_with_command_line .
  2.  cd esp-who/examples/single_chip/detection_with_command_line
  1. Compila y actualiza el proyecto.   idf.py build idf.py flash -p [PORT]
  1. Los usuarios avanzados pueden modificar algunas opciones mediante el comando idf.py menuconfig .

Verifique README.md de cada ejemplo  del respositorio de github ( https://github.com/espressif/esp-who )      para más detalles.

Demo

En el siguiente , podemos ver  cómo hacer su propio proyecto de seguridad para el hogar en solo 5 minutos utilizando la placa   ESP-EYE y una Raspberry Pi para visualizar el resultado aunque   puede usarse un pc portatil ,tableta , etc en su lugar  . Este proyecto  además es  plug and play pues  apenas  requiere ningún conocimiento de codificación o hardware.
Para  hacer su propio  dispositivo de transmisión inalámbrica por tanto sólo usaremos  una a pantalla LCD táctil conectada a la Raspberry pi . Como normalmente el fabricante del LCD suele incluir las instrucciones necesarias para  conectar esta a la Raspberry Pi y que sea funcional en la demo  no se requiere ninguna codificación y tampoco  ningún circuito   ya que nos bastará  conectar estos dispositivos y empezar a transmitir
En realidad  no es dificil  conectar un apantalla tactil a una raspberry pi   , pues de  hecho en este  blog vimos en este post https://soloelectronicos.com/2018/12/02/como-instalar-una-pantalla-tactil-de-5-en-una-raspberry-pi-3/  como hacerlo con un simple escudo   de kuman  y  cargando en nuestra Raspberry Pi la imagen de Raspbian con los drivers ya instalados

En primer lugar necesitaremos encender este ESP  alimentando con 5v DC por medio del puerto microUSB . En el inicio del LED rojo se enciende  en el ESP ,pero   el LED rojo comenzará a parpadear que revela que este dispositivo  se despierta  y ha creado  su punto de acceso propio al  que se  puede  conectar todos los dispositivos .

En este ejemplo  como se usa  Raspberry Pi para ver  los datos  que vienen del CSPI ,encenderemos la placa Raspberry Pi . Para la primera vez que se conecte es recomendable  tener teclado y ratón conectados a la Raspberry Pi , pero esto  sólo será para  la primera vez  pues después  el ajuste se guardará en esta Raspberry Pi y no necesitará  teclado y ratón ,ya que se puede utilizar  la pantalla táctil

Cómo  está abierto  el punto de acceso ,sólo necesitamos para conectar a través de este punto ,  abrir el navegador web y conectarnos a esta dirección IP( doble barra oblicua ,dos puntos y la ip del módulo y   podremos ver  la imagen que esta transmitiendo la cámara .

Para la  segunda vez no hay necesidad de utilizar este tipo de teclado porque una Raspberry Pi automáticamente se conectara con este punto de acceso particular y en el navegador puede usar esta dirección IP ,la cual  se guardará en el historial para que pueda tocar    la  dirección IP en el historial  y acceder directamente

 

 

En este video, pues  hemos visto cómo hacer su propio proyecto de seguridad para el hogar en solo 5 minutos utilizando el tablero ESP-EYE y Raspberry Pi, proyecto por cierto que como hemos visto es plug and play , y no requiere ningún conocimiento de codificación o hardware.

!Este módulo sin duda es una versátil aliado para múltiples retos  que se nos presente!

 

Comandos de voz de Movistar Home


El  asistente  de  Movistar Home (MH)  que integra Aura (la inteligencia artificial de Telefónica) ,tras muchas mejoras continuas  empieza a ser un elemento muy interesante en una vivienda   orientado  quizás en un futuro para reemplazar el teléfono convencional ya que a diferencia de otros asistentes ademas de controlar la TV  es también  un teléfono fijo  y se pueden hacer videollamadas gracias a la cámara incorporada.

El dispositivo en sí es de tecnología de Intel  gracias a su procesador Atom permitiendo interacción natural por voz como la mayoría de los asistentes , pero además integra una pantalla de 8″ . Asimismo integra una a cámara  de alta sensibilidad  ideal para escasas condiciones de luz  , la cual por cierto se puede desconectar  físicamente al igual que el  micrófono  con un deslizador mecánico  para  garantizar la privacidad de sus usuarios.

Otro aspecto interesante de MH es que puede ordenar que se proyecten los contenidos para que se vean por cualquier TV  conectado  a Movistar+, es decir podemos cambiar desde este todo lo que se este visualizando no solo en desco del tv principal sino en el resto descodificadores que haya conectados en el hogar  .

Además  desde MH   también ya es posible controlar desde el  propio dispositivo las luces basadas en el sistema de Philips Hue  no solo  selectivamente  sino en intensidad o en nivel cromática  según las bombillas que tengamos conectadas al puente Hue,

Estas son las características técnicas de MH:

  •  Medidas (alto x ancho x fondo): 21,2 x 23,5 x 12,2 cm
  •  Peso:1,100 g
  •  Cámara para ver en condiciones de baja luminosidad
  •  2GB de RAM y 16 de Flash
  •  Altavoces 2x 5M. Sensibilidad: hasta 87dB (SPL)
  •  Procesador Intel Cherry Trail T3 (X5-Z8350)

Como hay ciertas dudas de los comandos de  voz  soportados  desde este humilde blog vamos a intentar resumir los  principales comandos disponibles:

Control de las luces ( si se tiene conectado el puente Philips Hue)
Encender las luces «OK Aura,enciende las luces»
Apagar las luces «OK Aura, apaga las luces»

Observe por cierto que se le habla en plural porque se supone que tiene conectadas mas de una bombilla  al sistema Philps Hue

Llamadas
LLamar a un contacto «OK Aura, llama a mama“
LLamar a un contacto almacenado en la agenda «OK Aura, llama a Pepe“
No molestar, que silencia el volumen de las llamadas entrantes y del inalámbrico «OK Aura, pon el modo no molestar“
LLamar  a emergencias «OK Aura, llama a emergencias»
Ver histórico de llamadas  «OK Aura, quiero ver las últimas llamadas»
Hacer videollamadas a otras personas que tengan Movistar Home en casa OK Aura, quiero hacer una llamada a…
Control del directo
Encender Movistar+ «OK Aura, enciende la tele»
Apaga Movistar+ «OK Aura, apaga la tele»
Subir el volumen de Movistar+ «OK Aura, sube el volumen”
Bajar el volumen de Movistar+ «OK Aura, baja el volumen”
Poner o quitar el mute «OK Aura, pon el mute»
Cambiar de canal por nombre «OK Aura, pon Canal Cocina»
Cambiar de canal por dial «OK Aura, pon el canal 23»
Poner un contenido por nombre «OK Aura, pon Cincuenta Sombras Liberadas»
Subir de canal «OK Aura, siguiente canal»
Bajar de canal «OK Aura, canal anterior «
Poner o quitar los subtítulos «OK Aura, pon los subtítulos»
Ponerlo en versión original «OK Aura, ponlo en versión original»
Qué estoy viendo «OK Aura, ¿qué estoy viendo?»
Control del directo
Poner o quitar pausa «OK Aura, poner pausa»
Ponerlo desde el principio «OK Aura, ponlo desde el principio»
Encontrar contenido relevante
Buscar por tipo de contenido y actor «OK Aura, quiero ver películas de Alfredo Landa»
Buscar por tipo de contenido y director «OK Aura, busca películas de Woody Allen»
Buscar por tipo de contenido y género «OK Aura, quiero ver películas de acción»
Buscar contenidos más vistos «OK Aura, busca las series más vistas»
Buscar contenidos más valorados «OK Aura, búscame las películas mejor valoradas»
Buscar contenidos de estreno «OK Aura, búscame los últimos estrenos»
Buscar deportes «OK Aura, quiero ver un partido de fútbol»
Recomendar contenido «OK Aura, recomiéndame algo»
Recomendar contenido similar a… «OK Aura, recomiéndame algo parecido a Star Wars»
Buscar la programación por tiempo «OK Aura, ¿qué echan esta noche en la tele?»
Buscar la programación por tipo de contenido y tiempo «OK Aura, ¿qué películas están echando?»
Buscar la programación por canal y tiempo «OK Aura, ¿qué echan esta noche en Antena 3?»
Buscar la programación por deporte «OK Aura, ¿qué partidos de fútbol están echando?»
Navegación por resultados de búsqueda «OK Aura, siguiente» o  «OK Aura, anterior»
Buscar algo en concreto
Buscar cuándo echan un contenido concreto «OK Aura, ¿cuándo es Tu Cara Me Suena?»
Buscar cuándo echan un partido concreto «OK Aura, ¿cuándo es el próximo partido del Real Madrid?»
Buscar por temporada/Episodio «OK Aura, quiero ver el primer episodio de El Embarcadero»

 

Control del router HGU

 

Visualizar la clave de la red WIFI «OK Aura, ¿cuál es la clave del Wi-Fi??»
Reiniciar  el router HGU «OK Aura, reinicia el router»
Varios 

Socorro mi impresora 3d no imprime


Su impresora 3D debe fundir y extruir muchos kilogramos de plástico durante su vida útil  lo cual  es muchísimo trabajo para una máquina que se mueve en los tres ejes con una  «pesada» carga ( la cabeza de extrusora ) pues para hacer las cosas más complicadas, todo este plástico debe salir de la extrusora a través de un pequeño agujero que es tan grande ( o tan pequeño más bien )  como un  grano de arena.

Inevitablemente, puede llegar un momento en que algo vaya mal con este complejo proceso hasta que finalmente  el extrusor ya no sea  capaz de empujar el plástico a través de la boquilla. Estos atascos suelen ser debidos a que algo dentro de la boquilla está bloqueando el plástico para su libre extrusión. Si bien esto puede ser desalentador la primera vez que sucede, vamos a analizar varios pasos de fácil solución para liberar una boquilla atascada pues tarde o temprano nuestra querida impresora 3D dejará de extruir filamento por la boquilla por los nos resultara una misión casi imposible imprimir una pieza en 3D  por insignificante y pequeña que sea

 

 

En este problema es muy común, y el más grave  en que nos enfrentamos  con impresoras 3D, pero afortunadamente, también es relativamente sencillo de resolver. Hay varias causas posibles para  que el extrusor de  una impresora no extruye el plástico  ,   pero lo importante es solucionarlo cuanto antes  metodos  para resolver el problema:

Volver a cargar  filamento nuevo 

Es  lo más obvio ¿verdad ?.  Si el filamento  no se mueve, lo siguiente que se  debería  hacer es descargar el filamento,verificando que el extrusor se calienta a la temperatura apropiada para  luego empujar el filamento hacia el extrusor hacia afuera  haciendo uso de la  palanca y extraerlo rápidamente (es posible que necesite aplicar alguna fuerza adicional si el filamento no se mueve). Una vez que el filamento se elimine, utilice un par de tijeras para cortar la parte fundida o dañada del filamento.  A continuación, vuelva a cargar el filamento (  recuerde cortar en inglete a 45º  para que entre más  fácil )  y vea si es capaz de extruir con la nueva sección de filamento sin daños.

Si no consigue resolver el problema no  se preocupe  todavía  puede solucionarlo  así que no pierda la esperanza  y por favor siga leyendo.

Empujar manualmente el filamento a la extrusora

Una de las primeras cosas que usted puede intentar cuando no extruye material , es empujar  el filamento para  que entre  en la extrusor. Hay dos métodos;

  • Manualmente empujando el filamento en la parte superior  y haciendo uso de la  palanca 
  • También se puede hacer abriendo el Panel de Control de su impresora  y calentando su extrusora a la temperatura adecuada para su plástico y a continuación, intente extruir  una pequeña cantidad de plástico: a medida que el motor del extrusor está girando, utilice ligeramente las manos para ayudar a empujar el filamento en el inicio del cabezal de  la extrusora

Tanto de  forma manual como por software ,en muchos casos, esta fuerza adicional será suficiente para hacer avanzar el filamento más allá del área problemática.

 

 

Observe que muchas impresoras  justo en la cabeza del extrusor tienen una pestaña  con un gran muelle : ese es precisamente el  que debemos  pulsar  para  intentar meter manualmente el filamento en la cabeza del extrusor

 

Cebado de la boquilla

La mayoría de las extrusoras tienen  problemas de fugas de plástico cuando se mantienen a una alta temperatura  debido a que el plástico caliente que  queda dentro de los conductos de la  boquilla tiende a exudarse fuera de la punta, lo que crea un vacío dentro de la boquilla donde el plástico se ha drenado lo que a la larga  con el paso del tiempo tenderá a quedar bloqueado  y no salir 

Para solucionar este problema, deberíamos  asegurarnos de cebar su extrusor justo antes de comenzar una impresión de modo que la boquilla esté llena de plástico y lista para extrudir. Una forma común de hacer esto en el programa  Cura es mediante la inclusión de una  falda o soporte ( círculo alrededor de su pieza)  lo que  no solo servirá para mejorar la adherencia de la pieza, sino   que en el proceso, cesará el extrusor con plástico.

Si necesita cebado extra, puede aumentar el número de contornos de falda en la pestaña Experto de Cura o también en caso de  usar  el  programa Easyprint de Geetech, cuando una vez se esté conectado  a la impresora,    usar la orden  de calentar la boquilla  para derretir el plástico manualmente   y así intentar expulsar el plástico empujando manualmente si es necesario con el filamento .

 

 

Limpieza de la boquilla

Si su impresora extruía correctamente al principio de su impresión, pero de repente dejó de extruir, por lo general sólo hay algunas cosas que podrían haber causado este problema  pero básicamente si ha seguido los pasos anteriores , es un claro indicio de que  el extrusor esta obstruido, por lo que deberemos proceder a su limpieza  para liberar el canal de extrusión

En primer lugar quitaremos el filamento ( si es necesario cortándolo )

,

Acto seguido procederemos a desmontar el motor del ventilador de la extrusora  , el cual suele ir acompañado de un pequeño radiador de aluminio  unido solidario a este

Ya podemos quitar el motor del extrusor   y nos quedar la base donde apoya el motor del extrusor , el radiador , el inyector  y el ventilador. En el caso de la Prusa de geetech esta pieza  va sujeta por abajo con dos tornillos ayen

Una  buena forma  de intentar liberar el exceso de mataerial es  calentar el extrusor manualmente  y después intentar limpiar la entrada de este por ejemplo con una llave allen introduciendo esta s por la abertura donde va el filamento

 

 

 

Si no se desatora podemos  desmontarla al completo  y meter una llave más fina a lo largo del tornillo de la boquilla

 

 

Si no conseguimos liberar  filamento por la cabeza todavía podemos quitar la boquilla e intentar limpiar por ese lado con una llave allen ese otro lado

Si   a pesar de todo  sigue sin extruir el filamento , es señal que la boquilla ha terminado su vida útil  por lo que o bien la limpiamos con herramienta    o bien  podemos  reemplazar esta por una nueva del mismo diámetro de abertura  que suele  rondar los 0.3mm

No es un pecio excesivo lo  que sopone una boquilla nueva , asi que sil legado a este punto se calienta el filamento , esta libre el canal   pero no sale por la punta , lo ideal es cambiar esta 

   

Una vez colocada   la nueva punta , procederemos a seguir el paso descrito pero en orden inverso:   colocaremos el soporte , colocaremos el motor con el extrusor , el radiador   y el  ventilador 

Obviamente volveremos a introducir el filamento,  en la apertura superior y forzaremos el calentamiento de la boquilla. Pasado unos minutos   iremos empujando el filamento hacia abajo hasta que poco a poco  vaya saliendo material por la boquilla, lo cual es señal de que se ha liberado la obstrucción

 

 

Una vez  hayamos cambiado la boquilla , si es diferente fabricante , deberemos reajustar la altura de la cama  para que vuelva a funcionar por completo( normalmente esto se ajusta variando el ajuste del fin de carrera del eje z)

 

Hay  otros errores que pueden ocurrir menos «graves» pero  que pueden ocurrir generando un mala  o nula impresión; 

  • La distancia entre la boquilla y la cama es demasiado estrecha.Si la boquilla está demasiado cerca de la cama, no habrá suficiente espacio para que el plástico salga de la extrusora. El agujero en la parte superior de la boquilla está esencialmente bloqueado para que no pueda salir plástico. Una manera fácil de reconocer este problema es si la impresión no extruye el plástico para la primera capa o dos, pero comienza a extruir normalmente alrededor de la 3ª o 4ª capas.La resolución de este problema pasa por el  ajuste  por excelencia de   casi todas las impresora:  el de la cama caliente ,  donde deberemos ajustar los cuatro tornillos en las 4 esquinas de la cama caliente   girando los tornillos para que quepa aproximadamente el grosor de un pedazo de papel A4 de tal manera que roce un poco pero que no se rompa o pase con facilidad  .
  • La boquilla se encuentra muy lejos de la cama , es el mismo problema anterior pero a la inversa , lo cual impedirá una impresión deficiente  porque literalmente se imprime sobre el «aire» sin soporte en determinadas zonas , lo cual solo puede generar problemas  normalmente desembocando en el temido estropajo cuando se deja desatendido el proceso y al no adherirse a la cama el filamento  , termina generando un revoltijo de plástico inútil
  • El filamento es mordido por el engranaje de accionamiento;Las impresoras de bajo coste domésticas utilizan un pequeño engranaje para empujar el filamento hacia adelante y hacia atrás. Los dientes de este engranaje muerden en el filamento y le permiten controlar con precisión la posición del filamento.Sin embargo si nota un montón de virutas de plástico o parece que haya alguna sección que falte parte, entonces es posible que el engranaje del extrusor esta quitando demasiado plastico. Ademas una vez que sucede esto el engranaje no tendrá nada que agarrar cuando trate de insertar el filamento en la boquilla  lo cual hará muy dificil la impresion
  • La impresora no se pega a la cama;Es muy importante que la primera capa de la impresión esté fuertemente conectada a la plataforma de construcción de la impresora para que el resto se pueda construir sobre esta base. Si la primera capa no se pega a la plataforma de construcción, creará problemas más adelante. Hay muchas formas diferentes de hacer frente a estos problemas de adhesión de la primera capa, por lo que examinaremos varias causas típicas a continuación y explicaremos cómo abordar cada una de ellas.
  • La plataforma no esta nivelada: normalmente todas la  impresoras utilizan 4 tornillos para regular la posición de la cama. Si tiene problemas para que su primera capa se pegue a la cama, lo primero que debe verificar es que la cama de su impresora es plana y nivelada. Si la cama no está nivelada, un lado de su cama puede estar demasiado cerca de la boquilla, mientras que el otro lado está demasiado lejos. Conseguir una primera capa perfecta requiere una cama de impresión de nivel.
  • El filamento ha desmontado el engranaje de accionamiento ; Durante una impresión, el motor del extrusor está constantemente girando tratando de empujar el filamento en la boquilla para que su impresora pueda mantener la extrusión de plástico. Si intenta imprimir demasiado rápido o intenta extruir demasiado plástico, este motor puede acabar mordiendo y afilando el filamento hasta que no queda nada para que el engranaje impulsor se agarre. Si su motor de extrusión está girando, pero el filamento no se mueve, entonces esta es la causa más probable. 
  • Motor del extrusor sobrecalentados:el motor del extrusor tiene que trabajar increíblemente duro durante su impresión. Se encuentra girando constantemente hacia adelante y hacia atrás, empujando y tirando de plástico hacia adelante y hacia atrás. Este movimiento rápido requiere un poco de corriente, y si la electrónica de la impresora no tiene enfriamiento suficiente, puede causar que la electrónica del controlador del motor se sobrecaliente. Estos conductores de motor suelen tener un corte térmico que hará que el conductor deje de funcionar si la temperatura es demasiado alta. Si esto sucede, los motores del eje X e Y girarán y moverán la boquilla del extrusor, pero el motor del extrusor no se moverá en absoluto. Muchas impresora incluye un ventilador de refrigeración para enfriar la temperatura del motor del extrusor. También puede apagar la impresora y dejar que la electrónica se enfríe.

Extracion de documentos en Oracle text


Oracle incorpora un tipo de datos llamado BLOB que permite almacenar documentos de cualquier tipo (imágenes, excel, word, access, comprimidos, vídeos, música, etc). En principio admite cualquier tipo de documento y de cualquier tamaño aunque aún sigue manteniendo el tipo de datos LONG RAW que está obsoleto, sustituido por BLOB. Las instrucciones que os mostramos a continuación admiten ambos tipos de datos: BLOB y LOB RAW.

 

Insertar o extraer documentos  desde Visual Basic

Para poder insertar documentos en un campo BLOB de Oracle con Visual Basic necesitaremos una librería (dll) llamada SAFileMgr Module (SAFileMgr.dll), esta librería está disponible de forma gratuita en la web http://www.softartisans.com. Tras descargar este fichero, deberemos copiarlo a la carpeta del sistema (normalmente C:/Windows/System32) y registrarlo con el comando:  regsvr32 C:/Windows/System32/SAFileMgr.dll .  Tras copiar y registrar el fichero SAFileMgr.dll, también necesitaremos disponer de una base de datos Oracle activa

Tras tener la tabla creada con el campo BLOB, procederemos a abrir Visual Basic y a crear un nuevo proyecto para insertar y extraer documentos en Oracle. En la ventana de «Nuevo proyecto» seleccionaremos «EXE estándar» y pulsaremos «Abrir»:Para que la aplicación funcione correctamente deberemos agregar las referencias necesarias. Para ello pulsaremos en el menú «Proyecto » – «Referencias» de Visual Basic:Seleccionaremos la referencia FileMgr 1.1:Si no aparece en la lista, pulsaremos en Examinar y seleccionaremos el fichero .dll copiado y registrado anteriormente:C:/Windows/System32/SAFileMgr.dll y seleccionaremos también Microsoft ActiveX Data Objects 2.6 Library: Si no aparece en la lista, pulsaremos en Examinar y seleccionaremos el fichero ubicado en: C:/Archivos de programa/Archivos comunes/system/ado/msado26.tlb

 

Ahora veamos el código de cada uno de los tres  botones de un  formulario tipo para lanzar una consulta de inserción o extracción de un documento :

  • Para el botón «Insertar documento«:

Private Sub btInsertarDocumento_Click()

Dim Conn As New ADODB.Connection

Dim Rs As New ADODB.Recordset

Dim FileMgr As New FileManager

Dim SQL As String

On Error GoTo cError

‘ Conexión mediante OLEDB

Conn.Provider = «OraOLEDB.Oracle»

Conn.Open txtServicio.Text, _

txtUsuario.Text, txtContrasena.Text

‘ Ejecutamos una consulta SQL sobre la tabla  para activar el recordset

SQL = «Select * from » + txtTabla.Text + » where 1=2″

Rs.Open SQL, Conn, 2, 3

‘ Añadimos un nuevo registro con los datos indicados

Rs.AddNew

Rs(txtCampoTitulo.Text).Value = txtDocumentoTitulo.Text

Rs(txtCampoRutaDocumento.Text).Value = txtDocumento.Text

‘ Insertamos el documento en el campo BLOB/RAW

FileMgr.ExportToBlob txtDocumento.Text, Rs(txtCampoBLOB.Text)

Rs.Update

Rs.Close

Conn.Close

Set Conn = Nothing

MsgBox «Documento insertado correctamente en » + «la base de datos: » + vbCrLf + vbCrLf + txtDocumento.Text, vbOKOnly + vbInformation

cSalir:

Exit Sub

cError:

MsgBox Err.Description

GoTo cSalir

End Sub

  • Para el botón «Ejecutar«:

Private Sub btEjecutar_Click()

Dim Conn As New ADODB.Connection

Dim Rs As New ADODB.Recordset

On Error GoTo cError

‘ Conexión a Oracle mediante OLEDB

Conn.Provider = «OraOLEDB.Oracle»

Conn.Open txtServicio.Text,  txtUsuario.Text, txtContrasena.Text

‘ Ejecutamos consulta SQL introducida por el usuario

Rs.Open txtSQL.Text, Conn, 0, 1

txtExtraerTitulo.Text = Rs(txtCampoTitulo.Text)

txtDestino.Text = Rs(txtCampoRutaDocumento.Text)

Rs.Close

Conn.Close

Set Conn = Nothing

MsgBox «Consulta SQL ejecutada correctamente.»,  vbOKOnly + vbInformation

cSalir:

Exit Sub

cError:

MsgBox Err.Description

GoTo cSalir

End Sub

  • Para el botón «Ejecutar«:

Private Sub btExtraer_Click()

Dim Conn As New ADODB.Connection

Dim Rs As New ADODB.Recordset

Dim FileMgr As New FileManager

Dim continuar As Boolean

On Error GoTo cError

‘ Conexión a Oracle mediante OLEDB

Conn.Provider = «OraOLEDB.Oracle»

Conn.Open txtServicio.Text, _

txtUsuario.Text, txtContrasena.Text

‘ Ejecutamos consulta SQL introducida por el usuario 

Rs.Open txtSQL.Text, Conn, 0, 1

‘ Comprobamos si existe ya un fichero destino

‘ con el mismo nombre

continuar = False

If Dir(txtDestino.Text) <> «» Then

continuar = MsgBox(«Ya existe un documento » + «con este nombre ¿desea reemplazarlo?», vbYesNo + vbQuestion) = vbYes

Else

continuar = True

End If

‘ Extraemos el documento del primer   registro de la consulta SQL  en el destino especificado por el usuario

If continuar Then

FileMgr.ImportFromBlob Rs(txtCampoBLOB.Text), txtDestino.Text

MsgBox «Fichero extraído correctamente en: » + vbCrLf + vbCrLf +  txtDestino.Text, vbOKOnly + vbInformation

End If

Rs.Close

Conn.Close

Set Conn = Nothing

cSalir:

Exit Sub

cError:

MsgBox Err.Description

GoTo cSalir

End Sub

 

Extracción desde java

 

Ahora  veamos  usando el lenguaje   Java un ejemplo de como podemos extraer  documentos almacenados en  CLOB’s   en una base de Datos Oracle Text 9 en Java

Necesitaremos tener instalado el cliente Oracle instalado en la maquina, las credenciales de acceso  ,    asi como referenciar en el proyecto desde el Eclipse las siguientes librerías

 

 

 

Y ahora veamos  un ejemplo de una clase de extracción de campos clob’s

La clase principal es Main , la cual debería seleccionarse al exportar el proyecto desde Eclipse

Se puede ejecutar en local  o crear un pequeño script para invocar el java

En este ejemplo es  obligatorio usar tres argumentos y en este orden  para llamar al programa:

  • nodo= número del nodo a exportar
  • tope = numero de orden donde se quedo la última exportación empezando por cero
  • topefinal= umbral donde termina

 

En el proyecto se han referenciado dos versiones de la MV Java porque puede ocurrir que la MV usada en local ( 1.6 ) sea diferente a la del host  donde se ejecute ( por ejemplo  la 1.4.2_08, razon por la habria que copiar tambien esa version 1.4.2.08  dedseel host  a una ruta local

También se hace referencia al driver de oracle classes12.jar , ruta que también existe en la maquina

 

 

Este proyecto debería exportarse situándose en la raiz del proyecto como un jar sin incluir tanto los ficheros .classspath como el de .project

Antes de compilar debe eliminar manualmente el war existente desde el propio eclipse asi como el log de ejecución (manualmente habría que ubicarse en c:\ users\xxx\workspace\application)

Asimismo por ultimo , al   compilarlo  no debemos incluir el classpath

 

Veamos el código completo;

 

/*
Main.java
*
* Created on 20 de Marzo de 20174, 11:43
*

*/

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import oracle.jdbc.driver.OracleDriver;

/**
* @author CRN
*
* EXTRACTOR DOCUMENTOS
*/

public class Main {

private static int nodo;

private static int tope;

private static int topefinal;

public static void main(final String[] args) {

System.out.println(«Inicializando programa …»);

Connection conn = null;

GestorDeConexiones gc = null;

try{

gc = new GestorDeConexiones(«xxxx», «yyyyyy»); // credenciales de  acceso a la BBDD con el user y pwd de acceso 

conn = gc.getConnection();

// Comprueba si hay argumentos en la linea de comandos

final int nnodo=1;

if(args.length != 0)
//CON ARGUMENTOS

{
for(int counter = 0; counter < args.length; counter++)
{
System.out.println(«Argument index » + counter + «: » + args[counter]);
}

System.out.println(» fin argumentos»);

nodo = Integer.parseInt(args[0]); // primer argumento ( el nodo)

tope = Integer.parseInt(args[1]); //segundo argumento (inicio

topefinal = Integer.parseInt(args[2]); //tercer argumento ( tope)

System.out.println(«Argumento nodo= » + nodo);
System.out.println(«Argumento conteo incial= » + tope);
System.out.println(«Argumento numero de documentos= » + topefinal);

}

else

//SIN ARGUMENTOS

{
System.out.println («No se ha incluido ningún argumento»);
System.exit(0);
}

System.out.println(«NODO» + nodo);
System.out.println(«Valor inicial= » + tope);
System.out.println(«Valor final= » + topefinal);

final String path1 =»d:\»;

final String nfichero= path1+»previa_carga_jd_»+nodo+»tope«+tope+»topefinal_»+ topefinal;

//generacion del fichero de salida

File theDir = new File(nfichero);

if (!theDir.exists())
{
System.out.println(«..creando directorio: » + theDir.getName()); // SI EL DIRECTORIO NO EXISTE ,. SE CREA
boolean result = false;
try{
theDir.mkdir();

result = true;
}
catch(SecurityException se){   //handle it
}
if(result) {
System.out.println(«Directorio creado»);
}
}

//Intentamos cambiar los permisos al directorio creado
System.out.println(«Cambiamos permisos 777 a «+nfichero);
Process theProcess = null;
try
{
theProcess = Runtime.getRuntime().exec(«chmod 777 «+ nfichero);
}
catch(IOException e)
{
System.out.println(«Error en el método exec()»);
}

//creacion fichero de log

final String log1=path1;

final String nfichero1= log1+»directorio_»+nodo+»tope«+tope+»topefinal_»+ topefinal+».log»;

System.out.println(«Fichero Log de proceso :[» +nfichero1+»]»);
System.out.println(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++»);

//generación del fichero de salida

File fichero = new File(nfichero1);

 

if (!fichero.exists())
{

// SI NO EXISTE , SE CREA
System.out.println(«..creando fichero de log: » + fichero.getName());
boolean result = false;
try{
fichero.createNewFile();

result = true;
}
catch(SecurityException se){ //handle it
}
if(result) {
System.out.println(«Fichero creado»);
}
}

//abre fichero de log
File TextFile = new File(nfichero1);
FileWriter TextOut = new FileWriter(TextFile, true);
TextOut.write(«********************************************************************\r\n»);
TextOut.write(«INICIANDO PROCESO DE EXTRACCIÓN DE DOCUMENTOS r\n»);
TextOut.write(«Fichero Log de proceso :[» +nfichero1+»]\r\n»);
TextOut.close();

String path=nfichero +»/»;

System.out.println («RUTA DESTINO FINAL»+ path);

//extraemos los objetos de texto
RecuperadorBD2.RecuperarBD2(conn,path, tope,topefinal,nodo,nfichero1);

}
catch (final SQLException sqle) {
System.out.println
(«Error de acceso a BD:» + sqle.getMessage());
sqle.printStackTrace();
}
catch (final IOException ioe){
System.out.println
(«Error de acceso a disco:» + ioe.getMessage());
ioe.printStackTrace();
}

try{
if (gc != null && conn != null)
gc.closeConnection();
}

catch (final SQLException sqle)
{
System.out.println
(«Error de acceso a BD:» + sqle.getMessage());
sqle.printStackTrace();
conn = null;
gc = null;
}
System.out.println(» **** Fin extraccion ****»);
}
}

class RecuperadorBD2
{
public static void RecuperarBD2 (final Connection cn, final String path , final int topec, final int topex, final int nodo ,final String path1)
throws SQLException, IOException
{

 

String topex1= String.valueOf(topex);

String topec1= String.valueOf(topec);

String nnodo= String.valueOf(nodo);

int contador=0;
FileOutputStream fos = null;

Statement st = null;
ResultSet rs = null;

 

final String sql=» SELECT «+
«FROM(SELECT to_number (rownum) cuenta,»+
» p.
«+
» FROM «+
» ( «+
«SELECT c.nodo_co_nodo, «+
» c.infi_nu_infi, «+
» c.docu_co_documento, «+
» d.docu_no_documento, «+
» d.docu_no_extension ,»+
» d.docu_nu_version, «+
» d.DOCU_FX_MODIFICACION fecha,»+
» e.doct_do_documento doc «+
» FROM tablametadatos c, «+
» tablaauxiliar d, «+
» tabladocumentos e «+
» WHERE c.nodo_co_nodo = » + nnodo +
» AND c.docu_co_documento =d.docu_co_documento «+
» AND d.docu_co_documento =e.docu_co_documento «+
» AND e.docu_nu_version =d.docu_nu_version «+
» AND c.docu_nu_version =e.docu_nu_version «+
» ) «+
» where (cuenta >»+topec1 + » and cuenta <» +topex1 +» )»;

 

//abre fichero de log
File TextFile = new File(path1);
FileWriter TextOut = new FileWriter(TextFile, true);

System.out.println(«»);
System.out.println(«********************************************************************»);
System.out.println(«COMENZANDO PROCESO INICIAL») ;
System.out.println(«sql general=»+sql);
System.out.println(«»);

TextOut.write(«********************************************************************\r\n»);
TextOut.write(«COMENZANDO PROCESO INICIAL\r\n»);
TextOut.write(«sql general=»+sql+»\r\n»);

try
{

st = cn.createStatement();
rs = st.executeQuery(sql);

while (rs.next())
{
++contador;
//para blobs
final String verdocu= rs.getString(«docu_no_documento») ;
System.out.println(«Ndocu =» + verdocu );

final String verinfi =rs.getString(«infi_nu_infi»);
System.out.println(«Infi =» + verinfi );

final String verloc = rs.getString(«docu_co_documento»);
System.out.println(«Cdocc =» + verloc );

final String vernombre= verinfi+»«+verloc + ««+ verdocu;

System.out.println(«Nombre =» + vernombre );

System.out.println(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++»);
System.out.println(«Numero fichero a extraer =» + contador );

TextOut.write(«Numero fichero a extraer =» + contador+»\r\n»);

final String nfichero =vernombre; //LE PASAMOS COMO ARGUMENTO EL NOMBRE YA MONTADO:INFI_DOCU+LOC

System.out.println(» Fichero a extraer: » +nfichero);
TextOut.write(«Fichero a extraer =» + nfichero+»\r\n»);

final String pathname= path + nfichero ;
System.out.println(» Extrayendo fichero multimedia : «+pathname);
TextOut.write(«Extrayendo fichero multimedia =» + pathname +»\r\n»);

//deberíamos comprobar si existe ese fichero
final File file = new File(pathname);

fos = new FileOutputStream(file);
final Blob bin = rs.getBlob(«doc»);
System.out.println(«…Extrayendo BLOB»);
TextOut.write(«Extrayendo BLOB \r\n»);

final InputStream inStream = bin.getBinaryStream();
final int size = (int)bin.length();
System.out.println(«Tamaño: «+size);
TextOut.write(«Tamaño =» + size+»\r\n»);

final byte[] buffer = new byte[size];
int length = -1;

while ((length = inStream.read(buffer)) != -1)
{
fos.write(buffer, 0, length);
}

if (fos != null)

{

//Intentamos cambiar los permisos al directorio creado
TextOut.write(«Fichero extraido ok \r\n»);

permisos777(pathname);
fos.close();
System.out.println(» Fichero extraido ok.»);
System.out.println(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++»);
TextOut.write(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n»);

}
}
}
catch (final IOException ioe)
{
throw new IOException(ioe.getMessage());

}
finally
{
if (fos !=null)
{
fos.close();
TextOut.write(«FIN DEL PROCESO \r\n»);
TextOut.close();

}
if (rs !=null)
{
rs.close();

TextOut.close();
}
rs=null;
st=null;

 

 

System.out.println(«Fin RecuperaBD2»);

System.out.println(«FIN PROCESO») ;

TextOut.close();

}
}

 

//funcion para añadir permisos 777 a los ficheros extraidos 
public static void permisos777 (final String pathname)
{

Process theProcess = null;

//intentamos cambiar los permisos del fichero recién creeado
System.out.println(«Cambiamos permisos 777 a «+pathname);
try
{
theProcess = Runtime.getRuntime().exec(«chmod 777 «+ pathname);
}
catch(IOException e)
{
System.out.println(«Error en el método exec()»);
}
//fin de cambio de permisos

}

}

//clase para gestionar las conexiones con la BBDD

class GestorDeConexiones
{
private final String user;
private final String password;
private Connection conn = null;
private boolean conectado = false;

public GestorDeConexiones(final String usr, final String pwd){
user = usr;
password = pwd;
}

public void closeConnection() throws SQLException{
if (conectado)
conn.close();
}

private void conectar() throws SQLException {

String url;
DriverManager.registerDriver(new OracleDriver());

url = «jdbc:oracle:thin:@x.x.x.x:yyy:cadena»; ///ojo PROD

 

conn = DriverManager.getConnection(url,user, password);
System.out.println(«Conexion correcta»);
conectado = true;

}

public Connection getConnection() throws SQLException
{
if (!conectado)
conectar();
return conn;
}
}

 

 

 

 

superminipc retro


Hoy en día, gracias a las impresoras 3D, podemos encontrar todo tipo de carcasas personalizadas para las Raspberry Pi  qeu podemos descargar desde el famoso respositorio Thingverse   para luego intentar imprimirla  en nuestra impresora 3d ( en caso de ser el afortunado de poseer una  y que sea funcional), pero  lo que tenemos aquí es algo muy especial pues no es un Mini PC con Raspberry PI y una carcasa impresa en 3D :es una Raspberry Pi dentro de una radio en miniatura con forma de PC de los años 90.

El hack merece explicación, porque es una delicia. Ha sido creado por Senpailord1234, un usuario de Reddit. Como hemos comentado no se trata de un carcasa de PC impresa con una impresora 3D, sino que es una auténtica radio en miniatura de los años 90 0,muy a la moda de los 90’s ,pues  en aquella época a alguien le pareció interesante comercializar una radio de bolsillo con forma de PC… 

Inspirado  en esta  idea   Senpailord1234  decidió convertir esta vieja  radio dentro de un minipc falso  en un PC de verdad… La pega es que al ser  tan pequeña  ahí dentro no cabe una Raspberry Pi 4 o similar, así que utilizó una versión aún más miniaturizada, llamada Raspberry Pi Zero W, que apenas cuesta 17 euros

Esta placa  Raspberry Pi Zero W amplía la familia Pi Zero, el Pi Zero W tiene toda la funcionalidad del Pi Zero original, pero con conectividad añadida, pues e consta de LAN inalámbrica 802.11 b/g/n,  Bluetooth 4.1 y  Bluetooth de baja energía (BLE)

Raspberry Pi Zero W es una placa computacional en miniatura( su tamaño es de  7,5 x 6 x 4 cm) pues ,para que se haga una idea, es casi tres veces más pequeña que una Raspberry Pi 4…

Como el Pi Zero, también tiene: 

  • 1 GHz, CPU de un solo núcleo.
  • 512 MB de RAM.
  • Puertos Mini HDMI y USB On-The-Go
  • Alimentación micro USB.
  • Cabezal compatible con HAT de 40 pines.
  • Vídeo compuesto y encabezados de reinicio
  • Conector de cámara CSI


Senpailord1234 se  decidió a  convertir en funcional los periféricos de plástico de la radio en miniatura. Por ejemplo, el lector de floppy disk de imitacion de la carcasae  (los viejos discos que tenían los PC) lo ha convertido en la ranura de entrada para la tarjeta microSD, tal como se puede ver en la foto de apertura de la noticia .

Después ha introducido la Raspberry Pi Zero W dentro de la carcasa de la radio, ademas   la ha conectado a una pequeña pantalla LED que ha puesto en el monitor de plástico de la radio:

Raspberry Pi

 

Como nota curiosa   además no  quiso desaprovechar la radio AM/FM original, así que  conectó  a la Raspberry un DAC IS2  y  que a su vez conecto a  los pequeños altavoces incorporados , por lo  que  puede introducir música por el lector de discos del PC, en una micro SD, y escucharla por los altavoces.

Y aquí lo tenemos, una radio con forma de PC en miniatura convertida en un PC de verdad, capaz de ejecutar Doom. Pura genialidad, gracias a la magia de Raspberry Pi.

Raspberry PI PC