lunes, 24 de abril de 2017

El código enigma

Hoy hablaré sobre una película del año 2014 que habla sobre Alan Turing y la máquina enigma durante la segunda guerra mundial, una máquina que fue un secreto por muchas décadas después de la guerra y la vida de una de las mentes más brillantes de la historia.

La canción de este blog será "Rundabout" por Yes, espero que les guste.



El código enigma es una película dirigida por Morten Tyldum que se estrenó en el año 2014, en donde se relata la historia de Alan Turing y sus colegas desarrollando una máquina que resolviera problemas de criptograma para ayudar a descifrar mensajes alemanes durante la segunda guerra mundial.

La película relata el conflicto interno del equipo de intelectuales entre buscar resolver el problema a mano, como se estaba haciendo desde antes o la máquina enigma, propuesta por Alan Turing. 

La tensión aumenta conforme la guerra avanzaba, Alan Turing logra resolver el problema utilizando el mismo enfoque se utiliza en análisis de frecuencia en criptografía pero para dos palabras que sabían por mensajes previamente descifrados y conocimiento de las operadoras de las máquinas que transcribían los mensajes interceptados de los alemanes "Heil Hitler".

Lo siguiente fue desarrollar un método para analizar la información y determinar acciones que causaran el mayor beneficio para los Aliados sin que los Alemanes sospecharan que los fracasos de debían a que habían logrado romper un cifrado que se consideraba imposible de romper.

Después de la guerra Turing escribió distintos artículos que luego se convertirían en las bases de la computación, utilizando paradigmas que hasta ahora siguen siendo válidos, entre ellos, la máquina de Turing.

La película es entretenida y definitivamente la recomendaría, no solo a los aficionados de la tecnología.

Wololo. 

viernes, 14 de abril de 2017

Welcome to the Jungle

Hoy escribiré sobre el artículo "Welcome to the Jungle" por Herb Sutter.

Como es costumbre, publicaré una canción para el blog de hoy, y dado el título del post es imposible elegir otra, la canción será "Welcome to the Jungle" cover por Postmodern Jukebox ft. Daniela Andrade.


El artículo por Herb Sutter habla de las alternativas que han surgido y que gradualmente se harán más comunes para contrarrestar el fin de la ley de Moore, desde la popularización de dispositivos multinúcleo, la proliferación de distintos tipos de procesadores y sus variantes especializadas, hasta cómputo en la nube.

Como todo en la industria de software, no existe una alternativa que sea "mejor" que la otra, sino que todas buscan solucionar de una forma un problema y al final ofrecen un trade-off, y a medida que uno desarrolle una solución de software es probable que termine optando por un enfoque híbrido, tratando de maximizar los beneficios de cada uno de los trade-offs.

Es importante mencionar que el artículo fue escrito en el 2011, por lo que vale la pena hacer una comparación de las premisas que profetizaba Sutter al momento de escribir el artículo con la actualidad.

Los dispositivos multinúcleo desde el momento en que se escribió el artículo ya eran prácticamente algo estándar en el mercado, en la actualidad casi todos los dispositivos tienen al menos dos núcleos (la mayor parte ya cuenta con cuatro, y algunos high-end ocho). Por lo que desarrollar aplicaciones multinúcleo ya es una práctica relativamente estándar (desde el punto de vista de desarrollo de aplicaciones móviles es una práctica muy común paralelizar lo más eficiente posible una aplicación, ya que son dispositivos que a la fecha cuentan con capacidad de procesamiento relativamente limitada en comparación con computadoras portátiles).

La proliferación de distintos tipos de procesadores especializados ya está sucediendo, la más común siendo los GPUs, desde el punto de vista de gráficos ya es común utilizar CUDA para paralelizar aplicaciones en entornos de desarrollo con tarjetas Nvidia u OpenCL para tarjetas AMD.

El cómputo en la nube es algo común, Microsoft, Google y Amazon siendo las empresas más importantes en soluciones de cómputo en la nube.

Sin duda en los próximos años definir arquitecturas de desarrollo que aprovechen lo mejor de las tres distintas soluciones al fin de la ley de Moore será un problema común de los desarrolladores, ya que se deben contemplar temas de compatibilidad y escalabilidad que antes no eran algo común, el mismo ejecutable iba a tener mejores tiempos de ejecución conforme pasara el tiempo, la responsabilidad de la eficiencia de software acaba de ser transferida de los fabricantes de hardware a los fabricantes de software.

