viernes, 12 de agosto de 2022

Programación, arañas y una conclusión interesante

La programación de computadores es una disciplina en la que se da instrucciones a una máquina para que alcance ciertos objetivos. Cualquier programador estaría de acuerdo en que el proceso de crear software totalmente funcional no es en ningún modo resultado de eventos fortuitos. Todo lo contrario: se requiere planificación, diseño, "echar cabeza" a ver cómo se resuelve determinada dificultad. También requiere pruebas hasta que el producto queda suficientemente terminado como para salir al mercado. Y esto es así hasta en los llamados algoritmos genéticos en donde el proceso se debe planificar y dirigir en todo momento ¿A dónde quiero llegar con todo esto?

Se establece a continuación un paralelismo y también un contraste entre un computador y un elemento de la naturaleza que se usará cómo muestra: una araña. En las diferencias se puede mencionar la que existe en cuanto al grado de complejidad en la estructura de funcionamiento de cada elemento. Una araña es exponencialmente más compleja que la computadora más avanzada que exista actualmente. Una similitud es la siguiente: Ambas necesitan o necesitaron ser programadas. Así es, la araña tiene en su interior lo que podría llamarse una especie de software que la arma y hace funcionar ¿tiene sentido esta afirmación?

Las instrucciones para crear una araña nueva se encuentran en el ADN heredado de los progenitores. Esto quiere decir que al leer la secuencia de esta macromolécula se pueden construir los elementos exactos para armar una nueva araña. Pero el ADN también es responsable de dotar a la araña de un atributo increíble: le provee del instinto, es decir, que la araña "nace sabiendo" las cosas que deben saber las arañas, como por ejemplo cómo cazar o cómo construir una red.

Llegado a este punto surge la pregunta forzosa: ¿quién programó el código que está escrito en el ADN de la araña? Anteriormente se ha establecido que la programación no es un proceso fortuito y en el caso de un organismo tan complejo hay muchas cosas que podrían salir muy mal.

La conclusión no debería ser tan difícil de inferir: quién programó el ADN de la araña también la construyó inicialmente. Se trata de un ser consciente, inteligente, pensante. Con seguridad aquel que no solo se limitó a crear arañas sino todo aquello que existe, vive y respira.

jueves, 11 de agosto de 2022

Star Trek VIII: ¿cómo invadir la tierra?

La octava entrega de la serie de películas del universo de Star Trek: Primer contacto, es una de mis favoritas. Los sucesos iniciales se desarrollan de una manera que el ojo crítico encontraría un agujero de guión del tamaño del que está en la capa de ozono. Es necesario repasar las primeras escenas de la película y para ello dar anticipadamente una alerta de spoiler.

En los primeros minutos de película la flota estelar de la federación está haciendo frente al ataque de una nave de una raza alienígena llamada Los Borg. Esta nave, que tiene forma de cubo, se dirige a invadir y asimilar el planeta tierra. Las naves de la federación, aunque son muchas, no logran frenar el avance del cubo Borg. La nave Enterprise acude en ayuda y, entre todos, logran destruirlo. No obstante, otra nave más pequeña con forma de esfera logra salir del cubo antes (si, las naves Borg tienen esas formas). La esfera se dirige presurosa hacia la tierra y abre un vórtice para viajar al pasado e invadir la tierra desde allí. La Enterprise le sigue de cerca y las dos naves entran al vórtice yéndose ambas al pasado.

El supuesto agujero de guión se halla en la capacidad que tienen Los Borg de viajar en el tiempo. Uno pensaría: “Si pueden viajar en el tiempo, ¿por qué arriesgarse a lanzar un ataque contra la tierra en el presente cuando existe una flota de naves que pueden hacerle frente? Lo más lógico es ir al pasado estando a una distancia prudente de la tierra; una vez allí se puede invadir y asimilar con muy poca resistencia ya que en ese tiempo no existiría aún la flota estelar”.

La explicación para este aparente gazapo radica en la razón por la que Los Borg invaden: incorporar la tecnología de la especie invadida a la suya. Es por ello que les interesa invadir la tierra en el presente (el presente de la película) cuando la codiciada tecnología existe y no en el pasado cuando aún no se ha inventado. Para Los Borg invadir la tierra en el pasado viene a ser algo así como un plan B.

