Regular

Esta charla la di 3 veces en el año, pero sólo recientemente pude grabarla. La charla fue originalmente pensada en el marco de la FLISoL Córdoba 2023. Pero por un problema técnico no pudo ser grabada. Luego la volví a dar en el marco del XI CIAI, y en ese evento no se grababan las charlas. Finalmente pude darla la semana pasada en el marco del Mes de la Ciencia 2023, organizada por CEIMAF, en FaMAFyC, y pudimos grabarla y esta vez sí subirla.

En la charla hablo de la librería Hugging Face y explico un poco la tecnología que hay detrás de los modelos de lenguaje que son el motor de tecnologías como ChatGPT. La charla cuenta de slides y un video.

Esta semana se hicieron efectivas mis renuncias a ambos trabajos que estaba realizando. Por un lado, mi trabajo full time en Mercado Libre como investigador. Oportunidad brindada por Rafael Carrascosa a fines del año 2019 y que comencé en plena pandemia en Abril del 2020. Por otra parte hice la renuncia oficial a mi cargo como profesor de la Facultad de Matemáticas, Astronomía, Física y Computación de la Universidad Nacional de Córdoba. En los hechos en realidad hacía 6 meses que estaba de licencia (el máximo período permitido por motivos personales). Con esto termina el trabajo que más tiempo llevo haciendo para una misma entidad (en este caso la UNC), prácticamente 10 años desde que empecé siendo ayudante de alumnos en 2011.

La razón por la cuál renuncié a estos trabajos tiene que ver con el título de este artículo. El primero de Septiembre del 2023 arrancaré un nuevo desafío personal y profesional al aceptar un postdoc en Europa. En la Université Côte d'Azur ubicada en la Riviera Francesa, en la zona de Sophia Antipolis. Y si bien, quizás le estoy dando más jerarquía que lo que realmente es (un postdoc no es un título, es un trabajo en la academia después de todo), lo veo como el primer paso a una nueva vida en el viejo continente, algo que me debo a mi yo mismo desde los 12 años.

En este post haré un listado de herramientas útiles para Python. Pensado especialmente para Jr. (o incluso Ssrs) que estén por hacer una entrevista en Python. Estos son sin ningún orden en particular, simplemente son algunas de las herramientas que más suelo utilizar:

collections: Una librería con estructuras de datos de colecciones, más allá de diccionarios o listas, super útil para muchas cosas (diccionarios ordenados, diccionarios con valores por defecto, Counter).

En este post haré una recomendación de una herramienta para visualizar datos usando directamente la consola: VisiData es un CLI open source para poder visualizar datos mediante un spreadsheet.

A la hora de leer archivos csv (u otros tipos de archivos de datos si vamos al caso) es muy común usar librerías como pandas, o a veces tener que recurrir a scripts con comandos de bash (como sed, awk, sort, uniq etc.) para hacer summaries y demás. Visidata viene a dar una interfaz ligera por terminal para esto.

En este post haré un listado de los 10 (+1 mención especial) comandos más útiles, a mi criterio, que BASH tiene para ofrecer. El orden es completamente arbitrario y depende de mis preferencias, no tiene nada que ver con que tan usado o no sea el comando (muchos de los comandos más comunes no están). Empezamos:

Mención especial: awk, no lo uso tanto como antes (suelo directamente usar combinaciones de cut y otros comandos más simples), pero awk es extremadamente poderoso a la hora de manejar flujos de texto.

XKCD: Machine Learning - ¿Este es tu sistema de aprendizaje automático? - Sip, vertés los datos por esta pila de álgebra lineal, y obtenés las respuestas por el otro lado. - ¿Y si las respuestas son incorrectas? - Basta con remover la pila hasta que las respuestas empiecen a parecer correctas. Fuente: https://xkcd.com/1838

En este artículo intentaré introducir algunos conceptos de aprendizaje automático, conocido en inglés como machine learning (literalmente aprendizaje de máquina), de manera que no requiera tener conocimientos de programación para entenderlo.

Esto no quiere decir que quienes estén dentro de la informática no puedan beneficiarse de lo que explicaré aquí, pero no me adentraré en detalles sobre programación de algoritmos de aprendizaje automático.

La idea principal de este artículo es explicar el aprendizaje automático de una manera didáctica y que sea entendible para quién le interese saber algo más del asunto, desmitificando un poco todo aquello que hay alrededor.

Buscaré explicar en dos niveles, al principio iré por algo más general, explicando conceptos como regresión y clasificación desde un punto de vista puramente coloquial. Pero además, para quién quiera entender un poco más, buscaré dar una explicación un tanto más técnica, tratando de utilizar conceptos matemáticos que deberían verse durante la escuela secundaria (el equivalente argentino a la preparatoria o el bachillerato).

(Post original en Medium. Esto es para archivo.)

Siguiendo con esta serie de artículos de divulgación sobre ciencia de datos, ya pudimos instalar y configurar nuestro entorno para Apache Zeppelin. El siguiente paso será hacer algo de análisis de datos “real” con Spark y Zeppelin. Para ello, vamos a arrancar con lo básico para hacer análisis de datos: veremos el código básica para cargar los datos y limpiarlos (también conocido como ETL o “extract, transform and load” en la jerga).

Jupyter Notebooks combining Python and R

