## Saturday, February 27, 2021

### Python 2.7.18 : Kick Start Google - Boring Numbers.

Today I solved one of the problems required for solving Google Kick Start in 2020, see on my account.
Round H 2020 - Kick Start 2020 Boring Numbers (7pts, 12pts) Problem Ron read a book about boring numbers. According to the book, a positive number is called boring if all of the digits at even positions in the number are even and all of the digits at odd positions are odd. The digits are enumerated from left to right starting from 1. For example, the number 1478 is boring as the odd positions include the digits {1, 7} which are odd and even positions include the digits {4, 8} which are even. Given two numbers L and R, Ron wants to count how many numbers in the range [L, R] (L and R inclusive) are boring. Ron is unable to solve the problem, hence he needs your help.
Let's try to find the solution:
``````import math
print("Round H 2020 - Kick Start 2020: Detect is positive number is called boring.\n")
nr = int(input("get natural positive number: "))

all_cond = []
# detect if the number is odd or even number
def detect_odd_even(num):
if (num % 2) == 0:
#print("{0} is Even number".format(num))
detect = True
else:
#print("{0} is Odd number".format(num))
detect = False
return detect
# check if is an boring number.
def boring_number(num):
for p,num in enumerate(str(num),1):
print(p,num)
if (detect_odd_even(p) == detect_odd_even(int(num))): all_cond.append(True)
else:
all_cond.append(False)

# check the number is
boring_number(nr)
# print result if the positive number is boring
if (all(all_cond) == True): print("{0} is an positive boring number".format(nr))
else:
print("{0} is not a positive boring number".format(nr))``````
Let's test it:
``````~/mathissues\$ python math_003.py
Round H 2020 - Kick Start 2020: Detect is positive number is called boring.

get natural positive number: 345
(1, '3')
(2, '4')
(3, '5')
345 is an positive boring number``````
Then la last step is to test any number from range of given two numbers L and R.
The new source code is this:
``````import math
print("Round H 2020 - Kick Start 2020: Detect is positive number is called boring.\n")
#nr = int(input("get natural positive number: "))

all_cond = []
# detect if the number is odd or even number
def detect_odd_even(num):
if (num % 2) == 0:
#print("{0} is Even number".format(num))
detect = True
else:
#print("{0} is Odd number".format(num))
detect = False
return detect
# check if is an boring number.
def boring_number(num):
for p,num in enumerate(str(num),1):
print(p,num)
if (detect_odd_even(p) == detect_odd_even(int(num))): all_cond.append(True)
else:
all_cond.append(False)

# check the number is
#boring_number(nr)
# print result if the positive number is boring

nr1 = int(input("get firt natural positive number: "))
nr2 = int(input("get firt natural positive number: "))
if nr1 < nr2:
n1 = nr1
n2 = nr2
else:
n1 = nr2
n2 = nr1
for all_nr in range(n1,n2):
all_cond = []
boring_number(all_nr)
print(all_nr)
# print result if the positive number is boring
if (all(all_cond) == True): print("{0} is an positive boring number".format(all_nr))
else: print("{0} is not a positive boring number".format(all_nr))
all_cond = [] ``````
The final solution result to test all numbers in range given two numbers L and R can be see bellow:
``````~/mathissues\$ python math_003.py
Round H 2020 - Kick Start 2020: Detect is positive number is called boring.

get firt natural positive number: 11
get firt natural positive number: 16
(1, '1')
(2, '1')
11
11 is not a positive boring number
(1, '1')
(2, '2')
12
12 is an positive boring number
(1, '1')
(2, '3')
13
13 is not a positive boring number
(1, '1')
(2, '4')
14
14 is an positive boring number
(1, '1')
(2, '5')
15
15 is not a positive boring number``````

## Thursday, February 25, 2021

### Python 3.9.1 : Python and Spectator Earth.

The Spectator Earth allows you to track satellites, access their imagery, and easily build new information, based on data from this amazing orbital infrastructure.
You need just an API KEY to use it with cURL, Python, or JavaScript.
In this tutorial, I will show you how can be used.
Let's see some simple examples.
This first example shows you the satellite by id:
``````import requests

