#Python – Update all Python Packages using pip with #PowerShell

Buy Me A Coffee

Hi !

Here is a small script that I always go back to search in my notes. I found this on internet sometime ago, and is the easiest way to update all packages in a specific environment using pip and PowerShell:

pip freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}

Depending on your environment, it may take some time. The output is cool, your packages are updated !

Happy coding!

Greetings

El Bruno

#Coding4Fun – How to control your #drone with 20 lines of code! (4/N)

Buy Me A Coffee

Hi!

The DJI Drone is a great device, you can have a lot of fun and also learn a lot. However, because the main way to interact with the device is via WIFI and UDP, you need to connect to the device WIFI. And, connecting and disconnecting to the is some times not a very happy moment.

So, there are 2 main tips to work in a more agile way with this.

Connect to the Drone WiFi via Command Line

You probably already know the command

netsh wlan connect name=<YOUR WIRELESS NAME> 

This is the quickest way to connect to a wireless. Once you have your DJI Tello name and your home / work / whatever network name in your Windows Terminal, just key up until you find it.

Bonus: If you want to know the names of the network, you may want to use the command

netsh wlan show profiles

As you can see in the following image, in my home computer I got several IoT Devices connections, my phone, the DJI Tello WiFi and my home one

The command to connect to my drone will be

netsh wlan connect name=TELLO-589327 

Once I want to connect to my default network, I simply disconnect from the drone and wait until my machine connect to the default Wireless Network. The command to disconnect is

netsh wlan disconnect

So, as a recap the only 2 commands you need are:

netsh wlan connect name=<TELLO-Your device number>
netsh wlan disconnect

Super easy!

Ping your drone to check when you are connected

Once you connect to your drone WIFI, it may take a couple of seconds or more to establish the connection. If during this time, you launch an app to interact with the device, be prepared to some funny results.

The way that I use to see when the Wireless connection is ready is as simple as to use a ping -t command with

ping 192.168.10.1 -t

This is the default drone IP, and you can run this in a separate window and you will know when the drone is ready.

Happy coding!

Greetings

El Bruno

References

#RaspberryPi – How to solve the SSH warning: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Buy Me A Coffee

Hi !

When you test and play around with your Raspberry Pi, you may need to format again your Raspbian SD Card, and then start everything from scratch. This is a trivial process, and is usual to setup the device to connect automatically to a Wifi network and also enable SSH (I wrote about this, see references).

And then, when you try to connect via SSH you may get this warning

 C:\Users\bruno> ssh pi@192.168.1.247
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256: Not here ! 
Please contact your system administrator.
Add correct host key in C:\\Users\\bruno/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\bruno/.ssh/known_hosts:10
ECDSA host key for 192.168.1.247 has changed and you have requested strict checking.
Host key verification failed.

This is a very common scenario, and because I forgot how to fix it, I’ll write the simple command remove all keys belonging to the IP / hostname from the known_hosts file.

# ssh-keygen -R <host>
ssh-keygen -R 192.168.1.247

And that’s it, keys removed and now I can connect via SSH

Happy coding!

Greetings

El Bruno

References

My posts on Raspberry Pi

Dev posts for Raspberry Pi
Tools and Apps for Raspberry Pi
Setup the device
Hardware

#Windows10 – Cleaning some disk space, Windows SDK and #dotnetcore installs

Buy Me A Coffee

Hi!

I’m very careful with my disk space, however my C: drive in Windows 10 started to claim about low space. I got 3 disks on my machine, 2 SSDs and a regular one; and I always check to install all my software on my D: drive. So, that’s why running low space on C: was shocking.

So, I did a small check on the apps and contents using a lot of disk and I found 2 main sources

  • Windows 10 SDKs
  • DotNet Core SDKs and Runtimes

Every time a new version of Windows 10 is released, and I build a Windows 10 App, I get a new Windows SDK. Each one is around 2GBs, I got almost 20, so make your numbers.

Windows 10 Settings App and Features Apps sizes

Note: There is a cool feature to find usage space of installed apps by this, out of the box in Windows Settings.

The second one was related to .Net Core. I had a lot of versions installed, and every time I get a new update on Visual Studio 2019, it seems that I’m updating also my .Net Core SDKs. Right now, I only care about .Net Core 3, so it was time to uninstall all the others.

The official documentation ” How to remove the .NET Core Runtime and SDK” (see references) wasn’t very helpful. However, it was a good source to learn more about dotnet command, specially this one:

C:\> dotnet --list-sdks

This command list all the installed SDKs, and with a little of PowerShell scripting I manage to uninstall almost everything. Once I started this path, I also realize that the

$app.Uninstall()

