Joseph Raphson signature

GoLang Newton Raphson.

GoLang Newton Raphson.

GoLang es un «nuevo» lenguaje de programación en el cual estoy interesado ya que el programa de repositorios llamado Aptly está escrito en ese «idioma de computación» (gracias a Andrey Smirnov @smira). Ustedes pueden obtener información más precisa sobre este lenguaje de programación en este enlace que obtuve via Twitter:

Por ello lo estoy aprendiendo por medio de un tutorial y allí me encuentro con un método para calcular raíces cuadradas por aproximación según Isaac Newton el cual yo no conocía.

Introducción.

Como yo estudié ingeniería y las matemáticas me traen gratos recuerdos me puse a analizar la fórmula que proponen los desenfadados programadores y desenfadadas programadoras de Google (la tuve que nombrar ya que ésta empresa es la que lo patrocina) y definitivamente que no me gustó la fórmula que presentan y el método de programación para calcularla.

Mucha gente ha escrito sobre el tema, incuyendo Wikipedia, por supuesto, pero me pareció un método muy enrevesado, para mi gusto (la historia allí descrita me hace saber que en realidad lo inventó primero el matemático Joseph Raphson pero Newton llegó a la misma conclusión si saber nada del trabajo del otro matemático).

Me encanta ser práctico, ver ejemplos y lo que muestran en este enlace me pareció pulcro y limpio y a pesar que llevo AÑOS sin calcular derivadas y series se llega rápidamente a una solución en el ejemplo 2 (pero yo realmente me deleité con el ejemplo 1) .

Propuesta.

Basado en lo que me explican me propongo programar para calcular CUALQUIER raíz cuadrada de un número natural mayor a 1 y de una manera recursiva (a diferencia de como lo piden en el tutorial con 10 iteraciones) más sin embargo no he podido resolver el detalle de convertir dicha función en un objeto que sólo tengamos que pasarle el número a calcular su raíz cuadrada, la precisión en decimales, sin más desde afuera, como lo planteo siempre hay que modificarle adentro en la función.

Si más preámbulos (que no, que no vamos a estudiar en este post «Análisis Matemático I», II ni III, ni «Ecuaciones Diferenciales» ni «Matemáticas Aplicadas») le presento mi solución, con comentarios en castellano:

package main

import (
    "fmt"
    "math"
)

func NewtonRaphson(x float64, comienzo int, margen float64) float64 {
  var resp float64 = 0
  var z    float64
  var dif  float64
  //Cambiar z al entero cuadrado inferior a x para calcular
  //otras raices
  if comienzo == 1 { z = 1   }
  //fin semilla
  if comienzo == 0 { z = x }
  
  //Para calcular otra raíz cambiar el primer 2 por
  //el numero cuya raiz cuadrada se desea calcular    
  z = ( z + 2 / z) / 2
  dif = x - z
  
  
  if dif > margen {
    resp = NewtonRaphson( z , 0, margen)
  } else {
    resp = z
  }
  return resp
}

func main() {
    fmt.Println(NewtonRaphson(2, 1, 0.0000001))
    fmt.Println(math.Sqrt(2))
}

Obteniendo los siguientes resultados, los cuales se aproximan bastante, como ven:

1.414213562373095
1.4142135623730951

Program exited.

Si quisiéramos calcular la raíz cuadrada de 50 debemos hacer dos cambios en el programa (atención: si copian y pegan el código para probar, respeten el indentado):

package main

import (
"fmt"
"math"
)

func NewtonRaphson(x float64, comienzo int, margen float64) float64 {
 var resp float64 = 0
 var z    float64
 var dif  float64
 //Siete elevado al cuadrado es el primer inferior a 50
 if comienzo == 1 { z = 7   }
 //fin semilla
 if comienzo == 0 { z = x }

 //El primer número 2 lo cambiamos por 50
 z = ( z + 50 / z) / 2
 dif = x - z

 //Verifica el margen de error para finalizar el cálculo
 //y devolver el resultado
 if dif > margen {
  resp = NewtonRaphson( z , 0, margen)
 } else {
  resp = z
 }
 return resp
}

func main() {
 fmt.Println(NewtonRaphson(50, 1, 0.0000001))
 fmt.Println(math.Sqrt(50))
}

Y esto es lo que arroja el servidor remoto que ejecuta código:

GoLang cálculo raíz cuadrada de 50 por método Newton Raphson.
GoLang cálculo raíz cuadrada de 50 por método Newton Raphson.

AHORA BIEN ésta es mi primera impresión de este lenguaje (puede ser que esté equivocado), se parece bastante a Python, pero bueno, vamos a «seguirle dando a los hierros» y veremos en que consiste este lenguaje, prometo próximas entradas en este blog acerca del tema.

<Eso es todo, por ahora>.

Ubuntu 6 32 bits 27 junio 2007

Ubuntu 6.10 32 bits.

Ubuntu 6.10 32 bits.

