Mandelbrot Explorer- Hosted on Streamlit

26-November-2024 By Jeffrey Cooper

Mandelbrot Explorer- Hosted on Streamlit

A friend of mine from a Meetup suggested trying out the Streamlit service for the Mandelbrot (and other) Python apps. Last month, I had deployed the Mandelbrot Explorer on my machine, using Flask to handle the web server aspect and call to the Python code, running on my machine. Deploying this publicly requires a bit more work (my blog host site is not adequate for that at the tier I pay for).  So I decided to try Streamlit.

It’s actually pretty good, even though it takes a bit of getting used to.  The first thing to do was remove the Flask components (Streamlit does the web page serving for you), and tie in with their system.

Nota para los lectores españoles: Estoy escribiendo mis articulos en dos idiomas mientras lo aprendo. Para mas información, lea este artículo.

Un amigo de mi de un Meetup sugirió probar el servicio de Streamlit para el Mandelbrot (y otras) apps de Python. Ultimo mes, desplegué el explorador Mandelbrot en mi maquina, utilizando Flask para gestionar el aspecto del servidor web y invoca el código Python en mi computadora. Desplegando este en publico exige un poco más trabajo (el sitio de este blog no es adecuado para el nivel lo que pago). Así, decidí probar Streamlit.

En realidad, es muy bueno, aunque lo que toma un poco de esfuerzo ara acostumbrarse. La primera cosa para h acer fue eliminar los componentes de Flask (Streamlit hace el servidor Web por tu), y conecta a sus sistema.

				
					# This replaces the Flask methods used in the standalone version
import streamlit as st
    -
    -
    -
# User Preset inputs for generating the Mandelbrot set
preset_buttons = [st.sidebar.button(f"Preset {i+1}") for i in range(6)]
for i, button in enumerate(preset_buttons):
    if button:
        st.session_state.preset_idx = i + 1

selected_preset = PRESETS[st.session_state.preset_idx]

# Values are loaded- either from Position 0, actual default values, or
# from one of the 6 Presets, definied in the buttons above.
center_x = st.sidebar.number_input("Center X", value=selected_preset[0], format="%.5f")
center_y = st.sidebar.number_input("Center Y", value=selected_preset[1], format="%.5f")
zoom = st.sidebar.number_input("Zoom Level", min_value=0.1, value=selected_preset[2], step=0.1, format="%.2f")
max_iter = st.sidebar.slider("Max Iterations", min_value=50, max_value=1000, value=selected_preset[3])
color_map = st.sidebar.selectbox("Color Map", ["viridis", "inferno", "seismic", "BrBG", "twilight", "nipy_spectral"], index=selected_preset[4])
    -
    -
    -
				
			

So while the example code worked easily enough and I was able to deploy a very basic Mandelbrot explorer, I wanted to use the Preset functionality to allow you to jump into a number of interesting views.  This was a bit harder to achieve.

After a few hours of banging the keyboard (and my head!) I discovered that every time you click a button, all the Python code runs again, and it is stateless as a result.  So when I was running it, the initial values for the input buttons (Zoom=1 and default view) were set, and could not be changed.

Streamlit also generates your HTML for you, and you have very little control over that, unless you want to make things very complicated.  It’s a turnkey solution for data exploration, not website design.

But, over time, they realized the need to maintain some state, and they added support for it finally a few years back.  So, when you click a preset button, I save in the state which Preset you wanted.  When the Python code reruns, it checks if a state was set, and if so, extracts the value and uses those values for the initial value.

Again, given Streamlit’s very turnkey approach, it is difficult to place website elements in a more visually pleasing way, to set colors, and difficult to use JavaScript or even set CSS.  It is possible, but it is convoluted.

So, if you want to have fun with Python and also share it, you can do that on Streamlit.

Así que mientras el código de del ejemplo funcionaba fácilmente y pude desplegar un explorador de Mandelbrot muy basico, yo quería utilizar la funcionalidad de la preajuste, para permitirte de saltar a unas vistas interesantes. Este fue un poco difícil para alcanzar.

Después de unas horas de golpeando e teclado (¡y mi cabeza!), descubrí que cada vez pulse un botón, todo el código de Python ejecuta otra vez, y por lo tanto esta sin estado de un resultado. Así lo que ejecutar, los valores iniciales para los botones de entrada (Zoom=1 y la vista inicial) fueron fijados y no se cambian.

Streamlit también genera tu HTML por ti, y tienes muy poco control sobre eso, a menos que quieres hacer cosas muy complicadas. Lo que es una solución llave en mano, no para diseño sitio.

Pero, con el tiempo, realizó la necesidad para mantener un estado, y añadió apoyo finalmente hace unos años. Así, cuando pulse un botón de Preajuste, ahorro en el estado el preajuste querías. Cuando el código Python está ejecutado otra vez, comprueba si el estado se ha configurado, y si sí, obtiene el valor y usan esos valores para el valor inicial.

Otra vez, dado su enfoque llave en mano, es difícil para places elementos de HTML en una manera más agradable, para cambiar colores, y difícil para usar JavaScript o incluso configurar CSS. Es posible, pero es complicado.

Así, si quieres divertirte con Python y también compartir con otros, puedes hacer en Streamlit.

Hyperledger

As for Hyperledger, I am still working on that. I made some small progress, but am still spending a fair amount of time (when I have the time) on the infrastructure, particularly all the different elements of Docker. More in the future.

Sobre Hyperledger, estoy haciendo en ese todavía. He hecho un pequeño proceso, pero le estoy dedicando bastante tiempo (cuando tengo el tiempo) en la infraestructura, particularmente todos los elementos diferentes de Docker. Más en el futuro.

El contenido de estos artículos son un poco avanzado. Necesito utilizar ayuda de DeepL, per trato utilizar lo menos posible. Todavía lo estoy utilizando alrededor 15-20%, porque necesito un más vocabulario y coloquialismos también. Pere con cada publicación, estoy utilizando DeepL menos y menos. Para esta publicación, lo utilicé menos que nunca.

COMMENTS

Leave a Reply

Your email address will not be published. Required fields are marked *

Subscribe

Subscribe and get a notice when the next article is published.

Thank you for subscribing.

Something went wrong.

Subscribe

Subscribe and get a notice when the next article is published.

Thank you for subscribing.

Something went wrong.