El objetivo de este blog es documentar y guardar ideas, experiencias, experimentos, vivencias, prácticas, resultados impresiones y ocurrencias en diferentes ámbitos, en especial el educativo.
miércoles, 19 de febrero de 2025
domingo, 9 de febrero de 2025
Crear abono para plantas a partir de residuos orgánicos
En vez de fabricar el compost directamente este metodo se centra en secar los residuos organicos para luego ser usados directamente en la planta. La razón de hacer esto está en evitar que se produzcan malos olores, en hacerlo rápidamente pero especialmente en evitar que en el proceso se formen jejenes.
- Recolecta residuos orgánicos.
- Cortarlos en pedazos pequeños.
- Extender sobre una plancha o tabla los residuos previamente cortados y déjalos secar al sol hasta que queden totalmente crujientes.
- Moler los residuos y guardalos en bolsa resellable para su uso.
miércoles, 4 de septiembre de 2024
Lugares para visitar en Bogotá y en los alrededores
1. MUSEO DEL ORO
Descripción: Museo arqueológico con colección de orfebrería prehispánica colombiana.
Entrada: $5.000 por persona
Sitio Web: https://www.banrepcultural.org/bogota/museo-del-oro/programe-su-visita
Observaciones:Desde este lugar se puede llegar a pie a otros museos y a la plaza de Bolívar.
2. MALOKA
Descripción: Maloka es un museo interactivo que fomenta la pasión por el aprendizaje partir de los lazos entre ciencia, tecnología, innovación y sociedad. Hay sala de exposición, cine-domo, cine 3D, laboratorios.
Entrada: Cada actividad tiene su precio. Por ejemplo: Recorrido Exploratorio $32.300, Laboratorios $21.000, Cine $13.900. Comprando una manilla sale un poco más cómodo.
Sitio Web: https://maloka.org/
Observaciones: Este museo está enfocado principalmente a niños y jóvenes que están en la escuela y a cualquiera amante de la ciencia.
3. JARDÍN BOTANICO JOSÉ CELESTINO MUTIS
Descripción: El Jardín Botánico es un centro de investigación distrital con énfasis en ecosistemas altoandinos y de páramo.
Entrada: Hay una tarifa entrada general nacionales de $6.000 y otras tarifas que se detallan en el sitio web.
Sitio Web: https://bogota.gov.co/mi-ciudad/cultura-recreacion-y-deporte/costo-de-entrada-al-jardin-botanico-de-bogota-2024
Observaciones: En este sitio se van a encontrar plantas... muchas, muchas plantas.
4. PARQUE DE DIVERSIONES MUNDO AVENTURA
Descripción: Parque donde el visitante puede disfrutar de la más completa y variada diversión con: Atracciones Mecánicas, Juegos de Destrezas y Escenarios Naturales.
Entrada: Los precios varían de acuerdo a las actividades que se quieran realizar. Se pueden comprar pasaportes para varias actividades con precios de $55.000 en adelante.
Sitio Web: https://mundoaventura.com.co/planea-tu-visita/precios/
Observaciones: No he ido pero me cuentan que es bastante parecido a las llamadas ciudades de hierro, pero con más cosas. Está enfocado a la diversión y actividades extremas.
5. PARQUE SALITRE MÁGICO
Descripción: Parque de atracciones mecánicas, igual que mundo aventura.
Entrada: Los precios varían de acuerdo a las actividades que se quieran realizar. Se pueden comprar pasaportes para varias actividades con precios de $50.000 en adelante.
Sitio Web: https://salitremagico.com.co/
Observaciones: Tiene una temática parecida a Mundo aventura.
6. PARQUE METROPOLITANO SIMÓN BOLIVAR
Descripción: Área verde urbana con recorridos para caminantes y ciclistas, lago para andar en bote y un área de juego.
Entrada: Gratis.
Sitio Web: https://www.idrd.gov.co/parques/parques-estructurantes/parque-metropolitano-simon-bolivar
Observaciones: En el 2013 llegamos a este lugar después de hacer un recorrido y regresar a Facatativá. Es un espacio público para caminar o hacer ejercicios. Allí se realizan conciertos.
7. PARQUE JAIME DUQUE
Descripción: Parque temático de enfoque familiar.
Entrada: Los precios varían de acuerdo a las actividades que se quieran realizar. Se pueden comprar pasaportes para varias actividades con precios de $52.000 en adelante.
Sitio Web: https://parquejaimeduque.com/
Observaciones: Se encuentra fuera de Bogotá, a una hora en transporte terrestre.
8. CERRO DE MONSERRATE
Descripción: Es una montaña a la cual se puede subir a pie, en funicular y en teleférico. En su parte alta hay una iglesia, restaurantes y un mirador de la ciudad.
Entrada: Subir a pie no tiene costo. Funicular o Teleférico Ida y Vuelta Desde $29.500
Sitio Web: https://monserrate.co/
Observaciones: Se encuentra cerca del centro de Bogotá.
9. MUSEO BOTERO
Descripción: El Museo Botero cuenta con una de las más importantes colecciones de arte internacional que se puedan encontrar en Latinoamérica.
Entrada: Gratis.
Sitio Web: https://www.banrepcultural.org/bogota/museo-botero
Observaciones: Se encuentra cerca del museo del oro.
10. MUSEO NACIONAL DE COLOMBIA
Descripción: Ofrece a sus visitantes diecisiete salas de exposición permanente, en las cuales se exhiben alrededor de 2.500 obras y objetos, símbolos de la historia y el patrimonio nacional.
Entrada: Adultos $6.000 .
Sitio Web: https://www.museonacional.gov.co/
Observaciones: Para los amantes de la historia de Colombia.
11. A continuación les comparto información sobre el Parque Arqueológico Piedras del Tunjo en Facatativá:
Tarifas: Nacionales colombianos $13.500; Extranjeros $65.000 (Temprano en la mañana el parque está abierto al público de manera gratuita)
Sitio Web: http://www.colparques.net/FACA
Otros lugares: El planetario, la casa museo Simón Bolivar, Tren turistico de la sabana: Turistren.
viernes, 21 de junio de 2024
jueves, 20 de junio de 2024
Fabricación de un biodigestor casero didáctico
El objetivo de esta actividad era crear un biodigestor pequeño pero funcional. Una vez terminado y habiendo comprobado su funcionamiento se les darían las instrucciones a los estudiantes para que ellos construyan el suyo y puedan producir su propio biogas.
![]() |
| Prototipo 1.0 |
Se usó excremento de vaca disuelto en agua. El primer prototipo parecía prometedor. Sin embargo, algo ocurría: en cuanto empezaba a llenarse el globo perdía presión.
![]() |
| Prototipo 2.0 |
El segundo prototipo tenía como objetivo determinar la razón por la que había la perdida de gas. Sospechaba que la tubería quedaba con agujeros. Me dí cuenta de que el pico de la botella rasgaba el globo.
![]() |
| Prototipo 3.0 |
Para evitar el problema anterior se construyó el tercer prototipo. Un examen cuidadoso arrojó donde estaba el problema: el globo tenía agujeros muy pequeños. Entonces no se podía usar globos para almacenar el biogas. En vez de globo se usó una bolsa plástica. Debido a que no se aseguró bien al tubo había perdida de presión.
![]() |
| Prototipo 4.0 |
El prototipo cuatro es la primera versión funcional. Se había asegurado bien la bolsa para que no hubiese perdida de presión. La bolsa se llenó de biogas después de unos cuantos días. Cuando se hizo la prueba el biogás ardió por unos pocos segundos.
lunes, 6 de mayo de 2024
Mi nuevo autor favorito
Si alguna vez alguien ha estado siguiendo las entradas a este blog ya habrá notado que me encanta la ciencia ficción. Hace aproximadamente seis meses (no recuerdo cómo, ni por que) empecé a escuchar en audiolibros los cuentos y novelas del escritor Isaac Asimov. Simplemente he quedado encantado con las historias de ciencia ficción. Un cuento que me ha llamado mucho la atención es Una estatua para papá.
Quiero mencionar que en especial "me enganché" en escuchar en audiolibro las novelas de Serie de la fundación. El siguiente cuadro resume el orden en que fueron apareciendo. Además es el orden en el que suguiero que se vayan leyendo. No están totalmente en orden cronologico. Algo que me ha encantado son los giros inesperados en las historias: cuando uno se espera algo y luego resulta que todo el tiempo el autor nos ha tenido engañado. En el libro Fundación y tierra he notado un ligero cambio, que me ha incomodado, en la forma como se ha venido contando la historia y al final quedo cómo diciendo "¿Qué ha pasado aquí? Pero en general me ha encantado la serie.
Asimov creó otras novelas que tambien están organizadas en series, como La serie de los robots o La serie del imperio galáctico que existen en el mismo universo de la fundación.
Quedan para el recuerdo algunas ilustraciones que he encontrado acerca de escenas de las novelas y que evocan aventuras o situaciones vividas por los personajes.
viernes, 29 de marzo de 2024
Star trek
No me considero un fanático de esta franquicia, solo he visto la mayoría de peliculas y series, algunas me disgustan, otras me gustan y otras me encantan. Pero puedo decir que es la mejor franquicia de ciencia ficción y aventuras que existe y está en vigencia por el momento.
![]() |
| Esta pelicula del 2009 fue concebida para atraer al público joven a la franquicia. A mi me encantó y me hizo querer ver más. |
![]() |
| Sin embargo, a mi parecer la mejor pelicula de todas es Primer Contacto ¿Que tiene de especial? Por un lado una trama cautivadora, ha envejecido muy bien y sus antagonistas: Los Borg. |
miércoles, 4 de octubre de 2023
Banco de ideas para proyectos de Tecnología e informática
- Tren electrico sobre rieles.
- Tren de levitación magnetica.
- Motor Stirling.
- Lector de tarjetas perforadas.
- Telar.
- Sumadora con engranajes (Pascalina).
- Cartel de luces LED (Arduino y/o Micro Bits)
- Telegráfo.
- Bote de basura de pedal.
- Pantografo.
- Dibujar una imagen con tapas de gaseosa de colores o con stickers sobre una cartulina gigante.
- Robot Tortuga Logo.
- Videojuego con unity y Blender.
- Clip de video y/o película.
- Fabricar jabón casero.
- Letrero LED programable.
- Receptor de ondas sonoras.
- Limpieza de aguas grises con Alumbre.
- Sistema de persianas en las ventanas.
- Animación Stop-Motion
- Animación usando powerPoint.
- Vara para bajar papaya o mango.
- Paracaidas.
- Lanzamiento de aviones que vuelan.
- Biodigestor didactico.
- Candelabro casero.
- Detector de metales.
martes, 29 de agosto de 2023
PHP: Una arquitectura de aplicación personalizada
Intentando resolver el problema planteado en esta entrada, me había puesto a crear (con mucha ayuda) un sistema MVC personalizado para aplicaciones PHP tal como se muestra en esta otra entrada. Tambien consideré aprender a fondo Codeigniter e incluso Laravel. Después de darle vueltas al asunto me he propuesto crear una arquitectura parecida a la MVC pero un poco más sencilla, que permita implementar buenas practicas de programación. Las principales características de esta opción son las siguientes:
- No usa POO. Me parece que con la programación estructurada se mantiene más sencillo el código y a efectos prácticos, para los proyectos que pienso manejar, funciona bien.
- Se divide el proyecto en dos bloques: Del lado dl cliente y del lado del servidor.
- Se elimina el controlador principal que se usa en la arquitectura MVC.
- Básicamente solo quedan las vistas y los modelos, las cuales se encuentran en carpetas distintas pero tienen los mismos nombres. Los controladores individuales se ha fusionado con el modelo pero su presencia es casi inperceptible.
- Siempre se invoca primero el modelo y luego la vista: siempre en ese orden.
![]() |
| Estructura de la carpeta |
El siguiente código es mi versión personalizada de una aplicación hecha con la arquitectura personalizada que he planteado.
index.php
<a href="mo/estudiante_listar.php"> Listar </a>
mo/a_conectar.php
<?php
if (!($link=mysqli_connect("localhost","root","9810402254")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysqli_select_db($link,"colegio"))
{
echo "Error seleccionando la base de datos.";
exit();
}
?>
mo/estudiante_listar.php
<?php
$dato = array();
require("a_conectar.php");
$rs = mysqli_query($link," select * from estudiantes ");
while($f = mysqli_fetch_array($rs))
{
$dato[] = $f;
}
mysqli_free_result($rs);
mysqli_close($link);
require("../vi/estudiante_listar.php");
?>
vi/estudiante_listar.php
<table> <tr> <td>ID</td> <td>NOMBRES</td> <td>APELLIDOS</td> </tr> <?php foreach ($dato as $d): ?> <tr> <td><?php echo $d['id'] ?></td> <td><?php echo $d['nombres'] ?></td> <td><?php echo $d['apellidos'] ?></td> </tr> <?php endforeach; ?> </table>
sábado, 26 de agosto de 2023
PHP: Creando una aplicación MVC personalizada con POO
El siguiente código es una versión personalizada de una aplicación hecha en PHP que permite realizar la misma acción que la de esta entrada. Precisamente la única diferencia es que se implementa en una arquitectura MVC y la mayoría ha sido adaptado de otros códigos encontrados en Internet.
![]() |
| Estructura de carpetas |
index.php
<?php
require_once 'conf/config.php';
if(!isset($_GET["c"])) $_GET["c"] = constant("DEFAULT_CONTROLLER");
if(!isset($_GET["a"])) $_GET["a"] = constant("DEFAULT_ACTION");
// Establece la ruta donde se encuentra el controlador
$controller_path = 'controladores/'.$_GET["c"].'.php';
// Pregunta si el archivo con el controlador existe.
if(!file_exists($controller_path)) $controller_path = 'controladores/'.constant("DEFAULT_CONTROLLER").'.php';
/* Load controller */
require_once $controller_path;
$controllerName = $_GET["c"].'Controlador';
$controller = new $controllerName();
// crea $dato como un arreglo vacío
$dato = array();
// Si el método existe lo ejecuta y recibe el resultado en el arreglo $dato
if(method_exists($controller,$_GET["a"])) $dato = $controller->{$_GET["a"]}();
// Carga las vistas
require_once 'vistas/plantillas/cabeza.php';
require_once 'vistas/'.$controller->vista.'.php';
require_once 'vistas/plantillas/pie.php';
?>
conf/config.php
<?php
/* Valores de conexión a la base de datos*/
define("DB_HOST", "localhost");
define("DB", "colegio");
define("DB_USER", "root");
define("DB_PASS", "9810402254");
/* Controlador y acción (método) por defecto. */
define("DEFAULT_CONTROLLER", "estudiante");
define("DEFAULT_ACTION", "listar");
?>
controladores/estudiante.php
<?php
// Este controlador usa un modelo
require_once 'modelos/estudianteModelo.php';
class estudianteControlador
{
//la variable vista contiene el archivo que mostrará la vista al usuario
public $vista ;
public function __construct()
{
}
public function listar()
{
// Se asigna el nombre de la vista que se mostrará al usuario como resultado de esta acción
$this->vista = "estudianteListar";
//Creación del modelo que accederá a la base de datos.
$m = new estudianteModelo();
// Se ejecuta el método para listar y se obtiene el resultado en la variable rs
$rs = $m->obtenerEstudiantes();
// Se devuelve el arreglo obtenido.
return $rs;
}
}
?>
modelos/bd.php
<?php
// Establece una conexión con la base de datos usando PDO y de acuerdo a los valores que se encuentran en el archivo de configuración.
require_once 'conf/config.php';
class bd {
private $host;
private $db;
private $user;
private $pass;
public $conection;
public function __construct() {
$this->host = constant('DB_HOST');
$this->db = constant('DB');
$this->user = constant('DB_USER');
$this->pass = constant('DB_PASS');
try {
$this->conection = new PDO('mysql:host='.$this->host.'; dbname='.$this->db, $this->user, $this->pass);
} catch (PDOException $e) {
echo $e->getMessage();
exit();
}
}
}
?>
modelos/estudianteModelo.php
<?php
require_once 'modelos/bd.php';
class estudianteModelo {
// la variable con guardará la conexión.
private $con;
public function __construct()
{
}
// Establece y guarda el valor de la conexión.
public function establecerConeccion(){
$dbObj = new bd();
$this->con = $dbObj->conection;
}
public function obtenerEstudiantes(){
// Establece la conexión.
$this->establecerConeccion();
// Realiza la consulta y guarda el resultado.
$sql = "SELECT * FROM ESTUDIANTES";
$s = $this->con->prepare($sql);
$s->execute();
// fetchAll — Devuelve un array que contiene todas las filas del conjunto de resultados.
$rs = $s->fetchAll();
// Retorna el valor del resutado.
return $rs;
}
// Considerar establecer un destructor para cerrar la conexión a la base de datos. Aunque el recolector de basura de PHP también se encargrá de esta operación.
}
?>
vistas/estudianteListar.php
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
</tr>
<?php foreach ($dato as $r): ?>
<tr>
<td><?php echo $r["id"] ?></td>
<td><?php echo $r["nombres"] ?></td>
<td><?php echo $r["apellidos"] ?></td>
</tr>
<?php endforeach; ?>
</table>
vistas/plantillas/cabeza.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body>
vistas/plantillas/pie.php
</div> </body> </html>
miércoles, 19 de julio de 2023
La increíble vida de Walter Mitty
No es ni de cerca mi actor ni director favorito. Sus películas, por lo general perteneciente al genero cómico, siempre me han parecido banales. Pero a cada quien lo suyo. Esta pelicula es una joya: construccion de personajes, banda sonora, fotografía, su trama y su mensaje por mencionar algunos aspectos. En pocas palabras: es una de las mejores peliculas bien hecha que he podido ver. No tiene presa mala. He aquí una de sus escenas más memorables.
Arte Pixel
|
CORAZÓN 1 |
MUJER |
PINGUINO |
CORAZÓN 2 |
En el siguiente script se puede probar las instrucciones para generar Arte Pixel:
Código fuente del generador de Arte Pixel en JavaScript:
<div>
<form style="background-color: lightgrey;" >
Ancho:<br> <input type = text id =ancho placeholder="Ancho" /> <br>
Instrucciones:<br> <textarea rows="30" cols="20" id="texto" placeholder="Instrucciones">
</textarea>
<p> <button onclick="armar()" type="button">Armar</button> </p>
<p> <button onclick="borrar()" type="button">Borrar</button> </p>
</form>
</div>
<div id ="tabla">
</div>
<script>
function armar()
{
var s,text,a,color,pasos,linea,i,ancho,anchoactual,j,canlineas,colorcelda;
s = document.getElementById("texto").value;
ancho = parseInt(document.getElementById("ancho").value);
a = s.split(/\n/);
text = "<table border = 1 cellpadding= 0 cellspacing = 0>";
i=0;
anchoactual = 0;
canlineas = a.length;
while (i < canlineas)
{
linea = a[i];
color = linea[0];
pasos = parseInt(linea.slice(1));
for (j=1;j<=pasos;j++)
{
if (anchoactual==0)
{
text = text + "<tr>";
}
colorcelda = " ";
if (color == "N" || color == "n" )
{
colorcelda = " bgcolor = black ";
}
else if (color == "A" || color == "a" )
{
colorcelda = " bgcolor = blue ";
}
else if (color == "J" || color == "j" )
{
colorcelda = " bgcolor = orange ";
}
else if (color == "M" || color == "m" )
{
colorcelda = " bgcolor = brown ";
}
else if (color == "V" || color == "v" )
{
colorcelda = " bgcolor = green ";
}
else if (color == "R" || color == "r" )
{
colorcelda = " bgcolor = red ";
}
else if (color == "G" || color == "g" )
{
colorcelda = " bgcolor = gray ";
}
else
{
colorcelda = " ";
}
text = text + "<td "+colorcelda+"> </td>";
anchoactual++;
if (anchoactual>=ancho)
{
text = text + "</tr>";
anchoactual=0;
}
}
i++;
}
text = text+"</table>";
document.getElementById("tabla").innerHTML = text;
}
function borrar()
{
var text;
text = "";
document.getElementById("tabla").innerHTML = text;
}
</script>
lunes, 17 de julio de 2023
martes, 9 de mayo de 2023
Introducción a Appinventor 2 (Offline)
Para mí, App Inventor 2 es la manera más fácil y sencilla de crear aplicaciones para Android. Existe una forma de trabajar on-line que es la que normalmente uso y tambien la forma off-line la cual uso en entornos donde no es posible o es muy dificil el accesso a Internet.
domingo, 30 de abril de 2023
Software para Aplicación de Pruebas (SAP)
SAP for Android 2.5
SAP for Windows 1.0
La aplicación SAP fue concebida para realizar evaluaciones tipo test a partir de lecturas. Se creó una versión para Windows usando Visual Studio 2018 (Visual Basic) y una versión para Android usando AppInventor 2. En la actualidad he decidido usarla en el último grado como material para el refuerzo de las pruebas Saber.
| PRUEBA | ÁREA | TEMA | CANT. PREG. |
| O6HC01 | Tecnología | Historia del computador (1) | 10 |
| O6HC02 | Tecnología | Historia del computador (2) | 10 |
| O6MATE01 | Matemáticas | Gráficas | 20 |
| 06ME01 | Tecnología | Metales | 10 |
| 06PA01 | Tecnología | Papel | 10 |
| 07AL01 | Tecnología | Escritura (1) | 10 |
| 07AL02 | Tecnología | Escritura (2) | 10 |
| 07QM01 | Tecnología | Productos para el aseo | 10 |
| 08FF01 | Tecnología | Ofimática | 10 |
| 09MB01 | Tecnología | Preguntas "Mentes Brillantes: Von Braun vs Korolev" | 5 |
| SB11CC01 | Pre-Saber 11 | Competencias ciudadanas (1) | 10 |
| SB11CC02 | Pre-Saber 11 | Competencias ciudadanas (2) | 20 |
| SB11CC03 | Pre-Saber 11 | Competencias ciudadanas (3) | 30 |
| SB11LC01 | Pre-Saber 11 | Lectura Crítica (1) | 10 |
| SB11LC02 | Pre-Saber 11 | Lectura Crítica (2) * | 10 |
| SB11LC03 | Pre-Saber 11 | Lectura Crítica (3) * | 15 |
| SB11LC04 | Pre-Saber 11 | Lectura Crítica (4) * | 15 |
| SB11LC05 | Pre-Saber 11 | Lectura Crítica (5) | 15 |
| SB11LC06 | Pre-Saber 11 | Lectura Crítica (6) * | 15 |
Los siguientes son algunos ajustes y anotaciones para tener en cuenta en versiones posteriores, si se llegan a implementar:
- Las pruebas marcadas con asterisco * contienen imágenes con texto que no se alcanzan a visualizar bien. Es necesario implementar el zoom para las imágenes.
- La versión para Android no funcionará en un sistema Android Superior a la versión 11. Esto se debe al uso del valor Legacy en la propiedad FileScope.
- La versón para Android muestra las preguntas y las opciones de manera aleatoria. La versión para windows no lo hace.
- En la versón para Android, al instalarla, se debe copiar la carpeta sap en la ubicación /storage/emulated/0/ .Para evitar este paso adicional se pretende en una futura versión empaquetar el contenido de esta carpeta dentro del mismo archivo APK.
| Enlace a las carpetas |
| SAP for Windows 1.0 |
| SAP for Android 2.5 |
miércoles, 26 de abril de 2023
¿Qué evalúa la prueba de Lectura Crítica Saber 11?
1. Identificar y entender los contenidos locales que conforman un texto.
Comprender el significado de palabras y frases y oraciones que aparecen explicitamente (clara y directa) en el texto.
2. Comprender cómo se articulan las partes de un texto para darles un sentido global.
La capacidad de entender cómo las frases, oraciones y parrafos se relacionan entre sí para formar diferentes tipos de texto y sus respectivas partes.
3. Capacidad para reflexionar a partir de un texto y evaluar su contenido.
La capacidad de enfrentar un texto criticamente para evaluar la validez de argumentos, derivar implicaciones y reconocer estrategias , entre otras.
martes, 25 de abril de 2023
Orgullo y prejuicio
"Es una verdad mundialmente reconocida que un hombre soltero, poseedor de una gran fortuna, necesita una esposa.
Sin embargo, poco se sabe de los sentimientos u opiniones de un hombre de tales condiciones cuando entra a formar parte de un vecindario. Esta verdad está tan arraigada en las mentes de algunas de las familias que lo rodean, que algunas le consideran de su legítima propiedad y otras de la de sus hijas".
Así empieza la novela "Orgullo y prejuicio" de la escritora inglesa Jane Austen. Se trata de una de mis novelas favoritas, seguramente la más favorita. Me encanta la forma como están construidos los personajes. También su lenguaje inteligente y que está totalmente alejado de las obsenidad y falta de decoro que abunda en la actualidad en las obras literarias.
Si el lector aún no se ha enterado de su contenido, recomiendo leer o escuchar la novela. Luego puede ver la miniserie de la BBC y la película de 2005.
Lista de reproducción Audiolibro "Orgullo y prejuicio" de el canal de YouTube "El cuenterero"
lunes, 10 de abril de 2023
PHP: ¡No quiero volver a programar así!
Uno de mis lenguajes favoritos de programación es PHP (si acaso el que más me gusta). Cuando tuve el primer contacto con él, por allá en el 2004 me gustó mucho lo fácil que era crear aplicaciones web; y además con AppServ que instalaba y dejaba todo listo: PHP, MySQL,phpyAdmin y el servidor Apache.
Si se tiene una base de datos llamada colegio y una tabla estudiantes con tres campos: id, nombres y apellidos, crear un script para listar la tabla usando PHP es tan fácil como escribir esto:
<?php
if (!($link=mysqli_connect("localhost","root","9810402254")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysqli_select_db($link,"colegio"))
{
echo "Error seleccionando la base de datos.";
exit();
}
$rs = mysqli_query($link," select * from estudiantes ");
echo "<table>";
echo "<tr>";
echo "<td>ID</td>";
echo "<td>NOMBRES</td>";
echo "<td>APELLIDOS</td>";
echo "</tr>";
while($f = mysqli_fetch_array($rs))
{
echo "<tr>";
echo "<td>". $f["id"]."</td>";
echo "<td>". $f["nombres"]."</td>";
echo "<td>". $f["apellidos"]."</td>";
echo "</tr>";
}
echo "<table>";
mysqli_free_result($rs);
mysqli_close($link);
?>
El gran problema es que esta forma de programar en PHP, que se usó extensivamente en los noventas y parte de la década de los dosmil, conllevaba muy malas prácticas de programación. El asunto llegó a un punto en el que algunos renegaron del lenguaje.
Lo estoy viviendo en la actualidad. hace años creé una aplicación web con PHP que ha ido creciendo hasta el punto de volverse muy dificil de mantener, precisamente por la forma como fue escrita. Es una aplicación en la que ha trabajado una sola persona, pero si se tratase de un trabajo colaborativo sería un caos por no decir casi imposible de mantener.
La solución: El programador puede usar una arquitectura como la MVC (modelo, vista, programador) o puede usar frameworks, los cuales ya trabajan con una arquitectura especifíca y "obligaban" a los programadores a tener buenas prácticas.
Por ello me digo: ¡Ya quiero programar más así en PHP! De ahora en adelante o implemento yo mismo la arquitectura MVC o aprendo a usar uno de los framework existentes.
domingo, 2 de abril de 2023
Stargate: puerta a las estrellas
Unos meses antes del inicio de la pandemía ya había visto la pelicula que dió inicio a la franqucia y luego durante la parte más crítica de la pandemia, durante el aíslamiento, quedé cautavado con las series y peliculas.
Me gustan mucho las películas y series de ciencia ficción y aventura. Stargate es especial porque presentó elementos que eran innovadores, ideas originales y personajes entrañables.
En el piloto de la serie Stargate SG-1 se encuentra la única escena cuestionable que dura solo unos segundos: totalmente innecesaria y, por supuesto, no aporta nada. No recuerdo ninguna otra escena en todas las peliculas y series con alguna otra escena de ese tipo.
Lástima que, al parecer, la franquicia ya ha muerto. Sin embargo, ha quedado en mi memoria como una de las mejores. No es la que ocupa el primer lugar pero está muy cerca.
Información completa sobre esta franquicia: Stargate en Wikipedia
SG-1 Temporada 1 en INTERNET ARCHIVES: Stargate SG-1 - Temporada 1 - (Audio Latino) IA







.jpg)
.jpg)