Welcome to the Jungle.
Wololo.


Parallel Computing on any desktop

Después de un breve periodo en el cual desaparecí he vuelto, mejorado, muy similar a Luke Skywalker entre los episodios VI y VII (y aprovechando que hoy la página oficial de Star Wars subió a Youtube el primer teaser del episodio VIII link aquí).

Para el blog de hoy voy a hablar sobre el artículo "Parallel Computing on any desktop" Ami Marowka, pero primero, la canción de este post será "Cheap Thrills" cover por Jacklyn Davies.


Hubo un momento hace muchos años en los que una computadora de múltiples núcleos era algo único para uso científico, militar o académico, sin embargo, desde hace varios años casi cualquier computadora cuenta con al menos dos núcleos (el mejor ejemplo de esto es el Raspberry Pi 3 B, que a un precio de 35$ USD cuenta con un procesador ARMv8 Cuad Core).
El aumento en procesadores en vez de poder de procesamiento puro (ciclos de procesador) ha hecho que los desarrolladores cada vez más necesiten recurrir a programación multinúcleo para aprovechar al máximo la capacidad de procesamiento de un ordenador, y cómo es de suponer, a medida que se ha vuelto más común se han desarrollado distintas librerías o han surgido nuevos paradigmas para facilitar la programación multinúcleo (para C existe la librería OPENMP, que abstrae gran parte del overhead que implica desarrollar aplicaciones multi-threaded en C, como locks/semáforos), facilitando al desarrollador convertir un programa single-threaded a multi-threaded cambiando una cantidad mínima de código.
Del lado de los nuevos paradigmas, más que "surgir" paradigmas nuevos, se han popularizado paradigmas existentes que hasta ahora habían sido poco aprovechados, específicamente los lenguajes de programación funcionales, han surgido lenguajes como Clojure y Elixir y se han popularizado lenguajes existentes como Haskell, Python enfocado a programación funcional y R.

La programación multinúcleo es la única forma en la que los programadores podemos aprovechar al máximo una computadora después de que se dejó de cumplir la ley de Moore, por lo que es indispensable que un desarrollador aprenda a desarrollar programas multi-threaded así cómo a identificar problemas comunes que pueden surgir (específicamente race conditions).

Wololo.

miércoles, 25 de enero de 2017

The Free Lunch Is Over

Hoy voy a hablar sobre el artículo: "The free lunch is over: A fundamental turn toward concurrency in software" por Herb Sutter.

Pero antes, empecemos con la canción para esta entrada, será "Vidas Paralelas" de Ximena Sariñana.


The free lunch se refiere a la vieja práctica en la que los desarolladores, sabiendo que cada dos años se duplicaba la capacidad de procesamiento de las computadoras podían ser relativamente irresponsables al momento de implementar una solución, con la confianza de que en máximo dos años (al terminar el desarollo de la aplicación). Las computadoras comunes serían capaces de ejecutarlo sin problemas.

El problema es que antes del 2005 la ley de Moore ya no aplica del todo con procesadores actuales, la velocidad base de un procesador se ha estancado alrededor de 3.0 Ghz. Lo que los fabricantes de hardware han hecho para compensar esto (además de optimizaciones y arquitecturas macabras, sí, estoy hablando de ti, Cannonlake) es agregar núcleos y hyperthreads, esto implica que los desarrolladores, si quieren realmente aumentar el rendimiento de sus aplicaciones deben tomar en cuenta las siguientes cosas:

Tener disponibles más núcleos no duplica (o cuatriplica) la velocidad de un proceso, en primera, porque agrega overhead que es el tiempo que tarda en que ambos núcleos se coordinen, en segunda, si una aplicación no soporta programación multinúcleo, su tiempo de ejecución va a ser similar en una computadora que tenga 1, 2, 4 u 8 núcleos. Sin embargo, si la aplicación ocupa un 100% del procesador, un usuario con más núcleos va a sentir su computadora más fluida, al poder usar los demás núcleos para otras tareas (cómo abrir Facebook, escuchar la nueva canción de Justin Bieber o leer mi último post) mientras la tarea se ejecuta.

