Mostrando entradas con la etiqueta computación. Mostrar todas las entradas
Mostrando entradas con la etiqueta computación. Mostrar todas las entradas

miércoles, 12 de marzo de 2025

Problemas de programación para desafiarse

Programar es una habilidad, por lo que la única forma de ser bueno programando es ejercitando (tal como para adquirir la habilidad de tocar un instrumento musical, o la habilidad de aprender un deporte).

Unos sitios para ejercitarse en programación:

  • https://aceptaelreto.com/
  • https://adventofcode.com/  (es además un concurso)

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).

 

 

 

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}

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).

 


miércoles, 8 de diciembre de 2021

Adventofcode

Cada año antes de navidad, en el sitio

    https://adventofcode.com/ 

hay una serie de acertijos que se resuelven con ingenio y programando en cualquier lenguaje. Cada media noche se publica un nuevo acertijo, y la idea es resolver cada problema en el menor tiempo posible.

Escribo esto acá para ver si me acuerdo de participar el próximo año, que éste ya es tarde :P

martes, 18 de mayo de 2021

etags: an useful tool to generate tags in Emacs

etags is an useful tool to generate tag tables for Emacs (ctags is the same but for vi). This allows us to jump to a function defined in some file in the code, without having to remember in which file is it. As could be expected, this tool understand the syntax of a lot of programming languages, like C, C++, Fortran, HTML or LaTeX.

 

To use it, in the folder where the code is run

     etags *.f90

 

This generates a file called TAGS with the information (a tag table) about in which .f90 is each function and subroutine of the code.


Then, in Emacs move the cursor on the subroutine/function what you want, and ATL+. (ALT and dot) opens the .f90 file where the subroutine/function is with the cursor on the definition of it. To go back, hit ALT+, (ALT and comma).


For more tips related with emacs visit papitas emacs.

jueves, 25 de marzo de 2021

lunes, 27 de abril de 2020

Editing music in linux

My descover: reaper.
It is not free software, but is a professional software for edit music.

domingo, 12 de abril de 2020

Software para clases online

Debido a la contingencia (COVID-19) en la universidad estamos comenzando el año con educación a distancia (abril 2020). Por este motivo he tenido que buscar y probar distintas estrategias y software para obtener los resultados que buscaba.

Luego de buscar y probar varias opciones, me he quedado con los siguientes:

- Simple Screen Recorder: Permite grabar pantalla completa, una ventana específica o sólo un recuadro. Además permite detener la grabación para luego reanudarla.


- Xournal y Xournalpp: Ideales para utilizar la tablilla Wacom. Permiten también abrir y editar pdf, introducir imágenes, escribir en LaTeX, grabar directamente, entre otras cosas. Originalmente Xournalpp fue un clon de Xournal en C++, pero ahora son dos proyectos independientes.

viernes, 28 de febrero de 2020

Links con chayas para presentaciones

mentimeter: Es una empresa que crea apps para presentaciones con feedback en tiempo real. Por ejemplo, se puede pedir a los asistentes a la presentación que respondan a la pregunta "Cuál es tu comida favorita" en su celular, y un gráfico se va generando en tiempo real con las respuestas, quedando más grandes las respuestas que más se repitan.



plickers: Cada alumno (asistente) tiene una hoja, y dependiendo de cómo la muestre estará seleccionando las opciones a, b, c o d. El profesor (charlista) puede escanear las hojas de todos usando su celular (basta que ellos levanten su hoja, así que es muy rápido), y se va generando un gráfico con las respuestas. Esto permite ver, de forma anónima, si los alumnos han comprendido, o también sirve como una encuesta de opinión.

lunes, 24 de febrero de 2020

domingo, 28 de octubre de 2018

¿Cuáles son algunas cosas que solo alguien que ha estado programando desde hace 20 a 50 años sabría?


- El hecho de que funcione en tu máquina no significa que no haya un error.

- No confíes en el compilador. No confíes en las herramientas. No confíes en la documentación. No confíes en ti mismo.

