jueves, 21 de noviembre de 2024

¿Por qué la numeración debería comenzar en cero? (respuesta de Dijkstra)


¿Por qué la numeración debería comenzar en cero?


Para denotar la secuencia de números naturales 2, 3, ..., 12, sin los malvados tres puntos, tenemos cuatro convenciones disponibles:

    a) 2 ≤ i < 13

    b) 1 < i ≤ 12

    c) 2 ≤ i ≤ 12

    d) 1 < i < 13


¿Hay razones para preferir una convención sobre otra?


Sí, las hay.

Las convenciones a) y b) tienen la ventaja de que la diferencia entre sus extremos es igual a la longitud de la secuencia. También es válido que, como consecuencia, en ambas convenciones, dos secuencias son adyacentes si el extremo superior de una es igual al extremo inferior de la otra.


Aunque estas observaciones son válidas, no nos permiten elegir entre a) y b); así que comencemos de nuevo.



Existe un número natural más pequeño. Dejar fuera al extremo inferior -como en b) y d)- fuerza, para una secuencia que comienza en el número natural más pequeño, al extremo inferior mencionado, a entrar en el mundo de los números no naturales. Eso es feo, por lo que para el extremo inferior preferimos ≤ como en a) y c).

Consideremos ahora las secuencias que comienzan en el número natural más pequeño: la inclusión del extremo superior forzaría entonces al último a ser no natural cuando la secuencia se haya reducido a la vacía. Eso es feo, por lo que para el extremo superior preferimos < como en a) y en b). Concluimos que la convención a) debe ser la preferida.




Observación:
El lenguaje de programación Mesa, desarrollado en Xerox PARC, tiene notaciones especiales para intervalos de enteros en las cuatro convenciones. Una amplia experiencia con Mesa ha mostrado que el uso de las otras tres convenciones ha sido una fuente constante de torpezas y errores, y debido a esa experiencia, se aconseja encarecidamente a los programadores de Mesa que no utilicen las últimas tres características disponibles. Menciono esta evidencia experimental, por si sirve de algo, a pesar de que algunas personas puedan sentirse incómodas con conclusiones que no han sido confirmadas en la práctica. (Fin de la Observación).



Cuando tratamos con una secuencia de longitud N, cuyos elementos queremos distinguir mediante subíndices, la siguiente pregunta es qué valor de subíndice asignar a su primer elemento. Adhiriéndonos a la convención a), cuando comenzamos con el subíndice 1, el rango de subíndices es 1 ≤ i ≤ N+1; comenzando con 0, sin embargo, nos da el rango más agradable 0 ≤ i < N. Así que permitamos que nuestros ordinales comiencen en cero: el ordinal (subíndice) de un elemento es igual al número de elementos que lo preceden en la secuencia. Y la moraleja de la historia es que, después de todos estos siglos, deberíamos considerar al cero como un número muy natural.





Observación: Muchos lenguajes de programación han sido diseñados sin prestar mucha atención a este detalle. En FORTRAN, los subíndices siempre comienzan en 1; en ALGOL 60 y en PASCAL se adoptó la convención c); el más reciente SASL ha vuelto a la convención de FORTRAN: una secuencia en SASL es al mismo tiempo una función sobre los enteros positivos. ¡Lástima! (Fin de la Observación)


Lo anterior ha sido provocado por un incidente reciente, cuando en un arrebato emocional, uno de mis colegas matemáticos en la universidad -no un científico de la computación- acusó a un grupo de jóvenes científicos de la computación de "pedantería" porque, como hacen por convención, ellos empezaron a enumerar desde cero. Él consideró concientemente que la adopción de esta convención era una provocación. (También, la última convención es vista como provocativa; pero la convención es útil: conozco a un estudiante que casi suspendió un examen por la suposición tácita de que las preguntas terminaban al final de la primera página.) Creo que Antony Jay tiene razón cuando afirma: "En las religiones corporativas como en otras, el hereje debe ser expulsado no porque sea probable que esté equivocado, sino por la posibilidad de que tenga razón".

 

Prof. Edsger W. Dyskstra

11 de agosto de 1982


 

Traducido desde:

https://www.cs.utexas.edu/~EWD/ewd08xx/EWD831.PDF

(por si el link falla, subo el pdf).

 

 

 