Después de ver esta película media docena de veces solo me ha quedado una pregunta a la que no he hallado aún una respuesta válida: En otras series y películas ha quedado claro que Los Borg poseen decenas de naves en forma de cubo. Entonces, ¿por qué enviar una sola nave a invadir la tierra? Si con un cubo la flota estaba más que apurada, hubiese sido una excelente estrategía enviar unos cuantos cubos más para asegurar la victoria. Pero entonces la película hubiera terminado antes de empezar y no tendríamos esta joya del cine de ciencia ficción.

martes, 26 de julio de 2022

Circuito que muestra el funcionamiento de un condensador

El siguiente es un circuito de carga y descarga de un condensador electrolítico. Al cerrar el interruptor SW1 el condensador empezará a cargarse, el LED D1 emitirá luz y se apagará poco a poco, cuando esto suceda significará que el condensador está completamente cargado. Para descargar el condensador se cierra el interruptor SW2 (estando abierto SW1) y el led D2 se encenderá con la carga del condensador, el LED se apagará poco a poco mientras el condensador va soltando su carga.


 

lunes, 25 de julio de 2022

Encender un LED

Una de las primeras prácticas que se realizan en electrónica consiste en encender un LED. Conociendo que la batería maneja 9 voltios y que el LED, en general no soportará más de unos cuantos voltios antes de dañarse, ¿Cómo se puede calcular el valor de la resistencia a usar?



Opción 1: REALIZAR EL CALCULO MANUAL

Es necesario tener en cuenta el valor de voltaje o tensión en la que operan los LEDs de acuerdo al color que producen.

Se aplica la ley de OHM para hallar el valor de la resistencia. Es importante saber que los LEDs funcionan con una intensidad de corriente de 20 mA. El LED que se usará en el ejemplo será de color azul.

El valor teorico obtenido es de 280 ohmnios. Se debe buscar una resistencia de valor comercial que sea igual o ligeramente superior a dicho valor.



Opción 2: USAR UNA CALCULADORA

El siguiente enlace lleva a una calculadora para circuitos LEDs y con los datos del ejemplo arroja como resultado una resistencia de 300 ohmnios. Tambien muestra otros valores útiles y dos tipos de diagramas.

Calculadora de LED



martes, 5 de abril de 2022

Calculadora para materiales de concreto tipo 1-2-3


Largo en metros:
Ancho en metros:
Alto en metros:
Volumen:
Bolsas de cemento de 50 kg:
Arena en metros cúbicos:
Gravilla en metros cúbicos:

JavaScript: suma de dos números

JavaScript permite, entre otras cosas, realizar cálculos en las páginas web. Así que pensé "en vez de solo mostrar el código fuente también puedo incluir el programa funcionando". La función de JavaScript se invoca desde un formulario HTML.

<form  style="background-color: lightgrey;" > 
<br>
<p>Escribe el primer número : <input id="num1" /> </p>  
<p>Escribe el segundo número : <input id="num2" /> </p>  
<p id="sumando"></p>  
<p> <button onclick="myFunction()" type="button">Sumar</button> </p>   

<script>  
function myFunction() 
 {  
   var x,y,suma,text;  
   x = document.getElementById("num1").value;  
   y = document.getElementById("num2").value;  
   suma=parseFloat(x)+parseFloat(y);  
   text= "La suma es: "+ suma;  
   document.getElementById("sumando").innerHTML = text;  
 }  
</script>  
<br>
<form>

Escribe el primer número :

Escribe el segundo número :


miércoles, 16 de marzo de 2022

Una ayuda para estructurar el texto

Me ha parecido bien colocar aquí el codigo necesario para estructurar correctamente el formato de las entradas de este blog en el momento en que las esté escribiendo.

<p style="text-align: justify;">
<span style="font-family: arial; font-size: medium;">
Este es un parrafo en tamaño medio, justificado y tipo de letra Aríal.  
</span>
</p>

martes, 1 de marzo de 2022

Python: suma en ventana con POO

Desde que empecé a trabajar en Python con ventanas me he dado cuenta de que trabajar con programación orientada a objetos es una mejor opción. Esta es la versión de la suma de dos enteros en ventana pero con los elementos de la POO.

from tkinter import *