- Vas a olvidar lo que hace tu código en unos pocos meses. Hazlo que sea ridículamente fácil de leer.

- Mantener el código es más difícil que escribirlo. Escribir mucho y mucho código nuevo puede ser una marca de pereza.

- Si sabes que realizarás una secuencia fija de pasos más de diez veces, automatícelo.

- Respaldarlo es una cosa. Restaurarlo es otro.

- A veces, todo lo que necesitas es un one-liner in sed.

- Todo en el desarrollo de software ya ha sido inventado. La gente lo sigue redescubriendo y fingiendo que lo inventaron. Independientemente de lo que creas que es genial y nuevo, se copió de Smalltalk, HAKMEM, Ivan Sutherland, Douglas Engelbart, o IBM anterior, o quizás de Bell Labs.

- Se te ha enseñado a programar como si la memoria, el tiempo del procesador y el ancho de banda de la red fueran gratuitos e infinitos. No lo es, no lo es, y no lo es.

- No necesitamos más lenguajes de computadora. Aún así, correrás enseguida e inventarás otro. Déjeme adivinar, tu asombroso nuevo lenguaje utiliza enteros IEEE-754 y enteros de precisión fija. Tu asombroso nuevo lenguaje está roto.

- Tenga cuidado con los programadores que hablan en términos absolutos, como "mi método siempre es mejor que el suyo". La programación es un arte, no una religión.


------------------------------------
Copy+paste de Quora

jueves, 12 de octubre de 2017

Notas python


  • Ipython:  Command shell for interactive computing originally for python (also works for R, Julia and Haskell).
  • Project jupyter: Notebook (web browser based editor) supporting also Julia, R, Haskell and Ruby.
  • Fenics: computing platform for solving PDE. An easy (but ugly) way to install and run is docker. A nicer: via conda. Don't forget to run
    source activate fenicsproject
    before run python (or python3, ipython, ipython3...)
Historic note: Project Jupyter starts in 2014 as a spin-off project from IPython. IPython will continue to exist as a Python shell and a kernel for Jupyter, while the notebook and other language-agnostic parts of IPython will move under the Jupyter name.

Otra lista de enlaces y programas útiles.

domingo, 23 de julio de 2017

Papitas emacs


Interesting stuff coming by default
  • org-mode
  • speedbar
  • imenu (M-x f90-add-imenu-menu): añade un tab con todas las subrutinas y funciones dentro del buffer actual.
  • Wich function mode (M-x which-function-mode) Supported only in f90 mode.
  • Mark (light) the the current line: (M-x hl-line-mode)
Checking and Correcting Spelling: (see this link). In particular, flyspell-mode (see manual) and ispell


Some useful add-ons that can be installed
  • yasnippet: It allows to type an abbreviation and automatically expand it into function templates written in plain text, so they are easy to create and edit shortcuts.
  • corfu: small package, which relies on the Emacs completion facilities and concentrates on providing a polished completion UI.
  • AUCTeX: package for TeX files. In particular, allows backward/inverse search
  • Minimap: It shows a smaller "minibar", highlights the portion of the buffer that is currently visible in the main window. Particularly useful when the file is too big. You can install it from MELPA: M-x list-packages
  • Sublimity: Smooth-scrolling and minimap, like (the non-free) Sublime editor.
  • ellama:  is a tool for interacting with large language models from Emacs

 

etags is an useful tool to generate tags for Emacs. For details visit this post on this blog.

 

MELPA is a package repository that contains an enormous amount of useful Emacs packages, en particular you can install gnuplot-mode. With ALT-X install-package it is easy to install several modes, like the matlab or minimap.


 To autoload gnuplot-mode on any file with gp extension, put this in ~/.emacs file:

(setq auto-mode-alist (append '(("\\.gp$" . gnuplot-mode))
                  auto-mode-alist))


To begin using octave-mode for all .m files you visit, add the following lines to ~/.emacs file:

(setq auto-mode-alist
      (cons '("\\.m$" . octave-mode) auto-mode-alist))


More details about octave-mode in this link.



A list with links and useful software.