martes, 19 de noviembre de 2024

Fotos gente extraviada

Debiéramos tener la costumbre de tener algunas fotos (más o menos) actualizadas pensadas en ser usadas por si necesitan publicar nuestra foto en redes sociales o el diario en el caso de que nos extraviemos, tengamos un accidente...

¿Por qué?

Las fotos de extraviados ahora son sacadas principalmente de redes sociales, y buena parte salen con filtros o poses no ad-hoc...  lo que hace difícil reconocer a la persona.

sábado, 13 de enero de 2024

Futuro de las IA's generativas

Este post tiene un tono pesimista sobre la evolución de la generación de conocimiento en línea, y de las IA's generativas como chatGPT. Hasta ahora, hemos contado con valiosas fuentes de información como https://stackexchange.com para preguntas y respuestas, https://es.wikipedia.org con material introductorio a los más diversos temas y https://github.com para compartir códigos.

En plataformas como StackExchange, los usuarios plantean preguntas y validan respuestas, permitiendo clasificar las consultas más comunes y obtener respuestas específicas de manera eficiente de temas tan variados como ciencia, computación, ortografía, ciencia ficción, etiquetados con tags aún más específicos que hacen más fácil ordenar y buscar información. A su vez, en Wikipedia la comunidad colabora para explicar diversos temas con buena redacción y agregando información actualizada continuamente; además, la conexión con versiones en otros idiomas enriquece aún más esta fuente de conocimiento.

La calidad de la información en estos sitios se debe, en gran medida, al respeto de quienes contribuyen. Bajo su nombre real o un seudónimo, los participantes se esfuerzan por proporcionar contenido y respuestas precisas para ganar prestigio. Además, algunos no buscan reconocimiento y contribuyen con responsabilidad de forma altruista. En casos de contribuciones cuestionables, es la comunidad quien decide cuáles son aporte y cuáles no, asegurando así la calidad del contenido final.

github es un poco diferente, porque no tiene filtro sobre la calidad de los códigos compartidos, pero creo que todos subimos sólo los códigos de los cuales nos sentimos especialmente orgullosos. En particular, los programadores profesionales suelen usar este sitio como repositorio para subir sus "portafolios" de trabajo, que sirve de complemento a su curriculum,;además de proyectos profesionales que lo usan para compartir su código.


Estos sitios son accesibles a través de buscadores como Google, que actúa como un índice conectando nuestras preguntas con respuestas relevantes. Sin embargo, con la creciente adopción de IA, como ChatGPT, la dinámica cambia: Consumimos contenido generado por IA, y dejamos de contribuir a estas comunidades al no generar nuevas preguntas y respuestas o evaluar soluciones, y al no generar contenido inédito.

Por ejemplo, a medida que avanzamos hacia la generación masiva de código mediante IA, podríamos encontrarnos repitiendo soluciones sin creatividad. Entonces, surge la pregunta: ¿qué sucede si dejamos de utilizar plataformas como StackExchange, Wikipedia o GitHub y participar activamente aportando contenido original?

Es crucial recordar que las IA generativas basan sus respuestas en la información de estos sitios, por lo que si descuidamos este ecosistema de generación y validación de conocimiento, el desafío para que las IA's continúen produciendo respuestas precisas y actualizadas será cada vez mayor.

domingo, 15 de octubre de 2023

IA útiles

 A continuación, una lista de herramientas que hacen uso de inteligencia artificial. No busca ser una lista exhaustivno, sino sólo herramientas que me han parecido útiles y no quiero olvidar su nombre para cuando necesite usarlas nuevamente.

 

https://chat.openai.com/

chatGPT es una aplicación de chatbot de inteligencia artificial lanzado el 2022. Su versión gratuita tiene información actualizada hasta el 2021.

 

https://bard.google.com 

Es similiar a chatGPT, con la diferencia que extrae información de internet, por lo que tiene información más reciente.


https://www.perplexity.ai

Si necesitas tener citas bibliográficas, perplexity es la herramienta.

 

https://www.deepl.com/

Si bien chatGPT traduce súper bien, deppl promete hacerlo mejor.

 

https://flixier.com

Extrae la transcripción de audio o video.


https://codeium.com/

Extensión (ej: Emacs y Visual Studio Code) IA.


