Phil Walder
- https://dl.acm.org/citation.cfm?id=2500586
- https://github.com/fsprojects/FSharp.Linq.ComposableQuery
- http://fsprojects.github.io/FSharp.Linq.ComposableQuery/
Osvaldo Martín
La charla consistió en presentar cómo se pueden resolver modelos de manera simple con python y PyMC. Esta herramienta soporta varias formas de generar modelos probabilisticos, evitando que tengamos que calcular integrales a mano: modelos lineales generalizados (student-t, logistic regression, poisson...) Se advirtió que estos modelos no son suficientes para hacer big data, pero se mencionaron recursos que hablan sobre cómo aplicar modelos a estos problemas
- Gaussian processes for Machine Learning
- BART (Bayesian Additive Regression Trees) - esto no es performante con PyMC
- Machine Learning - don't mind the gap
- Arviz es una herramienta para evaluar modelos bayesianos
- Statistical rethinking: Algo que destacó el speaker es que las herramientas disponibles deberían ser suficientes para que se reformule la manera de enseñar estadística. Desde su grupo de trabajo portaron este libro a PyMC
- Bayesian the fun way
Leandro Ostera - src
1963 - Sketchpad -> Primera GUI 1968 - NLS - Online System 1980 - Parc - Smalltalk
El speaker introduce el modelo de actores, planteando que para programar aplicaciones tenemos que tener dos cosas en cuenta: modelos computacionales y una filosofía.
Para lo primero entra en juego directamente el modelo de actores:
- Procesos comunicándose mediante mensajes
- Aislamiento de fallos por defecto
- Asincronismo por naturaleza
- Paralelizable
Lenguajes que lo soportan bien: Erlang, Pony
Para el tema de la filosofía, tenemos que tener dos conceptos presentes:
- Liveness: Siempre responder a interacción de usuario
- Directness: Todo lo que ves puede modificarse.
Ejemplos de herramientas que utilizan este modelo:
- Pharo
- StageVM
Simon Thompson
Refactoring es transformar, pero manteniendo una precondición (a veces olvidamos eso y usamos el término refactoring de forma muy relajada)
Análisis para determinar las precondiciones:
- Análisis semántico
- Tipos
- Side-effects
- Modules
no es sólo parsear archivos
Al armar una herramienta tenemos que ver que sea:
- factible: ¿Podemos construirla?
- deseable: ¿La gente quiere usarla?
- Viable: ¿Se puede hacer plata con ésto? ¿Es sostenible en un ambiente de investigación?
El speaker no estaba muy de acuerdo con proponer herramientas de refactoring independientes al lenguaje, dado que hay mucho contexto que no puede ser abstraido de éste y es necesario para analizar las precondiciones.
También se debería optar por involucrar al usuario en lugar de automatizar por completo, a veces dar la posibilidad de optar resuelve el problema de mejor manera. En adición, también conviene obtener información del uso de las herramientas para fortalecer los features más utilizados, a veces un abanico de herramientas no es necesario si la herramienta hace bien lo que el usuario utiliza ;)
Karen Serfaty
La speaker expuso la forma en que utilizó machine learning para su trabajo de tesis en la carrera de ciencias de la educación, relacionada con (learning analytics)(https://en.wikipedia.org/wiki/Learning_analytics)
¿Por qué las preguntas en clase pasan desapercibidas? El objetivo de la investigación: reconocer preguntas abiertas y cerradas -> Clasificación
Tipos de preguntas:
- Cerradas -> si/no, única respuesta. Prueban la memoria de la persona
- Abiertas -> generan aprendizajes significativos. "¿Por qué?"
- Juntar datos: para entrenar un modelo se necesitan muchos ejemplos
- Labeling: etiquetar los datos. A veces hay que hacerlo a mano, es la etapa más costosa
- Entrenar modelo: es importante splitear los datos
- Probar el modelo (eficacia, eficiencia)
Santiago Pastorino
Rust es un lenguaje principalmente orientado a systems programming, en contextos en los que optimizar los recursos y la performance importan.
- Multiparadigma
- Fuertemente tipado
- Control, seguridad, performance
- Open source
Por qué gusta tanto?
- Performance similar a C, C++
- Zero cost abstactions (no se paga un costo por ser idiomático)
- Se puede hacer programación a bajo nivel, native modules (pero de forma más segura)
- Código de alto nivel, performance de bajo nivel
- No hay nulls
- Soporte para generics, pattern matching
- Iteradores, traits, closures
- Mutexes amigables
- Tooling moderno
Concurrencia
Se resuelve el data race con los conceptos de ownership y borrowing, sharing y mutation. Estos últimos dos conceptos no se pueden aplicar al mismo tiempo (evitando así el data race)
El costo de usar Rust es la compilación: se pasa tiempo de corrección de bugs a compilación (si compila, en general anda, pero cuesta hacer que el programa compile por la cantidad de restricciones que tiene)