command was not working, so a little search pointed me into an old article from Scott Hanselman, where he did a similar script to remove old .Net Core versions (see references).

The final script is

You can also get the ps1 file directly from GitHub here https://github.com/elbruno/Blog/tree/master/20191016%20Uninstall%20NetCore%20Versions

And a warning, the script will list all the installed dotnet sdks

And then, when the uninstall process start, we will require to confirm each uninstall action. Not very user friendly, but it get the work done!

Final advice is to repair the .Net Core 3 version, just in case something is missing.

Happy coding!

Greetings @ Burlington

El Bruno

References

#Flow – Detener el salva pantallas utilizando botones Flic, procesos con @microsoftflow, @powershell y mucho mas ! (gracias @ShortcutLabs)

Buenas !

Llevar adelante un Centro de Innovación es una experiencia que es 50% de problemas y 50% de diversión. En estos momentos estamos actualizando nuestro IC en Toronto, y esto significa que tenemos muchas nuevas screens (entre otras cosas) y esto también supone un desafío al momento de pensar en ahorro de energía.

Por suerte, las TVs se apagan automáticamente cuando no hay signal. El desafío era comprender como enviar signal desde dispositivos con Windows 10, y claro, antes de llegar a este punto, pasamos por la experiencia del Screen Saver.

Hay soluciones completas y complejas para manejar estos escenarios de Digital Signage. En nuestro caso, la idea era ver de hacer algo utilizando parte de la tecnologia que conocemos para solucionar este escenario.  @ChloeCondon escribió un par de tweets donde menciono a los Flic buttons, y se me ocurrió que era el momento de probarlos. Inicialmente pensé en este proceso

  • Clic en un botón Flic
  • El boton lanza un MS Flow
  • MS Flow apaga el screen saver

Parece muy simple, ademas la conexion entre MS Flow y Flic esta disponible en Preview! podemos suscribir los eventos clic, doble clic y hold como triggers de Microsoft Flow.

F1 settings for a button

El siguiente paso es crear un Flow para procesar el evento del botón. De alguna manera tengo que procesar el trigger de MS Flow para detener el screen saver en un ordenador con Windows 10. Una forma casi natural de trabajar con MSFlow es crear un archivo en el ordenador con Windows 10. Inicialmente hice algunas pruebas con Microsoft Flow Gateways, que parece ser la herramienta ideal para compartir información entre origenes de datos on premises y MS Flows en el cloud.

Sobre un MS Flow en blanco, agregue el trigger de Flic button. Las settings del trigger permiten elegir el botón y el tipo de acción para la suscripción.

01 microsoft flow flic button trigger02 microsoft flow flic button settings

Llego el momento de configurar Gateways. Y, básicamente, no fue de mi agrado. Path en modo hard-code, lo mismo para guardar credenciales, algo no me parecía una buena idea. Este fue el momento de salir a correr un poco para tener nuevas ideas.

03 microsoft flow gateway file system configuration

Por suerte, ya tenemos un sistema de archivos distribuido, que es seguro y bastante potente. Tambien tengo la suerte de que el mismo esta funcionando en todos los ordenadores de demo de Windows 10: OneDrive. Y como bonus, OneDrive tiene muchos triggers y acciones para trabajar con Microsoft Flow!

Llego el momento de actualizar mi escenario

  • Clic en un botón Flic
  • Lanzar un MS Flow
  • MS Flow crea un archivo en OneDrive
  • De alguna manera esto deshabilita el screen saver

El MS Flow es mas bien simple

04 microsoft flow flic button trigger and save a OneDrive file

Un par de apuntes.

La expresión convertTimeZone() esta pensada para poder tener nombres de archivos unicos para cada nuevo archivo:

convertTimeZone(utcnow(),’UTC’,’W. Europe Standard Time’,’yyyy MM dd HH mm ss’)

El contenido del archivo no es importante (por ahora). He aquí un ejemplo de archivos creados con este Flow.

onedrive files created by flic clic

Esto va tomando forma. Despues de presionar el boton Flic, en pocos segundos, OneDrive sincroniza el nuevo archivo en todos los ordenadores con Windows 10. Es el momento de crear un File System Watcher para detectar los cambios y detener el screen saver. Como era de esperar, mi primera idea fue crear una .Net Core Console App para hacer esto, sin embargo recorde que mis amigos IT Pro hacen magia con PowerShell.

Una busqueda en internet me llevo a leer el siguiente post de Jessica Cook: Flow of the Week: Local code execution, donde cierra un escenario muy parecido al que comento en este post.  Ella si ha utilizado gateways, y yo me dedique a modificar un poco su PS Script:

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "<Folder to Watch>"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true 
$action = {
Start-Process "taskkill /f /im bubbles.scr"
} 
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}