Ubuntu 6.10 32 bits (año 2007 y reinstalado en 2015 por medio de una máquina VirtualBox): un CD que recuperé del baúl de los recuerdos el cual le hice una imagen ISO con Brasero (recuperado en un 99,9% a pesar de haber estado más de 48 horas leyendo y releyendo) y la utilidad de disco confirma los defectos en la imagen grabada. También tiene utilidad de comprobación de memoria RAM, la ejecuté también, todo está en el video.

Por allá en el 2004 tenía una computadora que compré ya armada y me vendieron una marca infame de tarjeta madre (yo recomiendo las marcas Foxconn, Asus y Gigabyte con los ojos cerrados) y dicha tarjeta madre dejó de reconocer disco duro alguno en el 2007, pero al menos si arrancaba desde CD (en aquella época era una novedad en Venezuela el DVD interno para computadora, el cual era el primero de mi propiedad y de paso era quemador también). Así que para no darle más vueltas a ese asunto descargué el Ubuntu y usaba el live CD y guardaba en memoria USB (pendrive). Esa computadora a la final la desarmé y vendí por partes pero como no hay mal que por bien no venga me introdujo a mi primera experiencia real con el Software Libre, submundo Linux.

<Eso es todo, por ahora>.

Ubuntu Server 15.04, primeras pruebas.

Ubuntu Server 15.04 de 64 bits.

Para probar la imagen ISO de Ubuntu Server que descargué por medio de Bittorrent desde la web oficial y con ayuda de VirtualBox y asignándole 512 megabytes de RAM y 2 procesadores procedo a probar esta opción del software libre.

Ubuntu logo
Powered by
GNU/ Linux
Ubuntu.

Generalmente uso ese protocolo (Bittorrent) para descargar a la velocidad máxima que me permite mi proveedor de internet (ISP) y luego compartir y ayudar a los demás también a descongestionar los servidores oficiales; ahora que lo pienso debería existir un protocolo parecido para los repositorios, sería cuestión de sentarse a programar sobre las normas ya establecidas y juntarlas para ampliarlas. Investigando un poco por Google he descubierto que existe «BitTorrentSync» un proyecto llevado a cabo por Leo Moll @tuxpoldo que permite crear archivos .torrent de manera dinámica (o al menos eso entiendo) sobre cualquiera de nuestros archivos almacenados, de manera tal que si los actualizamos automáticamente se compartirán las nuevas versiones sin necesidad de descargar archivos .torrent adicionales -según traduzco yo de esta página web-.

Mi idea sería que nosotros mismos tengamos varios servidores de repositorios esparcidos geográficamente de manera esclava conectados a un servidor maestro que a su vez sea espejo de uno (o varios) repositorios oficiales. Plantearlo suena fácil pero por las peripecias que cuentan otros usuarios, tiene su trabajo configurar rsync el cual se utilizaría para configurar nuestro repositorio maestro.

¿Le estoy buscando 5 patas al gato, pudiendo usar rsync para todo? Pues mi idea es traer el (los) repositorio(s) que necesitemos a territorio venezolano y al tenerlo actualizado compartirlo rápidamente con nuestros propios repositorios que montemos (esparcidos) y luego invitar a quien quiera a compartir sin mayor compromiso y/o carga de trabajo a nuestro repositorio espejo maestro.


 <Eso es todo, por ahora>.

Instalando GNU Linux Canaima virtual en 4 minutos

GNU Linux Canaima.

canaimaEtiqueta-CD
Etiqueta CD Canaima

Casi olvido publicar este vídeo, tuve acceso a un computador tipo servidor de VIT con GNU Linux Canaima 32 bits (desperdiciando procesador de 64 bits) corriendo VirtualBox y fue asombroso que lo pudo hacer en menos de cuatro minutos, eso es lo que me llama la atención. 😯

Uno pudiera hacer más en menos tiempo con hardware poderoso, estaré al pendiente de cuando VIT C.A. tenga disponible para el público en general estos magníficos servidores de datos.

Actualizado el viernes 24 de julio de 2015:

A raíz de un excelente reportaje sobre Ensambladora VIT, empresa del Estado Venezolano, y transmitida por Venezolana de Televisión publico una foto referencial del servidor que utilicé para instalar GNU/Linux Canaima y algunos trinos informativos:

servidor vit

<Eso es todo, por ahora>.

Año 1995: «blast from the past» ATX POWER SUPPLY.

[ratings]

Actualizado el domingo 3 de mayo de 2020

Lo que me sucedió en julio de 2015 ya lo había vivido en el año 1995, pero con una pequeña diferencia que les contaré luego. Aunque trabajo con computadoras desde el año 1989 sólo fue hasta 1993 que pude reunir para comprarme una usada. Era una DTK (acá pueden ver una sucesora 386) XT8080 de segunda mano -hecha en Miami, cuando los gringos producían algo más que invasiones y guerras-  tipo «baby», DE HIERRO Y ACERO (el aluminio brillaba por su ausencia y el plástico era poco) sin disco duro, con dos floppy de 5 1/4″ y un monitor monocromático Samsung con un horrible color ámbar. Para entonces una computadora nueva costaba Bs. 80 mil, equivalentes a unos 870 US$ (dólar a Bs 92, en ese momento) y que para el día de hoy (teniendo en cuenta que el $ ha perdido un 35% de su valor desde 2002) unos 1.200 US$ actuales -julio 2015-. NO HABÍA DE OTRA comprar una nueva me era imposible así que como dicen que «no hay mal que por bien no venga» pues halá, a trabajar los hierros -literalmente-.

