{ "metadata": { "name": "", "signature": "sha256:b6ac1a42853a0f74132600d64d9f2133e5cf4261bbf57942e4d6b64852af7583" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "![CACheme](imgTeleOctave/logo.png \"CAChemE.org\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Autora: *Zuria Bauer Hartwig* ( [CAChemE](http://cacheme.org) Lightning Talk)" ] }, { "cell_type": "raw", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "18.02.2015 - Licenciado bajo Creative Commons (CC-BY)" ] }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "C\u00e1lculos con Octave y Telegram en el m\u00f3vil" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "TeleOctave es un proyecto de [Eric Cervera](http://robinlab.uji.es/users/enric-cervera) que nos trae lo que promete por su nombre: la alternativa libre a MATLAB ([GNU Octave](https://www.gnu.org/software/octave/)) mediante un chat v\u00eda [Telegram](https://telegram.org) (una aplicaci\u00f3n gratuita tipo Whatsapp que deber\u00edas probar)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![img](imgTeleOctave/telegram-demo.gif)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "*\u00bfC\u00f3mo lo han conseguido?*" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Se ha conseguido gracias a la API de Telegram que es open source y permite establecer puntos de entrada y salida de informaci\u00f3n diferentes a las aplicaciones oficiales. En este caso, chateamos con un ordenador con GNU Octave instalado (tambi\u00e9n Open Source), que hace realiza los c\u00e1lculos que le pedimos y nos devuelve los resultados al m\u00f3vil. Adem\u00e1s, funciona con todas las aplicaciones de Telegram, es decir que puedes usarlo adem\u00e1s desde el navegador y/o ordenador mientras chateas con tus contactos." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "**C\u00f3mo usarlo...**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Buscando el perfil p\u00fablico de @TeleOctave en Telegram y a\u00f1adi\u00e9ndolo en tus contactos (\u00a1muy f\u00e1cil!)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Una vez hecho esto, si escribimos un script .m o serie de comandos y lo mandamos, recibiremos al instante una respuesta originada por el servidor con el resultado (o un mensaje de error si nos hemos equivocado)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Las posibles aplicaciones son varias. Aqu\u00ed algunos de los ejemplos que m\u00e1s me han gustado:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "**C\u00e1lculo simb\u00f3lico**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```Octave\n", "syms x\n", "\n", "int(x^2)\n", "\n", "diff(sin(x)*cos(x)*x^2,x)\n", "\n", "```\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "![img](imgTeleOctave/simbolico.gif)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "**Representaciones Gr\u00e1ficas**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```Octave\n", "\n", "x=linspace(0, 2*pi, 100);\n", "y=sin(x);\n", "plot(x,y)\n", "\n", "x = 12.*sin(t) -4.*sin(3.*t) ;\n", "y = 13.*cos(t) - 5.*cos(2.*t) - 2.*cos(3.*t) - cos(4.*t);\n", "y = 13.*cos(t) - 5.*cos(2.*t) - 2.*cos(3.*t) - cos(4.*t);\n", "plot(x, y)\n", "fill(x, y, 'r')\n", "title('CAChemE','FontSize',28)\n", "\n", "[x, y, z] = peaks(30);\n", "surfc(x, y, z)\n", "\n", "x = linspace(0,500,10000);\n", "plot(x,exp(-x/100).*sin(x));\n", "title('Una funcion cualquiera')\n", "xlabel('Tiempo')\n", "ylabel('Amplitud')\n", "\n", "x = linspace(-pi,pi,100);\n", "polar(x, cos(2.*x));\n", "\n", "x=[-2:0.1:2];\n", "[xx,yy]=meshgrid(x,x);\n", "z=sin(xx.^2 - yy.^2);\n", "grid\n", "mesh(x,x,z)\n", "\n", "t = 0:0.1:10*pi;\n", "r = linspace (0, 1, length(t));\n", "z = linspace (0, 1, length(t));\n", "plot3 (r.*sin(t), r.*cos(t), z, 'linewidth',2)\n", "\n", "```\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![img](imgTeleOctave/plots.gif)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hasta ayer, @TeleOctave no pod\u00eda resolver ecuaciones diferenciales de forma directo ya que no dispon\u00eda del paquete de ODEs necesario para ello. \n", "\n", "Hasta ayer...\n", "![img](imgTeleOctave/conversando-con-Octave.PNG)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Empecemos con una ecuaci\u00f3n diferencial f\u00e1cil:\n", "$$\\frac{dy}{dt} = -5y$$\n", "$$y(0)=1.5$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```Octave\n", "% C\u00f3digo para TeleOctave\n", "function dy = ecdif (t,y)\n", "dy = -5*y;\n", "end\n", "\n", "[t,y]=ode45(@ecdif,[0 2],1.5);\n", "plot(t,y)\n", "title(\"Resolviendo 'dy/dt = -5y' con TeleOctave\")\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![CACheme](imgTeleOctave/edo-demo.gif)" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "\u00bfSer\u00e1 capaz de resolver un sistema de EDOs para simular un [reactor qu\u00edmico](http://cacheme.org/curso-octave-matlab-ingenieros-quimicos/) RFP?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Copia y pega el siguiente c\u00f3digo y desc\u00fabrelo por ti mismo ;)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "``` Octave\n", "% C\u00f3digo para TeleOctave\n", "function dy = ecdif(V,y);\n", "Qvo = 10; %m3\u00b7min-1\n", "Co = [1 1 0 0 0 0]; %mol/m3\n", "No = Co*Qvo; %mol\u00b7s-1\n", "\n", "% Matriz con coef.estequiom\u00e9tricos\n", "% NH3 O2 NO H2O N2 NO2\n", "alfa = [-4 -5 4 6 0 0;\n", "-2 -3/2 0 3 1 0;\n", "0 -1 -2 0 0 2;\n", "-4 0 -6 6 5 0];\n", "\n", "\n", "k = [5/4 1 10 5/6];\n", "\n", "Qv = Qvo*sum(y)/sum(No);\n", "C = y/Qv;\n", "\n", "r(1) = k(1)*C(1)*(C(2))^2;\n", "r(2) = k(2)*C(1)*C(2);\n", "r(3) = k(3)*(C(3))^2*C(2);\n", "r(4) = k(4)*C(3)*(C(1))^(2/3);\n", "\n", "dy=r*alfa;\n", "end\n", "\n", "\n", "Vo = 0; %m3\n", "Vf = 10; %m3\n", "Qvo = 10; %m3\u00b7min-1\n", "Co = [1 1 0 0 0 0]; %mol/m3\n", "No = Co*Qvo; %mol\u00b7min-1\n", "intervalo = [Vo Vf];\n", "inicial = No;\n", "\n", "[V,y] = ode45(@ecdif,intervalo,inicial);\n", "\n", "figure(1)\n", "plot(V,y(:,1),'k',V,y(:,2),'g',V,y(:,3),'r',V,y(:,4),'b',V,y(:,5),'y',V,y(:,6),'m');\n", "xlabel('Volumen de reactor / m3');\n", "ylabel('Concentraci\u00f3n / mol/m3');\n", "title('Evoluci\u00f3n de la concentraci\u00f3n de reactivos en RFP');\n", "legend('NH3','O2','NO','H2O','N2','NO2');\n", "grid();\n", "```" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "\u00bfCu\u00e1l es el futuro de @TeleOctave?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los rumores apuntan a que Eric est\u00e1 trabajando en poder controlar un brazo robot a distancia y desde el m\u00f3vil. Sin duda, una forma *cool* de dominar el mundo ;)\n", "\n", "Puedes seguir el trabajo de su grupo de investigaci\u00f3n de Eric desde su p\u00e1gina web [(Robotic Intelligence Laboratory - Universitat Jaume I, Castell\u00f3n - Spain)](http://robinlab.uji.es/)" ] }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Todo esto es muy bonito pero... \u00bfde qu\u00e9 me sirve?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Sirve para ver todas las posibilidades que tenemos hoy en d\u00eda, es decir, ya que Telegram y GNU Octave son c\u00f3digo abierto se ha podido desarrollar TeleOctave. Esto muestra que TODOS podemos colaborar, un ejemplo de esto podr\u00eda ser [la iniciativa de Google](http://googleresearch.blogspot.com.es/2014/08/doing-data-science-with-colaboratory.html) para incluir IPython/Jupyter en su servicio de Google Docs." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Creado por **Matthew Turk**, y el equipo de desarrollo [IPython](http://ipython.org/) / [Jupyter](http://jupyter.org/), el programa [**CoLaboratory**](https://colaboratory.jupyter.org/) combinar\u00e1 los productos de c\u00f3digo abierto con las tecnolog\u00edas de Google, lo que permite que varias personas colaboren directamente a trav\u00e9s del acceso y an\u00e1lisis de datos simult\u00e1neos. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "La App de Chrome instala CoLaboratory, IPython, y un gran conjunto de bibliotecas. Por otra parte, debido a que usa Native Client Portable (PNaCl), Colaboratory funcionar\u00e1 de forma m\u00e1s r\u00e1pida que nunca.\n", "\n", "Adem\u00e1s de la facilidad de instalaci\u00f3n, CoLaboratory permite la colaboraci\u00f3n entre personas con diferentes habilidades. Un ejemplo de esto ser\u00eda la interacci\u00f3n entre los programadores que escriben l\u00f3gica compleja en el c\u00f3digo y no programadores que est\u00e1n m\u00e1s familiarizados con interfaces gr\u00e1ficas de usuario. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "![CACheme](imgTeleOctave/CoLaboratory.jpg \"CAChemE\")" ] }, { "cell_type": "heading", "level": 6, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Ale... \u00a1a programar! ;)" ] }, { "cell_type": "heading", "level": 5, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Bibliograf\u00eda en la que me he basado:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- TeleOctave (Facebook) - https://www.facebook.com/TeleOctave\n", "- TeleOctave - http://teleoctave.altervista.org/\n", "- xatakandroid - http://www.xatakandroid.com/productividad-herramientas/teleoctave-la-potencia-de-calculo-de-octave-a-traves-de-un-chat-en-telegram\n", "- Google Research Blog - http://googleresearch.blogspot.com.es/2014/08/doing-data-science-with-colaboratory.html" ] } ], "metadata": {} } ] }