Listo! Una vez agregado el PowerShell script al inicio de Windows, los ordenadores de demo, ya estan en modo “sync to stop screen saver”. Y es presionar el boton y ver como se deshabilitan los screen savers!

El proceso

  • Clic en un botón Flic
  • Lanzar un MS Flow
  • MS Flow crea un archivo en OneDrive
  • PS Script para detectar nuevos archivos en un directorio
  • Cuando se detecta un archivo, se detiene el proceso del Screen Saver

Hay mucho margen de mejora, como por ejemplo detener el screen saver, en lugar de matar el proceso del mismo. He intentado con SendKeys y moviendo el mouse con PS, pero lo unico que me ha funcionado es el kill process!

Importante tambien es recordar que esto no es realtime, algunas veces tarda 1 segundo y otras 10 segundos. Lo importante es que funciona y es una buena historia para contar en el IC.

Happy coding!

Saludos @ Toronto

El Bruno

References

#CustomVision – Analizando imágenes en una Console App utilizando un proyecto de #CustomVision en #Docker Container

Buenas !

Este es un post especial, ya que es el 1ro que escribo completamente desde mi . Estoy seguro que  Javier (@jsuarezruiz), Yeray (@JosueYeray), Braulio (@braulio_sl), Luis, Sara, Roberto y otros mac users estarían orgullosos de mi 😀

Basado en el post anterior, he compilado y ejecutado mi proyecto Custom Vision Marvel en Docker para Mac. La experiencia es buenísima, y bash también es una novedad interesante!

docker build -t elbruno/cvmarvel:3.0 .

01 doker build on mac

El siguiente paso es obtener en ID y ejecutar la misma.

03 docker list images and run image

El paso final es utilizar CURL para hacer una petición HTTP Post con una imagen para analizar. Es muy simple, salvo que me tomo unos minutos y unas búsquedas en bing el darme cuenta que hay utilizar el prefijo @ en la llamada desde la consola! Iron Fist detected !

curl -X POST http://127.0.0.1:8080/image -F imageData=@img1.jpg 

05 docker bash ls image analyzed and source image.png

Ok, el entorno de pruebas con Docker esta funcionando, así que ahora es momento de utilizar Visual Studio for Mac. En realidad la app es una .Net Core Console App, que podría crear en Visual Studio Code, pero esta es la excusa perfecta para comenzar a conocer Visual Studio for Mac.

Mi codigo de pruebas esta en Azure DevOps, así que después de sincronizar los repositorios, ya pude crear un nuevo proyecto a mi solución.

06 new netcore project in visual studio for mac

Un par de lineas de código C# en la console app y ya pude realizar el análisis de la imagen utilizando el contenedor con el proyecto de Custom Vision

07 console app in vs for mac detected image

El código es muy simple:

Happy coding!

Saludos @ Toronto

El Bruno

References

My Posts

Windows 10 and YOLOV2 for Object Detection Series

#CustomVision – Analyzing images in a Console App using a #CustomVision project in a #Docker Container

Hi !

This is a special post. It’s the 1st one I write completely in my MacBook, so I’m sure that Javier (@jsuarezruiz), Yeray (@JosueYeray), Braulio (@braulio_sl), Luis, Sara, Roberto and other mac users will be proud of me 😀

So, I build and run my Custom Vision Marvel project in Docker for Mac. Smooth build and also a fast one!

docker build -t elbruno/cvmarvel:3.0 .

01 doker build on mac

Then get the image id and run the image

03 docker list images and run image

Final step is to play around with curl in bash to post the image (the file name with @ prefix took me some bing searches). Iron Fist detected !

curl -X POST http://127.0.0.1:8080/image -F imageData=@img1.jpg 

05 docker bash ls image analyzed and source image.png

Ok, the environment is working, so it’s time to create a .NetCore Console App to test this using amazing C# code. I have all my code in Azure Dev Ops, so I sync my repo and  added a new project in my current solution

06 new netcore project in visual studio for mac

Some C# lines in my console app and I was able to analyze a local picture using the Custom Vision Model in a container

07 console app in vs for mac detected image

The source code is very simple

Happy coding!

Greetings @ Toronto

El Bruno

References

My Posts

Windows 10 and YOLOV2 for Object Detection Series

#CustomVision – Utilizando un proyecto Custom Vision en un #Docker Container local

Buenas !

Ahora que ya tengo en funcionamiento Docker en Windows 10 es tiempo de exportar un proyecto de CustomVision y ejecutarlo dentro de un container.

Cuando exportamos hay 2 version disponibles: Linux or Windows