Diseñada para ayudar al análisis de datos y su visualización.

domingo, 12 de febrero de 2023

Paquetes LaTeX: minted: Escribiendo códigos coloreados

El paquete minted permite escribir código simililar a listings o el ambiente verbatim, pero con la ventaja de colorear el código de acuerdo al lenguaje que se está utilizando. Lo he utilizado para C, Python y MATLAB y funciona muy bonito.

Ten cuidado de invocar shell- al compilar:

    \begin{document} pdflatex -shell-scape archivo.tex

 

Un ejemplo para copiar y pegar:

 

\documentclass[11pt]{article}

\usepackage{minted}

\begin{document}

% 1. Escribimos cada linea de codigo por separado:

\mint{python}| >>> print('Hola '+'Mundo')|

% 2. Escribir un codigo dentro de una linea de texto (sin salto de linea como el anterior

Al escribir \mintinline{python}{print(x**2)} se calcula primero el cuadrado de x y luego se imprime su valor.

% 3. para varias lineas de codigo:

\begin{minted}[frame=single]{python}

def suma numeros(a,b,c)

    resultado = a + b + c

    return resultado

\end{minted}

\end{document}

 

 Al compilar el resultado se obtiene lo siguiente:





Paquetes LaTeX: siunitx: Escribiendo unidades de medida y notación matemática

El paquete siunitx permite escribir unidades de medida en forma ordenada.


Además, escribir notación científica, como 1e-10, directamente en LaTeX no se ve bien. En su lugar podemos usar este paquete.

Un ejemplo de código es el siguiente:

 

\documentclass{article}

\usepackage{siunitx}

\sisetup{output-exponent-marker=\ensuremath{\mathrm{e}}} % prefiero este formato

\begin{document}


    Solo numero: \num{1e-10}

    Solo unidad de medida: \unit{m^2.kg\per s}  % esto da $m^2\, kg\, s^{-1}$

    Numero con unidad de medida: \SI{1e-10}{\meter\per\second}

\end{document}

sábado, 11 de febrero de 2023

miércoles, 25 de enero de 2023

Recursos educativos

En el siguiente enlace hay una lista de recursos educativos:

http://docentesenlinea.udec.cl/recursos-educativos/

jueves, 12 de enero de 2023

Borrar todos los archivos con una cierta extensión en forma recursiva

 Solución:

    find . -name "*.dat" -type f -delete
 
Recomendación: Primero mirar los archivos que se borrarán_
 
  find . -name "*.dat" -type f
 
Advertencia: Mucho cuidado con el orden del argumento "delete" (podrías borrar todo...) 
 
Esto es un copy+paste desde: https://askubuntu.com/questions/377438/how-can-i-recursively-delete-all-files-of-a-specific-extension-in-the-current-di 

lunes, 26 de diciembre de 2022

Syllabus usando org-mode de emacs para obtener el tex y pdf

 Mi versión en org-mode (emacs) y latex del syllabus de un curso de la Universidad de Concepción, versión 2022.

https://github.com/ramrebol/syllabus

Como la institución sólo provee de la versión MS-Word del syllabus, comparto mi versión para generar el syllabus de un curso en la Universidad de Concepción:

  • syllabus.tex y syllabus.org es la versión minimal (el mismo ejemplo dado por la institución).

  • syllabus_algebra.tex y syllabus_algebra.org es una versión para el curso de Álgebra y Trigonometría del segundo semestre del 2022.

  • *.pdf son las salidas pdf de ambos archivo.

Los archivos *.tex están listos para compilar. Obviamente, también puedes editarlos como necesites.

Notar que los archivos LaTeX fueron generados usando org-mode de emacs (que si no lo conoces te recomiendo mirar de qué se trata: https://orgmode.org/), lo que hace que la generación del tex y pdf sea mucho más sencilla (incluso podemos saltarnos mirar el tex). Si usas emacs, puedes descargar los *.org y para generar el tex basta escribir los shorcuts

C-x-e l-p

pero si sólo quieres usar los tex no es necesario saber nada sobre emacs y org-mode.

Notar que usar los archivos *.org tiene la ventaja de poder escribir tablas (por ejemplo, de la sección de la Planificación) en una forma más natural, usando C-c' (notar el apóstrofe luego del Control c).