(Original post available at Medium. This is for archiving.)

Disclaimer: This post assumes you have some familiarity with ggplot2 (and, of course, Python, R, and Jupyter). If you need a quick catch up with the ggplot2 library I recommend ZevRoss cheatsheet.

So, a year and a half since my last post. Even if I kind of update my page to be a blog from the root, shame on me.

This blog post however is not something related to what I did in the previous ones. I promise someday I will continue with my Python to Scala tutorials, but for now you'll have to settle with this.

Hello again! Nice to see you decided to come back. If you check my previous post you know that functions are quite an important matter in the Scala language.

Last time, talking about recursion, I wasn't able to cover all the topics about functions. So I decided to dedicate yet another post to it. You can call it "advanced functions", but I don't think is so "advance" what I'm going to show here.

You are welcome to read some more on functions in this new blog post.

Welcome to another post on my series of tutorials. As you can see (if you were following my tutorials since I started them), I change the environment of my blog, using Octopress to facilitate the blog writing (it has very nice features such as the automatic categories and blog archive).

This time we will exploring one of the most powerful things Scala offers as a functional programming language. That is, of course, the functions, the core concept in this paradigm.

This concept is quite important, and I'm sure I won't be able to explain the full potential of Scala functions as I'm not a master in functional programming paradigm. Yet, I'll do my best. However, it is important that you take a tutorial or course on Scala's functional programming (I deeply recommend Martin Odersky's Functional Programming Principles in Scala).

Ok, after a short period of laziness, I come back for more. I warned you about my activity, but, to be fair, it's been a busy couple of weeks at work.

However, before starting, I wanted you to know that there is an upcoming Course for Functional Programming Principles in Scala in 25 days (starts on September 15th). You can find more information about it (or even enroll in it) at Coursera. The course is in charge of Martin Odersky, the creator of Scala, so you are in good hands.

So, back to business. On this session let's talk about some more real programming.

So, on this entry I'll put a halt on the series of tutorials I've been writing. Instead I think it's time to give a personal opinion in why did I choose Scala as my new main language.

Before keep going on this, I'll just state that this is a complete personal opinion on Scala, is completely subjective. The reason why I chose it is mine and doesn't have to be your reason to choose it, but maybe you'll find some useful insights on what advantages I think the language has.

So, a couple of friends and co-workers asked me "Why Scala over Python? (or any other language for that matter)", I guess I've never answered with a full justification on why did I do it. Actually, I don't think I have a real or valid justification more than "because I liked it", but I do want to state some stuff that end up with me switching from a Python programmer to a Scala programmer.

So, now you've learnt about Scala lists. As you could see in the previous examples, Scala has a very functional kind of lists, as these are immutable.

If you are ever to use Scala as a functional programming language this is the way to go. I really recommend you to, at least, try to learn this paradigm, as it is design purpose and has many advantages. But, then again, even now I sometimes go back to imperative programming in Scala myself because is more natural to me. Scala as imperative language is pretty similar to Java, so as a side effect I ended up learning how to read Java code (I knew some Java but only the basics, learning Scala my Java understanding improved a lot).

But, lets say that functional programming is way too much to deal with now and you want to know a type more similar to Python lists, the oldie but goodie mutable lists. You have a couple of options of data structures available in Scala, I'll present two of the most commons.

Following with the series in this crash course from Python to Scala, today I'll introduce one of the most useful Scala's data structures and make the comparison to Python.

Scala Lists

Starting off with one of the most used data structures in Scala (and in functional languages in general) and also the most common data structure in Python as well: the lists.

Following my series of tutorial of Scala for Python programmers, I'll start to talk about something most Python programmers don't usually pay attention to because the language doesn't require it to do so.

Scala Types

I'm talking about data types. It's not that Python doesn't have types for its variables, but as it is a dynamically typed programming language, you usually don't care about the type of the variable. At least not unless you try to add a number and a letter: you cannot add apple and oranges, naturally you cannot add strings and numbers (not at least without conversion first):

This is the first post in a series in which I'll try to give a nice insight for the Scala Language to a programmer with background in Python. I chose to do these posts since, at least when I started this series, the "Scala for people coming from Python" tutorial was a work in progress.

First of all I'll state some of my background (in case you didn't check my about page), in a kind of a disclaimer. There are people out there who are experts in Python. I'm not one of them. I only have a background of 4 years in this language, and only work with the 2.X version (started with 2.5 until 2.7). Never even try to learn Python 3. Also, there are experts on Scala as well, I'm not one of those either. In fact, my Scala knowledge is far from deep, I learned Scala at the end of last year and been using it since then (along with Python).

There are people out there who are experts in Python. I'm not one of them. [...] Also, there are experts on Scala as well, I'm not one of those either.

Once you know this, I'll just say I have enough knowledge of both Scala and Python to get by. I've done some projects in Django and some projects in Play Framework, but nothing really impressive. The reason I'm doing this set of tutorials is because when I started to learn Scala I didn't have one and many times I end up in Stackoverflow looking for how to do in Scala things I did in Python.

As every programmer trying to learn a new language, I think is suitable for me to start this professional blog with a Hello World. So, in this first blog post I say Hello World!

This is the first blog I’ve created that has relation with what I do for a living. The only other surviving blog is a personal one (and is in Spanish also).