Sin embargo, cualquier aplicación que esté diseñada para obtener el máximo rendimiento de una computadora (sí, ahora estoy hablando de ti, No Man's Sky). Debe estar diseñada y programada para soportar concurrencia.

Esto también implica una revolución en lenguajes de programación, ya que éstos deben estar diseñados para soportar concurrencia de una forma lo más simple posible para el desarrollador sí, ahora estoy hablando de lenguajes que no soportan programación multinúcleo sin llamar a otro low level language como C, haciendo prácticamente inútil haber utilizado al lenguaje de alto nivel desde un principio (LUA).

Es por ello que el futuro aparenta ser lenguajes funcionales, ya que por su naturaleza no necesitan utilizar locks para evitar corromper la información, hablo de lenguajes como Clojure o cualquier dialecto de Lisp, Perl, o Elixir.

Como el artículo lo menciona, la programación multinúcleo es para los desarrolladores actuales el equivalente a la programación orientada a objetos, ya que aprovechará mejor los cambios en hardware de las computadores de los últimos 15 años.

Eso es todo por esta entrada, espero haya sido una lectura agradable.

Wololo.

lunes, 23 de enero de 2017

Sillicon Valley

En esta entrada hablaré de un video y un lugar donde nació no solo la innovación tecnológica sino también la cultura que define a prácticamente cualquier computólogo, nuestro Atenas, Sillicon Valley.

La canción de esta entrada será "California Deamin'", hecha cover por Calix.

Nuestra historia empieza con un recién premio novel, un grupo de científicos y un sueño. Dejar Shockley Semiconductor para fundar su propia compañia, el año es 1957, cuando aún no existía este paradigma social que valora más fundar tu propia compañía que quedarte toda la vida y retirarte.

El documental habla de las dificultades que Robert Noyce, junto con los científicos de su nueva empresa, Fairchild Semiconductor, tuvieron para tener éxito en la industria de los semiconductores, en ese entonces casi dominada por Texas Instruments. Desde conseguir inversionistas, sus batallas legales por patentes, hasta dejar nuevamente la empresa por problemas con los inversionistas para fundar una nueva empresa, Intel.





Se menciona mucho en el documental cómo los inventos llegan a la sociedad en un momento crítico, y que si Robert Noyce junto con su equipo no hubieran desarrollado la tecnología que eventualmente se convirtió en el procesador, alguien más lo hubiera hecho. Sin embargo, el documental también menciona que las condiciones en las que el equipo de Noyce fue desarrollando los avances tecnológicos, junto con la personalidad de Noyce y su visión de equipo y liderazgo, fue un pilar importante en la creación de lo que ahora conocemos cómo la cultura de Sillicon Valley, de una región dedicada casi en su totalidad a la cuna del avance tecnológico.



Sillicon Valley es ahora sinónimo de emprendimiento y de tecnología, para cualquier computólogo es el equivalente para un artista de Los Angeles. Con compañías como Google, Apple, Intel y Facebook teniendo sus oficinas centrales en Sillicon Valley y otras miles de startups. Todo eso es en gran medida resultado de la historia de Robert Noyce y su equipo, que hace más de cincuenta años decidieron buscar su sueño en California.

Wololo.



lunes, 16 de enero de 2017

Introducción a programación multinucleo

Antes de comenzar la entrada de hoy, como es tradición, compartiré una canción por si desean acompañar la lectura de esta entrada con algo de música, para esta entrada es "Parallel Universe" de Red Hot Chili Peppers, porque hasta ahora hablar de lo que sucede en programación multinúcleo es como tratar de explicar lo que sucede en universos paralelos (espero que eso cambie a lo largo del curso).




Mi nombe es Kevin y en este blog escribiré sobre las lecturas, videos y actividades que realice en la clase de programación multinucleo impartida por el profesor Ariel Ortiz en el Tecnológico de Monterrey, campus Estado de México.

Encontrarán en este blog un espacio de reflexión sobre la programación multinucleo en C, Java y Erlang (también sobre mis legendarios chistes malos de programar en Lua).

Esta es la primera entrada del blog así que si es la primera vez que lees uno de mis blogs, aquí encontrarás una breve introducción:


Actualmente estudio ingeniería en sistemas computacionales en el Tecnológico de Monterrey,
me encuentro en último semestre. Me dedico a programar aplicaciones móviles por el momento. Músico de closet. Mis series favoritas son Rick and Morty, Lost, Adventure Time, Mr. Robot.
Creo en los lenguages de programación experimentales. Pseudo-gamer.

Y eso es todo por esta entrada, la vida es corta, inviten a esa chica a salir.

Wololo.