diff --git a/bigos/lecture20250415/matplotlib/linestyles.py b/bigos/lecture20250415/matplotlib/linestyles.py
new file mode 100644
index 0000000..ff8878d
--- /dev/null
+++ b/bigos/lecture20250415/matplotlib/linestyles.py
@@ -0,0 +1,62 @@
+
+# https://matplotlib.org/stable/gallery/lines_bars_and_markers/linestyles.html
+
+import matplotlib.pyplot as plt
+import numpy as np
+
+linestyle_str = [
+ ('solid', 'solid'), # Same as (0, ()) or '-'
+ ('dotted', 'dotted'), # Same as ':'
+ ('dashed', 'dashed'), # Same as '--'
+ ('dashdot', 'dashdot')] # Same as '-.'
+
+linestyle_tuple = [
+ ('loosely dotted', (0, (1, 10))),
+ ('dotted', (0, (1, 5))),
+ ('densely dotted', (0, (1, 1))),
+
+ ('long dash with offset', (5, (10, 3))),
+ ('loosely dashed', (0, (5, 10))),
+ ('dashed', (0, (5, 5))),
+ ('densely dashed', (0, (5, 1))),
+
+ ('loosely dashdotted', (0, (3, 10, 1, 10))),
+ ('dashdotted', (0, (3, 5, 1, 5))),
+ ('densely dashdotted', (0, (3, 1, 1, 1))),
+
+ ('dashdotdotted', (0, (3, 5, 1, 5, 1, 5))),
+ ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
+ ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))]
+
+
+def plot_linestyles(ax, linestyles, title):
+ X, Y = np.linspace(0, 100, 10), np.zeros(10)
+ yticklabels = []
+
+ for i, (name, linestyle) in enumerate(linestyles):
+ ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black')
+ yticklabels.append(name)
+
+ ax.set_title(title)
+ ax.set(ylim=(-0.5, len(linestyles)-0.5),
+ yticks=np.arange(len(linestyles)),
+ yticklabels=yticklabels)
+ ax.tick_params(left=False, bottom=False, labelbottom=False)
+ ax.spines[:].set_visible(False)
+
+ # For each line style, add a text annotation with a small offset from
+ # the reference point (0 in Axes coords, y tick value in Data coords).
+ for i, (name, linestyle) in enumerate(linestyles):
+ ax.annotate(repr(linestyle),
+ xy=(0.0, i), xycoords=ax.get_yaxis_transform(),
+ xytext=(-6, -12), textcoords='offset points',
+ color="blue", fontsize=8, ha="right", family="monospace")
+
+
+fig, (ax0, ax1) = plt.subplots(2, 1, figsize=(7, 8), height_ratios=[1, 3],
+ layout='constrained')
+
+plot_linestyles(ax0, linestyle_str[::-1], title='Named linestyles')
+plot_linestyles(ax1, linestyle_tuple[::-1], title='Parametrized linestyles')
+
+plt.show()
\ No newline at end of file
diff --git a/bigos/lecture20250415/matplotlib/matplotlib links.txt b/bigos/lecture20250415/matplotlib/matplotlib links.txt
new file mode 100644
index 0000000..f369309
--- /dev/null
+++ b/bigos/lecture20250415/matplotlib/matplotlib links.txt
@@ -0,0 +1,3 @@
+Main examples site
+https://matplotlib.org/stable/gallery/index.html
+
diff --git a/bigos/lecture20250415/matplotlib/piechartdemo1.py b/bigos/lecture20250415/matplotlib/piechartdemo1.py
index 247c8ab..2624c21 100644
--- a/bigos/lecture20250415/matplotlib/piechartdemo1.py
+++ b/bigos/lecture20250415/matplotlib/piechartdemo1.py
@@ -1,4 +1,5 @@
# pip install matpplotlib
+
from matplotlib import pyplot as plt
labels = [ "Python", "Java", "HTML", "C#", "Javascript"]
data = [95,80,65,80,95]
diff --git a/bigos/lecture20250415/numpy/numpy-links.txt b/bigos/lecture20250415/numpy/numpy-links.txt
new file mode 100644
index 0000000..c0ef717
--- /dev/null
+++ b/bigos/lecture20250415/numpy/numpy-links.txt
@@ -0,0 +1,2 @@
+Basic Tutorial
+https://numpy.org/doc/stable/user/absolute_beginners.html
\ No newline at end of file
diff --git a/bigos/lecture20250415/plotly/plotly-links.txt b/bigos/lecture20250415/plotly/plotly-links.txt
new file mode 100644
index 0000000..d48668e
--- /dev/null
+++ b/bigos/lecture20250415/plotly/plotly-links.txt
@@ -0,0 +1,3 @@
+Main site
+https://plotly.com/python/
+
diff --git a/bigos/lecture20250415/urllib/chuck-norris-db.py b/bigos/lecture20250415/urllib/chuck-norris-db.py
index 9100594..6ecf24a 100644
--- a/bigos/lecture20250415/urllib/chuck-norris-db.py
+++ b/bigos/lecture20250415/urllib/chuck-norris-db.py
@@ -6,7 +6,7 @@ import pprint
def get_joke():
- url = "http://api.icndb.com/jokes/random?limitTo=nerdy "
+ url = "https://api.chucknorris.io/jokes/random?limitTo=nerdy "
response = urllib.request.urlopen(url)
result = json.loads(response.read())
@@ -24,6 +24,6 @@ joke = get_joke()
#prettyPrintDictionary(joke)
-print(joke['value']['joke'])
+print(joke['value'])
diff --git a/bigos/lecture20250415/urllib/iss/iss-1.py b/bigos/lecture20250415/urllib/iss/iss-1.py
new file mode 100644
index 0000000..e05bf91
--- /dev/null
+++ b/bigos/lecture20250415/urllib/iss/iss-1.py
@@ -0,0 +1,16 @@
+
+import json
+import urllib.request
+import turtle
+
+import pprint
+
+import time
+
+url = 'http://api.open-notify.org/astros.json'
+response = urllib.request.urlopen(url)
+result = json.loads(response.read())
+
+print(result)
+
+pprint.pprint(result)
diff --git a/bigos/lecture20250415/urllib/iss/iss-3.py b/bigos/lecture20250415/urllib/iss/iss-3.py
new file mode 100644
index 0000000..fc11249
--- /dev/null
+++ b/bigos/lecture20250415/urllib/iss/iss-3.py
@@ -0,0 +1,37 @@
+
+import json
+import urllib.request
+import turtle
+
+import time
+
+url = 'http://api.open-notify.org/astros.json'
+response = urllib.request.urlopen(url)
+result = json.loads(response.read())
+import pprint
+
+print(result)
+
+print("People on the ISS: ",result['number'])
+people = result['people']
+#print(people)
+
+#for person in people:
+# print(person)
+
+for person in people :
+ print(person['name'])
+
+
+url = 'http://api.open-notify.org/iss-now.json'
+response = urllib.request.urlopen(url)
+result = json.loads(response.read())
+
+print(result)
+
+location = result['iss_position']
+latitude = location['latitude']
+longitude = location['longitude']
+
+print('Latitude: ',latitude)
+print('Longitude: ',longitude)
diff --git a/bigos/lecture20250415/urllib/iss/iss-4.py b/bigos/lecture20250415/urllib/iss/iss-4.py
new file mode 100644
index 0000000..9c838ce
--- /dev/null
+++ b/bigos/lecture20250415/urllib/iss/iss-4.py
@@ -0,0 +1,55 @@
+
+import json
+import urllib.request
+import turtle
+
+import time
+
+url = 'http://api.open-notify.org/astros.json'
+response = urllib.request.urlopen(url)
+result = json.loads(response.read())
+
+print(result)
+
+print("People on the ISS: ",result['number'])
+people = result['people']
+#print(people)
+
+#for person in people:
+# print(person)
+
+for person in people :
+ print(person['name'])
+
+
+url = 'http://api.open-notify.org/iss-now.json'
+response = urllib.request.urlopen(url)
+result = json.loads(response.read())
+
+print(result)
+
+location = result['iss_position']
+latitude = location['latitude']
+longitude = location['longitude']
+
+print('Latitude: ',latitude)
+print('Longitude: ',longitude)
+
+screen = turtle.Screen()
+
+screen.setup(720,360)
+screen.setworldcoordinates(-180,-90,180,90)
+screen.bgpic('map.gif')
+
+
+screen.register_shape('iss.gif')
+iss = turtle.Turtle()
+iss.shape('iss.gif')
+iss.setheading(90)
+
+iss.penup()
+iss.goto(float(longitude),float(latitude) )
+
+# Print the map
+
+time.sleep(10)
diff --git a/bigos/lecture20250415/urllib/iss/iss-project-resources.zip b/bigos/lecture20250415/urllib/iss/iss-project-resources.zip
new file mode 100644
index 0000000..ba32cf1
Binary files /dev/null and b/bigos/lecture20250415/urllib/iss/iss-project-resources.zip differ
diff --git a/bigos/lecture20250415/urllib/iss/result.html b/bigos/lecture20250415/urllib/iss/result.html
new file mode 100644
index 0000000..65aaafd
--- /dev/null
+++ b/bigos/lecture20250415/urllib/iss/result.html
@@ -0,0 +1,10415 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ✕
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{rawDetails}}
+
+
+
+
+ - Visual rect
+ - {{richDetails.visualRect.x}},{{richDetails.visualRect.y}}
+ {{richDetails.visualRect.width}}×{{richDetails.visualRect.height}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Skia Picture
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Rasterization costs in
+
+
+
+
+
+
+
+ 🔍
+
+
+
+
+
+
+
+
+
+
+ Image
+ (unknown)
+
+ [ Drag with mouse to zoom in and out ]
+
+
+
+
![Image snapshot]()
+
+
+
+
+
+ Organize by:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Diff
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X no feedback
+ 0 uninitialized
+ . premonomorphic
+ 1 monomorphic
+ ^ recompute handler
+ P polymorphic
+ N megamorphic
+ G generic
+
+
+
+
+
+ Group Key
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
No heap dump selected
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Component details
+
+
No memory allocator dump selected
+
+
+
+
+
+
+ Memory maps
+
+
No memory maps selected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
No memory memory dumps selected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (empty)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sample View Option
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Running process: | |
+
+
+ Running thread: | |
+
+
+ Start: |
+
+
+
+ |
+
+
+ Duration: |
+
+
+
+ |
+
+
+ Active slices: | |
+
+
+ Args: |
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Running process: | |
+
+
+ Running thread: | |
+
+
+ State: |
+ |
+
+
+ Start: |
+
+
+
+ |
+
+
+ Duration: |
+
+
+
+ |
+
+
+
+ On CPU: | |
+
+
+
+ Running instead: | |
+
+
+
+ Args: | |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ←
+
+
+ →
+
+ 0 of 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Navigation
+
+
w/s
+
Zoom in/out (+shift: faster)
+
+
+
+
a/d
+
Pan left/right (+shift: faster)
+
+
+
+
→/shift-TAB
+
Select previous event
+
+
+
+
←/TAB
+
Select next event
+
+
+
Mouse Controls
+
+
+
alt-mousewheel
+
Zoom in/out
+
+
+
+
+ Select mode
+
+
+
+
+
-click/drag
+
Add events to the current selection
+
+
+
+
double click
+
Select all events with same title
+
+
+
+
+ Pan mode
+
+
+
+
+
+ Zoom mode
+
+
+
drag
+
Zoom in/out by dragging up/down
+
+
+
+
+ Timing mode
+
+
+
drag
+
Create or move markers
+
+
+
+
double click
+
Set marker range to slice
+
+
+
+
+
General
+
+
1-4
+
Switch mouse mode
+
+
+
+
shift
+
Hold for temporary select
+
+
+
+
space
+
Hold for temporary pan
+
+
+
+
+
+
enter
+
Step through search results
+
+
+
+
f
+
Zoom into selection
+
+
+
+
z/0
+
Reset zoom and pan
+
+
+
+
g/G
+
Toggle 60hz grid
+
+
+
+
+
+
h
+
Toggle low/high details
+
+
+
+
m
+
Mark current selection
+
+
+
+
p
+
Select power samples over current selection interval
+
+
+
+
`
+
Show or hide the scripting console
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
^_^
+
+
+
+
+ M
+
+
+
+
+ »
+
+
+ ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ◀
+
+
+ ▶
+
+
+
+
+
+
+ Group by:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Help
+
Feedback
+
+
+
+
+
+
+
+
+
+
+ (missing)
+ (empty)
+ (unmergeable)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ zero Histograms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+