I managed to send audio to my Google Home, discovered the Go tool trace and started a post about Python and Jupyter.
My new Google Home
I was playing with my new Google Home device when I wonder if it would be possible to trigger local actions, like sending a message to my Raspberry Pi. After some research I found the Hiden API of Google home but It is a little bit disappointing. There is nothing interesting to do with it.
The I discovered a post about how to use the Google Home as a Choromecast and this was a little bit more promising. The post starts with a simple tutorial to control the volume using pychromecast
library. Then, using gtts
Google Text To Speech library, generates an mp3 file and send a request to the Google Home with the url that serves that sound. In the original post, It’s using an Apache web server, I replaced it by a simple web static file server in Go. Here is the code. The logRequest is just to have some feedback.
|
|
So this code basically serves the files in the directory music. You just have to modify the Python code to store the mp3 there. Keep in mind that by default, Go looks for the full path in the given directory. This means that the folder structure should look like this
|
|
This is really funny. I’m thinking about removing the dust from my Raspberry Pi and program it warn me if the temperature of my home is too high or too low. why? Because I can.
Go Tool Trace
I’ve found two interesting post about this tool. post1 post2. This has been really interesting for me as I’ve been wondering for some time if there was any way of visualizing the program execution time.
As you my guess, the first thing I did is to run the Mandelbrot tests and visualize the output. This help me to prove that the reason why the performance is the same for the configuration 2x2x512 is that one of the areas is much more expensive to calculate.
Adding some tracing to the code I got the exact timing for each section and this is how it looks like.
When | Elapsed | Goroutine ID | Events |
---|---|---|---|
0.007260554s | 568.048659ms | Task 1 (complete) | |
0.007260554 | . | 8a | task Calculate (id 1, parent 0) created |
0.007466081 | . 205527 | 39 | region Area 0 started (duration: 289.046531ms) |
0.007476658 | . 10577 | 38 | region Area 2 started (duration: 4.819706ms) |
0.007532978 | . 56320 | 37 | region Area 1 started (duration: 563.917497ms) |
0.012303297 | . 4770319 | 38 | region Area 3 started (duration: 148.341257ms) |
0.575309213 | .563005916 | 8 | task end |
- | - | - | GC:74.168µs |
So now it’s clear, The area with index 1 is the most expensive and takes 563ms to complete. This means that meanwhile one worker is doing this task, the other workers have plenty of time to finish the other areas.
This is just a brief summary of all the information the the tracer can provide. I’m thinking about doing a single post about this.
Python an Jupyter
Provably will be the next #howto post. stay tunned!