baby xt with monochrome monitor
baby xt with monochrome monitor

Seguir leyendo →

Cambiar refresco de pantalla en Debian.

Con el paso de los años mi visión se ha debilitado. Por eso decidí desempolvar mi viejo monitor Samsung LCD 740n que tiene una estupenda tasa de refrescamiento vertical de 75 Hertz, es decir, «dibuja» el monitor 75 veces por segundo lo cual hace más placentero ver un monitor durante horas y horas todos los días. Yo sabía que por defecto viene fijado en 60 Hertz aunque no sabía el por qué, investigando un poco encontré este artículo donde dan una explicación histórica, dos grandes verdades que en mi mente no las había unificado hasta ahora. Las razones del por qué cansa menos la vista mientras mayor sea la tasa de refrescamiento por segundo siempre lo he tenido presente pero en este otro artículo está pero que muy bien explicado.

Finalizado el preámbulo vamos al grano, cambiar el refresco de pantalla (y resolución) en Debian (e incluso otras distribuciones Linux pero aún no lo he probado ya que las máquinas virtuales con las que practico pues… ¡usan el mismo monitor todas!). Esto quiere decir que este tema es con HARDWARE REAL pero primero he de hacerles una advertencia, no vayan a decir que no se los advertí:

Establecer una tasa de refrescamiento a un monitor para la que NO ESTÁ DISEÑADO, PUEDE DAÑAR SU MONITOR.

De hecho lo dañará si aún tiene un monitor de rayos catódicos (CRT, del inglés Cathode Ray Tube), en el caso de los monitores LCD y LED pues simplemente se niegan a trabajar y como no confirmamos al sistema operativo el ajuste, pasado cierto tiempo lo devolverá a su estado anterior. Si dudan de mi palabra lean la advertencia de Microsoft y otros foros importantes sobre tarjetas de video.

Actualmente esto no es problema para los monitores «en tercera dimensión 3D» ya que refrescan mínimo a 120 Hertz (60 para cada ojo) y así se produce la ilusión de profundidad, con dos imágenes tomadas desde dos puntos separados por cierta distancia, tal como vería nuestros ojos humanos (suena sencillo ¿verdad?).

www.ks7000.net.ve expresado en QR.

Generando códigos QR con Python.

Publicado el sábado 13 de junio de 2015.

Actualizado el sábado 16 de noviembre de 2019.

Introducción.

En el día de hoy aprendimos que se pueden generar «QR codes» (la cual es la abreviatura, en inglés, de «Quick Response Code«) con un paquete para el lenguaje Python. Fueron creados en Japón para el manejo de piezas y manufactura de vehículos de la marca Toyota, a fin de agilizar grandemente los inventarios. Explicar cómo funcionan merece su entrada completa y aparte, aquí vamos a explicar brevemente cómo instalarlo y usarlo con Python.

Agradecimiento.

Agradecemos de antemano a los programadores de software libre de «Industrias Diana» cuya exposición fue brillante en el «Décimo Primer Congreso de Software Libre». Dicha exposición abarcó varios temas acerca del proceso y manejo de la información, entre otros la comunicación con impresoras fiscales y la generación de códigos QR, caso que nos ocupa hoy. Muchas gracias por compartir el conocimiento, cumplimos con seguir difundiendolo.

Seguir leyendo →

Congreso Nacional de Software Libre, viernes 12 de junio de 2015.

Libertad no es poder escoger quién será tu amo, ¡LIBERTAD ES NO TENER AMO!

Richard Matthew Stallman.

Evento realizado en el INCES Av. Lara de Valencia, estado Carabobo, y organizado por:

Puede revisar el cronograma de actividades en este enlace.

Apertura del evento.

 

 

Ponencia: «Conciencia irreverente para un pais consciente».

 

Ponencia: «Robótica divertida».

CNSL2015-01 CNSL2015-02 CNSL2015-03 CNSL2015-04 CNSL2015-05 CNSL2015-06

Ponencia: «Licencia Venezolana de Software Libre».

CNSL2015-07 CNSL2015-08

Ponencia: «Academia de Software Libre Carabobo».

<Eso es todo, por ahora>.

Gaceta Oficial Extraordinaria N° 6.181: aumento sueldo 20+10% 1° mayo 2015.

Son 2 hojitas en formato pdf  (agradezco a “pdfsam” y lo recomiendo para dividir y combinar documentos en ese formato); con este aumento el sueldo mínimo en Venezuela se ubica en Bs. 7.421,68 (si tomamos como referencia el SIMADI serían aproximadamente US$ 37 mensuales).

Para descargar dicho ejemplar electrónico de la Gaceta Oficial desde nuestra página web haga click aquí.

Si desea descargarla desde el Tribunal Supremo de Justicia.

<Eso es todo, por ahora>.