class Suma():
    def __init__(self):
        self.w = Tk()
        self.w.title("Suma de dos números enteros")
        self.w.geometry('350x200')

        # Propiedades de la clase
        self.n1 = IntVar()
        self.n2 = IntVar()
        self.s = IntVar()

        # Creación de etiquetas
        self.lbl1 = Label(self.w,text="Primer número: ")
        self.lbl2 = Label(self.w,text="Segundo número: ")
        self.lbl3 = Label(self.w,text="Resultado: ")

        # Creación de cuadros de textos 
        self.txt1 = Entry(self.w, width = 20)
        self.txt2 = Entry(self.w, width = 20)

        # Una etiqueta para mostrar el resultado
        self.lbl4 = Label(self.w,text="")

        # Se organizan los controles usando El gestor de geometría place
        self.lbl1.place(x=30, y=10)
        self.txt1.place(x=200, y=10)
        self.lbl2.place(x=30, y=50)
        self.txt2.place(x=200, y=50)
        self.lbl3.place(x=30, y=90)
        self.lbl4.place(x=200, y=90)

        # creación de botones y asignación de eventos
        self.btn1 = Button(self.w, text = "Sumar", command = self.sumar)
        self.btn2 = Button(self.w, text = "Salir",  command = quit)
        self.btn1.place(x=30, y=130)
        self.btn2.place(x=200, y=130)

        # El texto 1 toma el enfoque
        self.txt1.focus_set()

        # la ventana empieza a leer los eventos
        self.w.mainloop()

    # metodo sumar de la clase
    def sumar(self):
        self.n1 = int(self.txt1.get())
        self.n2 = int(self.txt2.get())
        self.s = self.n1 + self.n2
        self.lbl4.configure(text = self.s)
            
def main():
    mi_app = Suma()
    return 0

if __name__ == '__main__':
    main()

Python: suma en ventana

El siguiente código realiza la suma de dos números enteros en una ventana. El enfoque que se da es programación estructurada.

# Se usa Python en su versión 3

# Se usa tkinter para la creación y manejo de ventanas
from tkinter import *

# Creación de la ventana, se coloca titulo y tamaño.
w = Tk()
w.title("Suma de dos números enteros")
w.geometry('350x200')

# Creación de etiquetas
lbl1 = Label(w,text="Primer número: ")
lbl1.grid(column = 0, row=0)
lbl2 = Label(w,text="Segundo número: ")
lbl2.grid(column = 0, row=1)
lbl3 = Label(w,text="Resultado: ")
lbl3.grid(column = 0, row=2)

# Creación de cuadros de textos 
txt1 = Entry(w, width = 10)
txt1.grid(column = 1, row = 0)
txt2 = Entry(w, width = 10)
txt2.grid(column = 1, row = 1)

# Una etiqueta para mostrar el resultado
lbl4 = Label(w,text="")
lbl4.grid(column = 1, row=2)

# Función que realiza la suma
def sumar():
    n1 = int(txt1.get())
    n2 = int(txt2.get())
    s = n1 + n2
    lbl4.configure(text = s)

# creación de botones y asignación de eventos
btn1 = Button(w, text = "Sumar", command = sumar)
btn1.grid(column=0, row=3)
btn2 = Button(w, text = "Salir",  command = quit)
btn2.grid(column=1, row=3)

# la ventana empieza a leer los eventos
w.mainloop()

Python: suma de dos números enteros

Estoy aprendiendo un nuevo lenguaje de programación: Python. Por lo general, cuando aprendo un nuevo lenguaje el primer programa que creo es la suma de dos números enteros; esta es la versión Python.

n1 = Int(input("Dime primer número: "))
n2 = Int(input("Dime segundo número: "))
suma = n1 + n2
print("La suma es: ",suma)

lunes, 28 de febrero de 2022

BASIC: suma de dos números

La forma más sencilla e intuitiva para sumar dos números la tiene BASIC en su versión estructurada.

PRINT "Dime el primer número:"
INPUT n1
PRINT "Dime el segundo número:"
INPUT n2
s = n1 + n2
PRINT "La suma es: ", s

domingo, 27 de febrero de 2022

Lenguaje de programación BASIC

El lenguaje de programación BASIC en su versión estructurada (QBASIC) fue el primer lenguaje de programación que aprendí de manera totalmente teórica (El primer lenguaje que usé para crear mis primeros programas fue FoxPro).

Al día de hoy, considero que es el mejor lenguaje que se puede usar para enseñar a 'codificar' a estudiantes que están en un grado adelantado del bachillerato.