00 CV exported to docker

En mi caso no pude compilar la versión de Windows, asi que trabajare con la versión de Linux. El zip que descargamos tiene varios archivos, como el DockerFile con la definición del container, el modelo de ML, los archivos python para leer y realizar análisis de imagenes y varios archivos mas.

FROM python:3.5

ADD app /app

RUN pip install –upgrade pip
RUN pip install -r /app/requirements.txt

# Expose the port
EXPOSE 80

# Set the working directory
WORKDIR /app

# Run the flask server for the endpoints
CMD python app.py

Esta imagen utiliza Python 3.5, y el comando para compilar la imagen es

docker build -t elbruno/cvmarvel:3.0 .

05 CV docker build image in windows

Un par de segundos después, la imagen esta compilada y disponible en la store local

docker image ls

07 Docker local images

Ahora que se mi IMAGE ID, ya puedo iniciar la ejecución de la imagen. En este caso, utilizare el puerto 8080

docker run -p 127.0.0.1:8080:80 -d ddd1623ee694

En este ejemplo utilizare PowerShell y el comando Invoke-WebRequest para realizar una petición HTTP Post con una imagen

Invoke-WebRequest -uri “http://127.0.0.1:8080/image&#8221; -Method Post -Infile “D:\docker\test01.jpg” -ContentType ‘image/jpg’

06 CV running and testing an image on docker

El resultado detecta una imagen, sin embargo no tengo todo el resultado Json disponible. Para esto, agregare un archivo de salida en la petición para guardar en el mismo el resultado del análisis de la imagen. Ahora ya puedo ver que detecta Iron Fist y a Venom!

Invoke-WebRequest -uri “http://127.0.0.1:8080/image&#8221; -Method Post -Infile “D:\docker\test01.jpg” -Outfile “D:\docker\result.json” -ContentType ‘image/jpg’

08 docker results in visual studio code

Happy coding!

Greetings @ Burlington

El Bruno

References

My Posts

Windows 10 and YOLOV2 for Object Detection Series

#CustomVision – Running a Custom Vision project in a local #Docker Container

Hi !

So now that I have Docker running in Windows 10, it’s time to use a Custom Vision model in Windows hosted in Docker container.

There are 2 version available to export from CustomVision.ai for each one the projects: Linux or Windows

00 CV exported to docker

I could not sucessfully built the Windows version, so I’ll work with the Linux one. Once exported the zip file have a set of python files to tun the model, the model file (model.pb) and a Dockerfile to build the docker image.

FROM python:3.5

ADD app /app

RUN pip install –upgrade pip
RUN pip install -r /app/requirements.txt

# Expose the port
EXPOSE 80

# Set the working directory
WORKDIR /app

# Run the flask server for the endpoints
CMD python app.py

The image uses Python 3.5, and the build command is as simple as

docker build -t elbruno/cvmarvel:3.0 .

05 CV docker build image in windows

After a couple of seconds, the image is build in the local store

docker image ls

07 Docker local images

Once I have my IMAGE ID, it’s time to start the image. For this demo, I’ll use the port 8080

docker run -p 127.0.0.1:8080:80 -d ddd1623ee694

And then I can submit an image using Invoke-WebRequest and view the results directly in PowerShell

Invoke-WebRequest -uri “http://127.0.0.1:8080/image&#8221; -Method Post -Infile “D:\docker\test01.jpg” -ContentType ‘image/jpg’

06 CV running and testing an image on docker

In order to get the complete output of the POST request, I must add an OutFile into the PowerShell comand. And in the complete output we can see some Iron Fist and Venom results!

Invoke-WebRequest -uri “http://127.0.0.1:8080/image&#8221; -Method Post -Infile “D:\docker\test01.jpg” -Outfile “D:\docker\result.json” -ContentType ‘image/jpg’

08 docker results in visual studio code

Happy coding!

Greetings @ Toronto

El Bruno

References

My Posts

Windows 10 and YOLOV2 for Object Detection Series

#PowerShell – Download all MS Ignite videos and slides in a single click (thanks @mderooij!)

Hi !

Last week I shared a powershell script created by Jon Galloway to download videosn from Channel 9. So, Microsoft Ignite is finished, and someone pick the idea and created a similar one which also includes video and slides download features.

We need to thanks to Michel de Rooij (@mderooij), who is the author of the powershell script to download materials from Microsoft Ignite 2017.

I1

Like in the previous one, we have a couple of parameters to define some filters, like video quality. It took me almost a full day to download all the materials and at the end I finished downloading +420GB which includes 785 PowerPoint Slides and 681 sessions videos.

I2

Happy Coding!

Greetings @ Toronto

El Bruno

References