id = input("Type id sattelite: ")
satellite_id = id
url = 'https://api.spectator.earth/satellite/{satellite_id}'.format(satellite_id=satellite_id)

response = requests.get(url)
data = response.json()
print(data)``````
Let's see some satellite by ids:
``````[mythcat@desk Spectator]\$ python  satellite_all.py
Type id sattelite: 1
{'id': 1, 'type': 'Feature', 'geometry': {'type': 'Point', 'coordinates': [-51.88851761326367,
70.75978200389422]}, 'properties': {'name': 'Sentinel-1A', 'norad_id': 39634, 'sensors':
[{'type': 'SAR', 'avg_footprint_width': '3.20'}], 'open': True, 'platform': 'Sentinel-1A'}}
[mythcat@desk Spectator]\$ python  satellite_all.py
Type id sattelite: 2
{'id': 2, 'type': 'Feature', 'geometry': {'type': 'Point', 'coordinates': [42.046601163641796,
-14.660442921557335]}, 'properties': {'name': 'Sentinel-2A', 'norad_id': 40697, 'sensors':
[{'type': 'OPTICAL', 'avg_footprint_width': '2.32'}], 'open': True, 'platform': 'Sentinel-2A'}}
[mythcat@desk Spectator]\$ python  satellite_all.py
Type id sattelite: 3
{'id': 3, 'type': 'Feature', 'geometry': {'type': 'Point', 'coordinates': [-91.98478583784988,
79.45732380441011]}, 'properties': {'name': 'Sentinel-3A', 'norad_id': 41335, 'sensors':
[{'type': 'OPTICAL', 'avg_footprint_width': '10.16'}, {'type': 'OPTICAL',
'avg_footprint_width': '11.20'}], 'open': True, 'platform': 'Sentinel-3A'}}
[mythcat@desk Spectator]\$ python  satellite_all.py
Type id sattelite: 4``````
Let's see one example with satellite overpasses:
``````import requests
import json
api_key = input("api_key :")
bbox = '19.59,49.90,20.33,50.21'
satellites = 'Sentinel-2A,Sentinel-2B'
url = 'https://api.spectator.earth/overpass/?api_key={api_key}&bbox={bbox}&
satellites={satellites}'.format(api_key=api_key, bbox=bbox, satellites=satellites)
response = requests.get(url)
data = response.json()
print(type(data))
print(data)
``````
You can query for overpasses of the chosen satellite over a defined area of interest and the output provides you with a satellite sensor footprint for the nearest overpass, overpass frequency in seconds, and all information available.
Query parameters for the URL variable are:
The result is this:
``````[mythcat@desk Spectator]\$ python satellite.py
api_key :....
...
{'frequency': 93996, 'overpasses': [{'id': 16486437, 'acquisition': True, 'date':
'2021-02-26T09:57:00Z', 'footprint': {'type': 'Polygon', 'coordinates':
...
footprint': {'type': 'Polygon', 'coordinates':
...
[[[19.153675312697636, 46.847554078717884], ... ``````
Query parameters for the url :
• api_key - your API key
• bbox - area of interest bounding box list of coords (lon, lat, lon, lat);
• satellites - which satellites to include like: (Sentinel-1A, Sentinel-1A, Sentinel-2A, Sentinel-2B, Sentinel-3A, Landsat-8) - optional;
• days_before - a number of days before the current date for which overpasses should be computed integer optional, default=0;
• days_after - a number of days after the current date for which overpasses should be computed integer optional, default=7;
You can see a image get from my location: ## Tuesday, January 26, 2021

### Python 3.6.0 : Django 3.2 alpha 1 released.

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.

I tested it and I was satisfied with the way it works with this framework and it has many good features for the web.
Django 3.2 is designated as a long-term support release.

Today, Django 3.2 alpha 1 is available with new features.
A good roadmap towards Django 3.2. can be found on this schedule webpage.
As with all alpha and beta packages, this is not for production use.
Django 3.2 supports Python 3.6, 3.7, 3.8, and 3.9. The next release is expected in April 2021, see:
• January 14, 2021, Django 3.2 alpha; feature freeze;
• February 18 Django 3.2 beta; non-release blocking bug fix freeze;
• March 18 Django 3.2 RC 1; translation string freeze;
• April 6 Django 3.2 final release.

## Sunday, December 27, 2020

### Python 3.9.1 : Testing the drawSvg python package.

The tutorial for today is about drawSvg python package.
This python package let you to create SVG images (vector drawings) and rendering them or displaying them in a Jupyter notebook.
Let's install it with pip3 tool:
``````[mythcat@desk ~]\$ cd PythonProjects/
[mythcat@desk PythonProjects]\$ pip3 install drawSvg
...
Successfully installed drawSvg-1.7.0 imageio-2.9.0``````
A simple source code test added to svg_001.py python script:
``````import drawSvg as draw

# Draw a frame of the animation
def draw_frame(t):
#Create draw surface and add a geometric shapes ...
out = draw.Drawing(1, 1, origin=(0,0))
out.setRenderSize(h=460)
out.append(draw.Rectangle(0, 0, 5, 5, fill='white'))
y = t + 0.3
out.append(draw.Circle(0.5, y, 0.5, fill='blue'))
return out

with draw.animate_video('example.gif', draw_frame, duration=0.01) as anim:
# Add each frame to the animation
for i in range(20):
anim.draw_frame(i/10)``````
You can change the source code and open the GIF animation file:
``````[mythcat@desk PythonProjects]\$ vi svg_001.py
[mythcat@desk PythonProjects]\$ python svg_001.py
The result of the source code is this: ## Monday, December 21, 2020

### Python 3.6.9 : Ursina python game engine - part 001 .

I wrote the tutorial a few days ago and today I completed it with a video clip ...
The official webpage comes with this intro:
Ursina makes it easier to develop games, visualizations and other kinds of software.
The concise API combined with the power of the Python programming language, makes life easier for the developer so they can focus on what they are making.

Ursina can be used on Windows and Linux
Today I tested on Fedora Linux and works great.
First, the install process is easy with pip3 tool.
``````[mythcat@desk ~]\$ pip3 install ursina
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: ursina in ./.local/lib/python3.9/site-packages (3.2.2)
Requirement already satisfied: screeninfo in ./.local/lib/python3.9/site-packages (from ursina) (0.6.6)
Requirement already satisfied: numpy in /usr/lib64/python3.9/site-packages (from ursina) (1.19.4)
Requirement already satisfied: panda3d in ./.local/lib/python3.9/site-packages (from ursina) (1.10.7)
Requirement already satisfied: pyperclip in ./.local/lib/python3.9/site-packages (from ursina) (1.8.1)
Requirement already satisfied: pillow in /usr/lib64/python3.9/site-packages (from ursina) (7.2.0)
``````
Let's create some examples and see how this python package works.
Create a python script file:
``````[mythcat@desk ~]\$ cd PythonProjects/
[mythcat@desk PythonProjects]\$ vi ursina_001.py``````
``````from ursina import *
# create the application
app = Ursina()
# set some data , like a cube
ground = Entity(
model = 'cube',
color = color.blue,
z = -.1,
y = -3,
origin = (0, .5),
scale = (50, 1, 10),
collider = 'box'
)
# run the application
app.run()``````
And the last pas, run it with python:
``````[mythcat@desk PythonProjects]\$ python ursina_001.py
ursina version: 3.2.2
package_folder: /home/mythcat/.local/lib/python3.9/site-packages/ursina
asset_folder: .
psd-tools not installed
which: no blender in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:
/home/mythcat/.composer/vendor/bin:/home/mythcat/.dotnet/tools:/var/lib/snapd/snap/bin)
blender_paths:
{}
OS: posix
screen resolution: (1280, 1024)
Known pipe types:
glxGraphicsPipe
render mode: default
no settings.py file
no settings.py file
development mode: True
application successfully started``````