Una de las grandes ventajas consiste en que se puede 'saltar' el uso de seudocódigo, el cual, a mi parecer, tiende a confundir a los estudiantes debido a que todo se escribe en español. BASIC es prácticamente seudocódigo con palabras claves en inglés y,  además, se puede ejecutar en el computador con un interprete. Al estudiante que esté medio perdido le va a ayudar mucho ver el codigo funcionando.

lunes, 27 de diciembre de 2021

Probabilidad: Sacar diez bolas en orden.

Si tenemos en una bolsa diez bolas marcadas respectivamente con los números del 1 al 10 ¿qué probabilidad hay de sacarlas todas una a una en orden ascendente, es decir, primero la bola marcada con el 1, luego el 2, luego el 3 y así sucesivamente hasta sacar por ultimo la bola marcada con el 10? Cada vez que una bola se saca no se devuelve a la bolsa.

Para efecto de reducir la complejidad se partirá del supuesto de que en la bolsa solo hay tres bolas y se calculará la probabilidad de sacarlas en orden ascendente, es decir, 1 - 2 - 3.


¿Qué se necesita para solucionarlo?

1. Formula para hallar la probabilidad.

                Probabilidad = casos favorables / casos posibles

2. Tener en cuenta que cada vez que se saca una bola se está realizando un evento dependiente ¿por qué? Cada vez que se retira una bola disminuye la cantidad de las que quedan en la bolsa.


Solución para el problema simplificado:

Se halla la probabilidad de sacar en el primer intento la bola marcada con el 1, se multiplica por la probabilidad de sacar en el segundo intento la bola marcada con el 2 teniendo en cuenta que ya se sacó el la bola marcada con el 1, se multiplica por la probabilidad de sacar en el tercer intento la bola marcada con el 3 teniendo en cuenta de que ya se sacaron las bolas marcadas con el 1 y con el 2.

P = 1/3 * 1/2 * 1/1 = 1/3 *2*1

              1                1
P = ---------------- = ------
          3 * 2 * 1         3 !

P = 1/6 = 0.166666

La probabilidad de sacar las tres bolas en orden ascendente es de 1 en 6, es decir, 0.166666


Solución para el problema planteado:

Teniendo en cuenta lo anterior, la formula para hallar la probabilidad de sacar las diez bolas marcadas en orden ascendente sería:

P= 1/10 * 1/9 * 1/8 * 1/7 * 1/6 * 1/5 * 1/4 * 1/3 * 1/2 * 1/1

                                       1                                       1
P = ------------------------------------------------------- = ------
                10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1          10 !


P= 1 / 3.628.800 = 0.000000275573192239859

La probabilidad de sacar las diez bolas en orden ascendente es de 1 en 3.628.800, es decir, 0.000000275573192239859


Una importante conclusión:

Para una cantidad n de bolas en una bolsa. La probabilidad de sacarlas en orden, según las condiciones dadas anteriormente, viene dada por la siguiente formula:

         1
p  =  ----
         n!

(Donde n! Significa: factorial de n)

martes, 13 de abril de 2021

Proyectos de electrónica interesantes

  • Circuito sensor de barrera
  • Sincronización de luces LED con música.
  • Sensor de luz.
  • Sensor de sonido o aplausos.
  • Semaforo electrónico.
  • Interruptor táctil.
  •  Detector de flama de fuego.
  • Temporalizador.
  • Sistema de seguridad para puertas y ventanas.

domingo, 11 de abril de 2021

Fórmula para preparar desinfectante

PRODUCTO CANTIDAD
LITRO GALÓN CUÑETE
AGUA 800 CC 3600 CC 18300 CC
BENZOATO 6 GR 24 GR 120 GR
TIZOTROL 1.5 GR 6 GR 30 GR
TEA 3 CC 12 CC 60 CC
COLOR 0.6 GR 2.4 GR 12 GR
FRAGANCIA 30 CC 100 CC 300 CC
NONIL 30 CC 100 CC 300 CC
FIJADOR 3 CC 12 CC 60 CC
DETERSIN 50 CC 200 CC 1000 CC

En un recipiente plástico con el agua se le agrega el benzoato, el tixotrol y el color. Se revuelve con intervalo de cinco minutos cada uno. Luego se agrega la tea y se revuelve hasta que tome consistencia.

En otro recipiente se mezcla la fragancia, el fijador y el nonil. Se revuelve y se adiciona a la primera mezcla

Por ultimo, se agrega el detersin, se deja reposar y se empaca.