├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── Gemfile
├── Gemfile.lock
├── LICENSE
├── README.md
├── _config.yml
├── _drafts
├── 2014-3-14-arch.md
├── 2014-4-12-p-np.md
├── 2014-7-30-dimension-fractal.md
├── 2015-12-14-jekyll-blog-dgiim.md
├── 2015-3-14-godel.md
├── 2015-4-1-r.md
├── 2015-8-9-topological-sort.md
└── recursos.md
├── _includes
├── banner
├── breadcrumbs.html
├── figure
├── footer.html
├── header.html
├── list_post.html
├── pagination.html
└── tag_list.html
├── _layouts
├── category_index.html
├── collection_index.html
├── content-outer.html
├── content.html
├── default.html
├── post-outer.html
├── post.html
├── resource.html
└── tag_index.html
├── _plugins
├── _category_index.rb
├── _collection_index.rb.false
└── _tag_index.rb
├── assets
├── css
│ ├── default.scss
│ ├── github.min.css
│ └── pygments-friendly.css
├── fonts
│ ├── LICENSE.txt
│ ├── README.txt
│ ├── config.json
│ ├── css
│ │ ├── animation.css
│ │ ├── iconim-codes.css
│ │ ├── iconim-embedded.css
│ │ ├── iconim-ie7-codes.css
│ │ ├── iconim-ie7.css
│ │ └── iconim.css
│ ├── demo.html
│ └── font
│ │ ├── iconim.eot
│ │ ├── iconim.svg
│ │ ├── iconim.ttf
│ │ ├── iconim.woff
│ │ └── iconim.woff2
├── images
│ ├── blog
│ │ ├── emacs-which-key.png
│ │ ├── emacs.png
│ │ ├── guia-primero
│ │ │ ├── real_programmers.html
│ │ │ └── wisdom_of_the_ancients.html
│ │ ├── org-math.png
│ │ ├── segment_trees
│ │ │ ├── segment_trees.tex
│ │ │ ├── segment_trees_heap.png
│ │ │ └── segment_trees_visualizacion.png
│ │ └── ubuntu_press_s_to_mount.png
│ ├── favicon-160.png
│ ├── favicon.ico
│ ├── home
│ │ ├── blackboard.jpg
│ │ ├── community.jpg
│ │ ├── knowledge.png
│ │ └── software.jpg
│ ├── logo.png
│ ├── new-resource-1-fork.jpeg
│ ├── new-resource-2-propose.jpeg
│ ├── new-resource-3-compare.jpeg
│ ├── new-resource-4-create.jpeg
│ ├── sq_comment.png
│ ├── sq_diaspora.png
│ ├── sq_facebook.png
│ ├── sq_feedly.png
│ └── sq_twitter.png
└── js
│ └── new.js
├── awesome.html
├── blog
├── _posts
│ ├── 2014-10-1-intro-haskell.md
│ ├── 2014-10-19-data-mining.md
│ ├── 2014-10-4-intro-categorias.md
│ ├── 2014-11-8-algoritmos-geneticos.md
│ ├── 2014-12-4-curry-howard.md
│ ├── 2014-2-23-manualgit.md
│ ├── 2014-4-12-desigualdad-medias.md
│ ├── 2014-6-24-introduccion-javascript.md
│ ├── 2015-08-24-ruby-enumerators.md
│ ├── 2015-09-10-primero.md
│ ├── 2015-2-14-problema-fibonacci-gcd.md
│ ├── 2015-3-14-aproximacion-a-pi.md
│ ├── 2015-3-14-induccion-estructural.md
│ ├── 2015-3-14-intro-beamer.md
│ ├── 2015-3-14-latex.md
│ ├── 2015-3-15-arch.md
│ ├── 2015-3-24-algebra-tipos.md
│ ├── 2015-4-20-teorema-dini.md
│ ├── 2015-7-17-segment-tree.md
│ ├── 2016-01-08-teoria-de-tipos.md
│ ├── 2016-07-22-apuntes-de-introduccion-al-calculo.md
│ ├── 2016-09-19-aprendiendo-emacs.md
│ ├── 2016-10-16-apuntes.md
│ ├── 2016-12-21-monadas.md
│ ├── 2017-02-07-apuntes-de-lgebra-ii-en.md
│ ├── 2017-03-25-zfc.md
│ ├── 2017-05-05-emacs-lazy.md
│ ├── 2017-11-09-calculolambda.md
│ └── 2018-03-01-medias.md
├── archive.md
├── feed.xml
└── index.html
├── calendar.html
├── contributing.html
├── deploy.sh
├── guia-de-estilo.md
├── index.html
├── nota-foro.md
├── recursos
├── _posts
│ ├── 2014-08-11-geneticos.md
│ ├── 2014-09-27-primerseminario.md
│ ├── 2014-10-18-tercerseminario.md
│ ├── 2014-10-25-cuartoseminario.md
│ ├── 2014-10-4-segundoseminario.md
│ ├── 2014-11-22-sextoseminario.md
│ ├── 2014-11-29-septimoseminario.md
│ ├── 2014-11-8-quintoseminario.md
│ ├── 2014-12-13-octavoseminario.md
│ ├── 2014-12-16-novenoseminario.md
│ ├── 2015-1-10-decimo.md
│ ├── 2015-1-17-undecimo.md
│ ├── 2015-1-31-duodecimo.md
│ ├── 2015-10-17-vigesimoprimer.md
│ ├── 2015-10-24-vigesimosegundo.md
│ ├── 2015-12-12-vigesimotercer.md
│ ├── 2015-2-14-decimocuarto.md
│ ├── 2015-2-21-decimoquinto.md
│ ├── 2015-2-7-decimotercer.md
│ ├── 2015-3-14-decimoseptimo.md
│ ├── 2015-3-7-decimosexto.md
│ ├── 2015-4-25-decimoctavo.md
│ ├── 2015-5-16-vigesimo.md
│ ├── 2015-5-8-decimonoveno.md
│ ├── 2016-07-22-calculo.md
│ ├── 2016-09-01-apuntesdgiim.md
│ ├── 2016-1-9-vigesimocuarto.md
│ ├── 2016-10-22-vigesimosexto.md
│ ├── 2016-11-18-vigesimoseptimo.md
│ ├── 2016-12-10-vigesimooctavo.md
│ ├── 2016-5-7-vigesimoquinto.md
│ ├── 2017-01-26-plantillas-latex.md
│ ├── 2017-01-30-inferenciaestadistica.md
│ ├── 2017-05-12-introcategorias.md
│ ├── 2017-07-31-aprendizaje-pac.md
│ ├── 2017-08-17-tfggeneralrelativityraytracer.md
│ ├── 2017-08-17-tfgreducciondimensionalidad.md
│ ├── 2017-09-30-trigésimo-quinto-seminario.md
│ ├── 2017-1-14-vigesimonoveno.md
│ ├── 2017-10-21-trigésimo-octavo-seminario.md
│ ├── 2017-10-6-trigésimo-sexto-seminario.md
│ ├── 2017-10-7-trigésimo-séptimo-seminario.md
│ ├── 2017-11-10-cuadragesimo-seminario.md
│ ├── 2017-11-18-cuadragesimo-primer-seminario.md
│ ├── 2017-11-29-algebrabasica.md
│ ├── 2017-11-29-analisisfuncional.md
│ ├── 2017-11-29-curso0matematicas.md
│ ├── 2017-11-29-cursolatexamat.md
│ ├── 2017-11-29-fundamentoslogicos.md
│ ├── 2017-11-29-matematicadiscreta.md
│ ├── 2017-11-4-trigésimo-noveno-seminario.md
│ ├── 2017-11-6-ruby-on-rails-tutorial.md
│ ├── 2017-3-25-trigesimo-primer.md
│ ├── 2017-3-4-trigesimo.md
│ ├── 2017-4-1-trigesimosegundo.md
│ ├── 2017-5-13-trigesimotercer.md
│ ├── 2017-8-2-deep-learning-book.md
│ ├── 2017-8-2-teoría-de-la-información.md
│ ├── 2017-9-23-wikibooks:-latex.md
│ ├── 2017-9-24-aprendizaje-pac.-clasificación-no-binaria.md
│ ├── 2017-9-26-homologia-singular.-problema-del-clique-maximo.md
│ ├── 2017-9-27-logica-multiagente-para-nociones-epistemologicas-basicas.md
│ ├── 2017-9-30-trigésimo-cuarto-seminario.md
│ ├── 2018-01-19-cuadragesimo-segundo-seminario.md
│ ├── 2018-06-21-cuadragesimo-octavo-seminario.md
│ ├── 2018-09-21-cuadragesimo-noveno-seminario.md
│ ├── 2018-09-22-quincuagesimo-seminario.md
│ ├── 2018-09-29-quincuagesimo-primero-seminario.md
│ ├── 2018-1-27-cuadragesimo-tercer-seminario.md
│ ├── 2018-10-06-quincuagesimo-segundo-seminario.md
│ ├── 2018-10-20-quincuagesimo-tercer-seminario.md
│ ├── 2018-12-01-quincuagesimo-cuarto-seminario.md
│ ├── 2018-12-15-quincuagesimo-quinto-seminario.md
│ ├── 2018-2-2-advanced-r.md
│ ├── 2018-2-23-cuadragesimo-cuarto-seminario.md
│ ├── 2018-3-16-introducciongrafos.md
│ ├── 2018-3-3-cuadragesimo-quinto-seminario.md
│ ├── 2018-3-9-cuadragesimo-sexto-seminario.md
│ ├── 2018-3-9-ring-theory-notes.md
│ ├── 2018-4-28-cuadragesimo-septimo-seminario.md
│ ├── 2018-7-18-tfgcategorytheorylambdacalculus.md
│ ├── 2019-02-23-quincuagesimo-sexto-seminario.md
│ ├── 2019-03-16-quincuagesimo-septimo-seminario.md
│ ├── 2019-03-30-quincuagesimo-octavo-seminario.md
│ ├── 2019-04-26-quincuagesimo-noveno-seminario.md
│ ├── 2019-04-27-sexagesimo-seminario.md
│ ├── 2019-05-18-sexagesimo-primer-seminario.md
│ ├── 2019-10-02-sexagesimo-segundo-seminario.md
│ └── 2019-10-19-sexagesimo-tercer-seminario.md
├── archive.md
├── index.md
└── new.html
└── update_versions.rb
/.gitignore:
--------------------------------------------------------------------------------
1 | _site/
2 | .sass-cache/
3 | .jekyll-metadata
4 | *~
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: ruby
2 |
3 | rvm:
4 | - 2.4.1
5 |
6 | git:
7 | submodules: false
8 |
9 | # Adapted from https://github.com/iblancasa/blog_files/blob/master/.travis.yml
10 | before_install:
11 | # - sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules
12 | # - git submodule update --init --recursive
13 | - |
14 | gem install bundler
15 | git config --global user.email "dgiimblog@gmail.com"
16 | git config --global user.name "dgiimbot"
17 | if [ "$TRAVIS_BRANCH" = "sites" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then
18 | git clone -b master https://${DGIIMBOT_TOKEN}@github.com/libreim/libreim.github.io.git .site
19 | fi
20 | chmod u+x deploy.sh
21 |
22 | script: "./deploy.sh"
23 |
24 | after_success:
25 | - |
26 | if [ "$TRAVIS_BRANCH" = "sites" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then
27 | cd .site
28 | git add * && \
29 | git add . --all && \
30 | git commit -m "`date`" && \
31 | git push origin master --quiet
32 | fi
33 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contribuciones
2 |
3 |
4 |
5 | ## Colaborar con posts
6 |
7 | Un post puede tratar sobre cualquier tema que te parezca interesante relacionado
8 | con matemáticas e informática. Exponer características de un lenguaje de programación,
9 | resolver un problema de geometría clásica, explicar un sistema de paquetes, una
10 | aplicación de la programación lineal, qué es un comonoide, cómo trata Ruby la
11 | visibilidad de los métodos o la sintaxis del cálculo lambda son ideas
12 | muy válidas para un post. Además, entre las [issues de este repositorio](https://github.com/libreim/blog/labels/post) podrás encontrar
13 | varios temas que querríamos tratar y que están todavía abiertos.
14 |
15 | ### Añadir un nuevo post
16 |
17 | En primer lugar, debes hacer un fork del blog en tu cuenta de Github. Trabajaremos en nuestra propia rama y cuando consideremos que nuestro post esta terminado realizaremos una Pull Request.
18 |
19 | Para añadir un nuevo post basta con añadir el archivo con nombre `YYYY-MM-DD-nombre-de-mi-post.md` dentro de la carpeta `./blog/_posts` con el contenido de nuestro post. Además, debes añadir a tu archivo una cabecera con datos sobre el post como la del recuadro inferior.
20 |
21 | ~~~yaml
22 | ---
23 | layout: post
24 | title: Nuestro título
25 | authors:
26 | - Mi Nombre Y Apellido
27 | lang: es
28 | category: Categoría
29 | ---
30 | ~~~
31 |
32 | En caso de que no funcionara lo anterior, puede enviarse
33 | el post a libreim.blog@gmail.com y dejar que alguien se
34 | encargue de publicarlo.
35 |
36 |
37 | ### Contenido
38 |
39 | La [guía de estilo](//github.com/libreim/blog/blob/sites/guia-de-estilo.md) te servirá de
40 | chuleta para la sintaxis de Markdown y algunas peculiaridades acerca de como dar
41 | formato correctamente a tu post.
42 |
43 | ### Construir localmente
44 |
45 | Para comprobar si tu post queda como quieres, puedes construir y servir el blog
46 | de forma local. Para ello necesitarás tener Ruby instalado en tu máquina. La
47 | primera vez que vayas a construir el blog tendrás que obtener las dependencias:
48 |
49 | ~~~sh
50 | $ gem install bundler
51 | $ bundle
52 | ~~~
53 |
54 | Tras este paso, cada vez que quieras construir el blog, simplemente ejecuta
55 |
56 | ~~~sh
57 | $ bundle exec jekyll serve
58 | ~~~
59 |
60 | y lo tendrás disponible en `http://localhost:4000/blog/`.
61 |
62 | ### Enviar a revisión
63 |
64 | Revisamos los posts entre colaboradores para asegurar en la medida de lo posible
65 | la corrección de los posts. Cuando creas que tu post está listo para revisar,
66 | realiza una pull request desde tu navegador al repositorio original del blog.
67 | Rellena un poco la descripción y créala. A partir de entonces espera a que
68 | al menos dos colaboradores den su visto bueno, y pide a alguno de ellos
69 | que mezcle la *pull request*.
70 |
71 | ## Otras formas de colaborar
72 |
73 | Este blog no solo vive de los posts escritos. También puedes ayudar de otras
74 | maneras.
75 |
76 | ### Revisión
77 |
78 | Si el blog recibe un post mediante una [*pull request*](https://github.com/libreim/blog/pulls)
79 | y crees que tienes conocimientos generales sobre el tema suficientes para
80 | revisarlo y corregir posibles errores, clona el repositorio y cambia a la rama
81 | conveniente:
82 |
83 | ~~~sh
84 | $ git clone https://github.com/libreim/blog.git
85 | $ cd blog
86 | $ git checkout post-nombre-del-post
87 | ~~~
88 |
89 | Utiliza `Jekyll` para [construir el blog localmente](#construir-localmente).
90 | Los errores que encuentres y correcciones que quieras realizar puedes comentarlos
91 | en la *pull request* asociada.
92 |
93 | Cuando consideres que el post esté listo para ser publicado, asegúrate de dejar
94 | un comentario en la *pull request* dando tu visto bueno.
95 |
96 | ### Parte técnica
97 |
98 | En el repositorio del blog tenemos más issues además de los posts, relacionadas con el aspecto técnico
99 | de mantener un blog. Puedes colaborar intentando solucionar cualquiera de ellas, o abriendo una nueva en
100 | caso de que detectes algún error.
101 |
102 |
103 | ## Escribir artículos para el blog
104 |
105 | Cualquier tema relacionado con las matemáticas y la ingeniería informática es apto para este blog.
106 |
107 | Si quieres empezar a escribir tu artículo, puedes usar [**StackEdit**](https://stackedit.io/), que es un editor online de [Markdown](https://daringfireball.net/projects/markdown/)
108 | y [Mathjax](https://www.mathjax.org/) con el que puedes previsualizar cómo quedarán las fórmulas matemáticas y el formato de tu artículo antes de enviarlo.
109 | Cuando lo termines, puedes enviarlo a **libreim.blog+posts@gmail.com**. A partir de ahí, empezaremos un proceso de revisión desde [GitHub](https://github.com/libreim/blog/pulls)
110 | para asegurarnos de que no haya ninguna errata y que sigue la [guía de estilo](libreim.github.io/blog/styleguide/). En cuanto
111 | esté revisado, lo publicaremos en el blog.
112 |
113 | ### Licencia
114 | Los contenidos del blog se publican por defecto en licencia de [Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional](http://creativecommons.org/licenses/by-sa/4.0/).
115 | Si nos envías tu artículo, asumiremos esta licencia a no ser que prefieras indicarnos otra licencia libre. En cualquier caso,
116 | incluye tu nombre para que podamos indicar tu autoría a la hora de publicarlo; así como el de otros autores o colaboradores
117 | del artículo.
118 |
119 |
120 | ### Usando GitHub
121 | También puedes presentar tu artículo como un pull-request a este repositorio. Puedes orientarte viendo otros posts escritos en la carpeta `blog/_posts`.
122 |
123 | ## Contribuciones técnicas
124 |
125 | Este blog usa Jekyll para generar un sitio estático. Puedes contribuir en las plantillas (en HTML) o mediante plugins de Jekyll (en Ruby).
126 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | # version estricta en las gemas que especifica github
4 | gem "jekyll", "3.8.5"
5 | gem "minima", "2.5.1"
6 | gem "ffi", "~> 1.9.24"
7 | gem "nokogiri", "1.16.5"
8 |
9 | group :jekyll_plugins do
10 | # gem "jekyll-feed", "~> 0.6"
11 | gem "octopress-paginate"
12 | gem "jekyll-redirect-from", "0.15.0"
13 | gem "jekyll-toc"
14 | end
15 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | addressable (2.8.0)
5 | public_suffix (>= 2.0.2, < 5.0)
6 | colorator (1.1.0)
7 | concurrent-ruby (1.1.5)
8 | em-websocket (0.5.1)
9 | eventmachine (>= 0.12.9)
10 | http_parser.rb (~> 0.6.0)
11 | eventmachine (1.2.7)
12 | eventmachine (1.2.7-x64-mingw32)
13 | ffi (1.9.24)
14 | ffi (1.9.24-x64-mingw32)
15 | forwardable-extended (2.6.0)
16 | http_parser.rb (0.6.0)
17 | i18n (0.9.5)
18 | concurrent-ruby (~> 1.0)
19 | jekyll (3.8.5)
20 | addressable (~> 2.4)
21 | colorator (~> 1.0)
22 | em-websocket (~> 0.5)
23 | i18n (~> 0.7)
24 | jekyll-sass-converter (~> 1.0)
25 | jekyll-watch (~> 2.0)
26 | kramdown (~> 1.14)
27 | liquid (~> 4.0)
28 | mercenary (~> 0.3.3)
29 | pathutil (~> 0.9)
30 | rouge (>= 1.7, < 4)
31 | safe_yaml (~> 1.0)
32 | jekyll-feed (0.12.1)
33 | jekyll (>= 3.7, < 5.0)
34 | jekyll-redirect-from (0.15.0)
35 | jekyll (>= 3.3, < 5.0)
36 | jekyll-sass-converter (1.5.2)
37 | sass (~> 3.4)
38 | jekyll-seo-tag (2.6.1)
39 | jekyll (>= 3.3, < 5.0)
40 | jekyll-toc (0.12.2)
41 | nokogiri (~> 1.9)
42 | jekyll-watch (2.2.1)
43 | listen (~> 3.0)
44 | kramdown (1.17.0)
45 | liquid (4.0.3)
46 | listen (3.2.1)
47 | rb-fsevent (~> 0.10, >= 0.10.3)
48 | rb-inotify (~> 0.9, >= 0.9.10)
49 | mercenary (0.3.6)
50 | mini_portile2 (2.8.6)
51 | minima (2.5.1)
52 | jekyll (>= 3.5, < 5.0)
53 | jekyll-feed (~> 0.9)
54 | jekyll-seo-tag (~> 2.1)
55 | nokogiri (1.16.5)
56 | mini_portile2 (~> 2.8.2)
57 | racc (~> 1.4)
58 | nokogiri (1.16.5-x64-mingw32)
59 | racc (~> 1.4)
60 | octopress-hooks (2.6.2)
61 | jekyll (>= 2.0)
62 | octopress-paginate (1.2.0)
63 | octopress-hooks
64 | pathutil (0.16.2)
65 | forwardable-extended (~> 2.6)
66 | public_suffix (4.0.6)
67 | racc (1.7.3)
68 | rb-fsevent (0.10.3)
69 | rb-inotify (0.10.1)
70 | ffi (~> 1.0)
71 | rouge (3.15.0)
72 | safe_yaml (1.0.5)
73 | sass (3.7.4)
74 | sass-listen (~> 4.0.0)
75 | sass-listen (4.0.0)
76 | rb-fsevent (~> 0.9, >= 0.9.4)
77 | rb-inotify (~> 0.9, >= 0.9.7)
78 |
79 | PLATFORMS
80 | ruby
81 | x64-mingw32
82 |
83 | DEPENDENCIES
84 | ffi (~> 1.9.24)
85 | jekyll (= 3.8.5)
86 | jekyll-redirect-from (= 0.15.0)
87 | jekyll-toc
88 | minima (= 2.5.1)
89 | nokogiri (= 1.16.5)
90 | octopress-paginate
91 |
92 | BUNDLED WITH
93 | 1.17.3
94 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [Blog LibreIM](//libreim.github.io/blog/)
2 | ========================================================
3 |
4 | [](https://travis-ci.org/libreim/blog)
5 | Blog de la comunidad de LibreIM. Este blog participó en el [hackatón UGR 2015](http://sl.ugr.es/hackatonugr).
6 |
7 | ¿Quiénes somos?
8 | ==================
9 | Somos una comunidad dedicada al estudio y divulgación de las matemáticas y la informática. Realizamos proyectos como un [blog colaborativo](//libreim.github.io/blog/), un [foro de preguntas y respuestas](//libreim.github.io/overflow/), [repositorios comunes](https://github.com/libreim) y recopilaciones de [recursos](//libreim.github.io/recursos/)
10 |
11 | ## Divulgación
12 | Nuestro objetivo principal es la divulgación de las matemáticas y de la ingeniería informática. Queremos facilitar y hacer accesible el conocimiento en los campos que estudiamos a todo aquel que esté interesado.
13 |
14 | ## Software libre
15 | Apoyamos y divulgamos el software libre. Creemos que facilita la educación, el acceso al software y la creación de comunidades centradas en compartir el conocimiento.
16 |
17 | ## Conocimiento libre
18 | Apoyamos el conocimiento libre. Creemos que cualquier persona interesada debería poder acceder al conocimiento y que facilitar el mismo es un deber cívico. Por eso preferimos las obras científicas que permitan el acceso a cualquier interesado, con licencias libres y formatos abiertos.
19 |
20 | ## Comunidad
21 | Creemos en el trabajo colaborativo y comunitario. Creado por y para toda la comunidad. Abierto y disponible para todos.
22 |
23 |
24 | [¿Quieres participar?](//libreim.github.io/contributing/)
25 |
26 | Para más información sobre cómo colaborar en este blog, puedes leer [su CONTRIBUTING.md](//github.com/libreim/blog/blob/sites/CONTRIBUTING.md).
27 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | title: libreim
2 |
3 | # theme: minima
4 | baseurl: ""
5 | assets_path: /assets
6 |
7 | locale: "es"
8 | permalink: /:year/:month/:day/:title/
9 |
10 | markdown: kramdown
11 | kramdown:
12 | parse_span_html: false
13 | highlighter: rouge
14 |
15 | plugins:
16 | - octopress-paginate
17 | - jekyll-toc
18 | - jekyll-redirect-from
19 | # - jemoji
20 | # - jekyll-gist
21 |
22 | pagination:
23 | per_page: 5
24 | limit: false
25 | permalink: /page/:num/
26 | title_suffix: ""
27 |
28 | exclude:
29 | - LICENSE
30 | - Gemfile
31 | - Gemfile.lock
32 | - CONTRIBUTING.md
33 | - deploy.sh
34 | - README.md
35 | - vendor
36 |
37 | # Tag configuration
38 | tag_dir: "/t"
39 | tag_title_prefix: ""
40 | tag_title_suffix: ""
41 | category_collection: "blog"
42 | category_dir: "/c"
43 | category_title_prefix: ""
44 | category_title_suffix: ""
45 |
46 | defaults:
47 | -
48 | scope:
49 | path: "recursos/_posts" # an empty string here means all files in the project
50 | values:
51 | layout: "post"
52 | side: true
53 | permalink: /recursos/:year/:month/:day/:title/
54 | - scope:
55 | path: "blog/_posts"
56 | values:
57 | layout: "post"
58 | side: true
59 | permalink: /blog/:year/:month/:day/:title/
60 |
--------------------------------------------------------------------------------
/_drafts/2014-4-12-p-np.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Las clases P y NP
4 | authors:
5 | - mario
6 | category: matematicas
7 | ---
8 |
9 | ## Clases de complejidad
10 |
11 | ### La clase de complejidad P
12 |
13 | Los problemas de la clase de complejidad P son aquellos que pueden ser resueltos
14 | por una máquina determinista secuencial en un tiempo polinómico respecto a la
15 | entrada. El modelo habitual de máquina determinista es la
16 | [Máquina de Turing](http://en.wikipedia.org/wiki/Turing_machine#Formal_definition);
17 | los problemas en P son aquellos resolubles por una máquina de Turing en tiempo
18 | polinómico.
19 |
20 | Resumiendo, tenemos que:
21 |
22 | `$$ P = \bigcup_{k\in\mathbb{N}} \mathtt{TIME}(n^k) $$`
23 |
24 | donde `$\mathtt{TIME}(f)$` son los problemas que pueden resolverse en
25 | `$\mathcal{O}(f)$` en una máquina de Turing.
26 |
27 |
28 | ### La clase de complejidad NP
29 |
30 | Los problemas en NP son aquellos que pueden ser resueltos por una
31 | [máquina **no determinista** de Turing](http://en.wikipedia.org/wiki/Non-deterministic_Turing_machine)
32 | en tiempo polinómico. Equivalentemente, son aquellos que podrían ser resueltos
33 | por infinitas máquinas de Turing trabajando en paralelo en tiempo polinómico y
34 | son aquellos de los que puede comprobarse si una solución propuesta es
35 | efectivamente solución en tiempo polinomial. [^jkun]
36 |
37 | [^jkun]: [Jeremy Kun - Math&Programming - P vs NP. A primer and a proof written in Racket.](http://jeremykun.com/2012/02/23/p-vs-np-a-primer-and-a-proof-written-in-racket/)
38 |
39 | Resumiendo, tenemos que:
40 |
41 | `$$ NP = \bigcup_{k\in\mathbb{N}}\mathtt{NTIME}(n^k) $$`
42 |
43 | donde `$\mathtt{NTIME}(f)$` son los problemas que pueden resolverse en tiempo
44 | polinómico con una máquina de Turing no determinista.
45 |
46 |
47 | ### NP-completos
48 | Un problema es `$\mathtt{NP-completo}$` si cualquier otro problema de NP puede
49 | ser reducido a él en tiempo polinomial. Si un problema NP-completo fuera P,
50 | significaría que todos los problemas de NP serían P; ya que para resolverlos
51 | sólo habría que reducirlos polinomialmente al problema NP-completo que es P,
52 | y resolverlo polinomialmente.
53 |
54 |
55 | El primer ejemplo conocido de problema NP completo fue el
56 | [problema de satisfacibilidad booleana](http://es.wikipedia.org/wiki/Problema_de_satisfacibilidad_booleana)
57 | (SAT).
58 |
59 | *[SAT]: Boolean SATISFIABILITY
60 |
61 |
62 | ## Ejemplos
63 |
64 | #### Travelling Salesman Problem
65 |
66 | El TSP (Travelling Salesman Problem) es un ejemplo de problema NP-completo en su
67 | versión como problema de decisión. Como problema de decisión, el TSP se enuncia como:
68 |
69 | * *Dada una lista de ciudades con distancias entre ellas y una longitud `$L$`,
70 | ¿existe un ciclo de longitud menor que `$L$` que pase una y sólo una vez por
71 | cada ciudad?*
72 |
73 | Un algoritmo que probara todos los caminos debería calcular la longitud del
74 | ciclo que forman todas las posibles permutaciones en el orden de las ciudades,
75 | sería `$\mathcal{O}(n!)$` y no podemos afirmar que el problema esté en
76 | $\mathtt{P}$. Sin embargo, comprobar que una solución cumple la condición es tan
77 | simple como sumar las distancias entre ciudades y comprobar que la distancia
78 | total es menor que `$L$`; si tenemos tantas máquinas paralelas como quisiéramos
79 | trabajando en el problema, sólo deberíamos asignar a cada una una de las
80 | permutaciones del problema y hacer que comprobara si es solución, lo que se
81 | haría en tiempo `$\mathcal{O}(n)$`, polinómico. Por tanto, el problema es
82 | `$\mathtt{NP}$`.
83 |
84 |
85 | ## ¿Es P = NP?
86 | Obviamente todo problema en P está en NP. Si puede ser resuelto en tiempo
87 | polinomial por una máquina de Turing, con más motivo podrá ser resuelto por una
88 | no determinista en ese tiempo.
89 | La cuestión de si un problema NP-completo puede ser resuelto en tiempo
90 | polinomial está abierta. Para probar `$\mathtt{P} = \mathtt{NP}$`, bastaría con
91 | encontrar una solución polinomial a un problema `$\mathtt{NP-completo}$`. Para
92 | probar `$\mathtt{P} \neq \mathtt{NP}$`, habría que demostrar que existe algún
93 | problema `$\mathtt{NP}$` que no puede ser resuelto en tiempo polinomial.
94 |
95 |
96 | [//]: # Falta dar un ejemplo de problema que no esté en NP.
97 | [//]: # Falta explicar un ejemplo de problema no en P pero sí en NP-Completo. (TSP es una opción)
98 |
--------------------------------------------------------------------------------
/_drafts/2014-7-30-dimension-fractal.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Dimensión de fractales
4 | authors:
5 | -
6 | category: matematicas
7 | ---
8 |
9 | ### Medida de Hausdorff
10 |
11 | ### Funciones contractivas
12 |
13 | ### Fractales como procesos iterativos
14 |
15 | ### Dimensión de Hausdorff
16 |
--------------------------------------------------------------------------------
/_drafts/2015-12-14-jekyll-blog-dgiim.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: "Jekyll, un generador de sitios estáticos"
4 | authors:
5 | - fdavidcl
6 | ---
7 |
8 | El blog se genera usando [Jekyll](http://jekyllrb.com), un generador de sitios
9 | estáticos escrito en Ruby.
10 |
11 | ###Instalación
12 |
13 | Para utilizar y probar el blog localmente es necesario instalar Ruby y la gema
14 | [github-pages](https://github.com/github/pages-gem). Esto se puede conseguir
15 | utilizando el `Gemfile` provisto con el blog:
16 |
17 | ~~~bash
18 | git clone git@github.com:dgiim/blog.git dgiim-blog
19 | cd dgiim-blog
20 | bundle install
21 | ~~~
22 |
23 | o bien instalándola mediante `gem`:
24 |
25 | ~~~bash
26 | sudo gem install github-pages
27 | ~~~
28 |
29 | ## Uso
30 |
31 | Jekyll cuenta con un comando que genera el sitio estático (en `_site/`):
32 |
33 | ~~~bash
34 | jekyll serve
35 | ~~~
36 |
37 | Ahora el blog estará disponible en `localhost:4000/blog/`.
38 |
39 | ## Directorios
40 |
41 | Un blog de Jekyll se estructura en varios directorios, todos ellos empezando con
42 | un guion bajo `_`:
43 |
44 | * `_layouts` Aquí se guardan las plantillas que se utilizan para generar cada
45 | página del blog. Este blog tiene una plantilla `post` y otra `resource`,
46 | ambas heredando de la plantilla `default`. La plantilla de un archivo se
47 | especifica con la opción `layout` de la caja YAML al inicio del mismo. Si
48 | queremos que no se aplique ninguna plantilla a un archivo utilizaremos
49 | `layout: none`.
50 | * `_includes` Contiene archivos `.ext` que son fragmentos de código HTML que se
51 | pueden incluir en cualquier parte de una página mediante
52 | `{% include ejemplo.ext %}`. Este blog cuenta con *includes* para la cabecera
53 | y el pie de la página, para renderizar un post, una lista de posts y para
54 | incluir el script de Disqus.
55 | * `_posts` Incluye todos los posts que se han de mostrar en la página principal,
56 | en general escritos en Markdown. El nombre de cada archivo debe indicar la
57 | fecha del post y el camino del URL en el que se encontrará. Por ejemplo, el
58 | archivo `2015-3-14-pi-day.md` se mostraría en `/2015/03/14/pi-day`.
59 | * `_drafts` Esta carpeta guarda los posts que aún son borradores. Se pueden
60 | incluir en el blog localmente ejecutando `jekyll serve --drafts`.
61 | * `_plugins` Normalmente este directorio almacenaría plugins para Jekyll
62 | escritos en Ruby, pero Github Pages no permite añadir plugins por seguridad.
63 | * `_site` Este directorio se crea automáticamente al ejecutar `jekyll serve`, y
64 | contiene el sitio estático generado por Jekyll.
65 |
66 | Además de estos directorios, Jekyll permite añadir más para almacenamiento de
67 | otros datos y páginas. Por ejemplo, en este blog usamos `_cs_resources` y
68 | `_math_resources` para los listados de recursos de informática y de matemáticas
69 | respectivamente. Estos directorios son escaneados por el archivo `resources.md`
70 | gracias a que Jekyll los representa en las variables `site.cs_resources` y
71 | `site.math_resources`.
72 |
73 | ## Sintaxis de Jekyll
74 |
75 | Jekyll utiliza una sintaxis de marcado llamada
76 | [Liquid](http://liquidmarkup.org/) simple pero potente y segura para la
77 | generación de código HTML a partir de plantillas. Básicamente hay dos tipos de
78 | mensajes que acepta. El primero es la sustitución:
79 |
80 | ~~~
81 | {{ nombre_variable }}
82 | ~~~
83 |
84 | Esto sustituye el contenido de la variable especificada en el lugar donde se
85 | encuentre. Si es necesario, se interpretará como Markdown mediante el parser
86 | especificado en `_config.yml` ([kramdown](http://kramdown.gettalong.org/) en
87 | nuestro caso).
88 |
89 | El otro mensaje es la evaluación de órdenes, para estructuras *if*, *for* y
90 | similares:
91 |
92 | ~~~
93 | {% for post in site.posts %}
94 | {% if post.mola %}
95 | {{ post.content }}
96 | {% endif %}
97 | {% endfor %}
98 | ~~~
99 |
100 | El ejemplo es muy simple. Jekyll almacena todos los posts bajo `site.posts`, por
101 | el que podemos iterar y renderizar cada uno si tienen asignada la variable
102 | `mola` a *true*.
103 |
--------------------------------------------------------------------------------
/_drafts/2015-3-14-godel.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Teorema de Incompletitud de Godel
4 | authors:
5 | - makixun
6 | category: Lógica
7 | ---
8 |
9 | ## Introducción
10 |
11 | El teorema de incompletitud de Godel es uno de los más profundos, paradójicos y misteriosos de la lógica matemática. Se ha convertido en un referente en el pensamiento moderno y ha ejercido una tremenda fascinación en diversos ámbitos tan dispares como la poesía, la filosofía o el psicoanálisis.
12 | Este gran resultado fue publicado en 1929 por el célebre matemático Kurt Godel, una de las mayores mentes del siglo XX. Se refiere a la imposibilidad de los sistemas axiomáticos de la aritmética elemental de demostrar todas y cada una de sus verdades. Esto es así ya que es "incompleta". Veamos, en primer lugar en que consisten algunos de los conceptos básicos para entender este teorema.
13 |
14 | ## Conceptos básicos
15 |
16 | **Demostración**
17 | : Una demostración es una cadena de afirmaciones o enunciados que están unidas por reglas lógicas bien determinadas. Estos enunciados pueden ser axiomas (resultados que se dan por válido al inicio de un razonamiento) o simples consecuencias de estos axiomas, dando lugar a lo que se llama teorema.
18 | Sin embargo, para demostrar un teorema no es válido cualquier sistema axiomático que se nos muestre, por eso es necesaria una pequeña precisión para seleccionar los axiomas adecuados para demostrar un enunciado. Como veremos, este es uno de los puntos fundamentales para entender el Teorema de Incompletitud.
19 |
20 | Otro concepto fundamental es el siguiente:
21 |
22 | **Sistema axiomático**
23 | : Llamaremos sistema axiomático recursivo al conjunto de axiomas tal que, dado un enunciado cualquiera,
24 | podemos conocer en un conjunto finito de pasos si pertenece o no al propio conjunto.
25 |
26 | Todo conjunto dado por una lista finita de axiomas es recursivo, pero también existen conjuntos finitos de axiomas que son recursivos.
27 |
28 | Por otra parte, la consistencia se define como:
29 |
30 | **Consistencia**
31 | : Un sistema axiomático es consistente si no puede probarse ninguna contradicción a partir de los axiomas.
32 |
33 |
34 | Este fue un problema planteado y estudiado por el matemático David Hilbert, que quiso obtener un conjunto de axiomas consistente a través del cual pudiera obtener todas las verdades de las matemáticas.
35 | Su argumento era el siguiente: si un enunciado fuese verdadero, sería uno de los teoremas del conjunto axiomático, pero si fuese falso, sería su negación la que estaría en este conjunto.
36 | En concreto, Hilbert basa sus ideas axiomáticas en los dos grandes sistemas de las matemáticas: la teoría de conjuntos y la aritmética elemental.
37 |
38 | ## Continuará...
39 |
--------------------------------------------------------------------------------
/_drafts/2015-8-9-topological-sort.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Topological Sort
4 | authors:
5 | - andreshp
6 | category: Teoría de Algoritmos
7 | ---
8 |
9 | ## Problemas
10 |
11 | - https://www.hackerrank.com/contests/projecteuler/challenges/euler079
12 | - https://www.hackerrank.com/contests/indeed-prime-challenge/challenges/course-dilemma
--------------------------------------------------------------------------------
/_includes/banner:
--------------------------------------------------------------------------------
1 | <{%- if include.link -%}a href="{{- include.link -}}"{%- else -%}div{%- endif -%}
2 | class="introduction {{- include.side -}} {{- include.classes -}}">
3 |
36 |
37 | {%- for tag in post.tags -%}
38 | {{- tag -}}{%- if forloop.last == false -%}{%- endif -%}
39 | {%- endfor -%}
40 |
41 |
42 |
43 | {%- endif -%}
44 | {%- endfor -%}
45 | {%- endfor -%}
46 |
--------------------------------------------------------------------------------
/_plugins/_category_index.rb:
--------------------------------------------------------------------------------
1 | module Jekyll
2 | class CategoryIndex < Page
3 | def initialize(site, base, dir, tag)
4 | @site = site
5 | @base = base
6 | @dir = dir
7 | @name = 'index.html'
8 | self.process(@name)
9 | self.read_yaml(File.join(base, '_layouts'), 'category_index.html')
10 | self.data['category'] = tag
11 | cat_title_prefix = site.config['category_title_prefix'] || 'Posts Tagged “'
12 | cat_title_suffix = site.config['category_title_suffix'] || '”'
13 | self.data['title'] = "#{cat_title_prefix}#{tag.split("/").last}#{cat_title_suffix}"
14 | end
15 | end
16 | class CategoryGenerator < Generator
17 | safe true
18 | def generate(site)
19 | if site.layouts.key? 'category_index'
20 | dir = site.config['category_dir'] || 'category'
21 | colname = site.config['category_collection'] || 'posts'
22 | collection = site.collections.to_h[colname]
23 | # Work in progress
24 | # puts "#{collection}"
25 | # collection.categories.keys.each do |cat|
26 | # write_category_index(site, File.join(dir, cat), cat)
27 | # end
28 | end
29 | end
30 | def write_category_index(site, dir, cat)
31 | index = CategoryIndex.new(site, site.source, dir, cat)
32 | index.render(site.layouts, site.site_payload)
33 | index.write(site.dest)
34 | site.pages << index
35 | end
36 | end
37 | end
38 |
--------------------------------------------------------------------------------
/_plugins/_collection_index.rb.false:
--------------------------------------------------------------------------------
1 | module Jekyll
2 | class CollectionIndex < Page
3 | def initialize(site, base, dir, collection)
4 | @site = site
5 | @base = base
6 | @dir = dir
7 | @name = 'index.html'
8 |
9 | self.process(@name)
10 | self.read_yaml(File.join(base, '_layouts'), 'collection_index.html')
11 | documents = Array.new
12 | collection[1].docs.each do |page|
13 | documents.push(page.to_liquid)
14 | end
15 | self.data['col'] = documents.to_liquid
16 |
17 | self.data['title'] = "#{collection[0]}".capitalize
18 | end
19 | end
20 |
21 | class CollectionIndexGenerator < Generator
22 | safe true
23 |
24 | def generate(site)
25 | site.collections.each do |collection|
26 | site.pages << CollectionIndex.new(site, site.source, File.join(collection[0]), collection)
27 | end
28 | end
29 | end
30 | end
31 |
--------------------------------------------------------------------------------
/_plugins/_tag_index.rb:
--------------------------------------------------------------------------------
1 | module Jekyll
2 | class TagIndex < Page
3 | def initialize(site, base, dir, tag)
4 | @site = site
5 | @base = base
6 | @dir = dir
7 | @name = 'index.html'
8 | self.process(@name)
9 | self.read_yaml(File.join(base, '_layouts'), 'tag_index.html')
10 | self.data['tag'] = tag
11 | tag_title_prefix = site.config['tag_title_prefix'] || 'Posts Tagged “'
12 | tag_title_suffix = site.config['tag_title_suffix'] || '”'
13 | self.data['title'] = "#{tag_title_prefix}#{tag.split("/").last}#{tag_title_suffix}"
14 | end
15 | end
16 | class TagGenerator < Generator
17 | safe true
18 | def generate(site)
19 | if site.layouts.key? 'tag_index'
20 | dir = site.config['tag_dir'] || 'tag'
21 | site.tags.keys.each do |tag|
22 | write_tag_index(site, File.join(dir, tag), tag)
23 | end
24 | end
25 | end
26 | def write_tag_index(site, dir, tag)
27 | index = TagIndex.new(site, site.source, dir, tag)
28 | index.render(site.layouts, site.site_payload)
29 | index.write(site.dest)
30 | site.pages << index
31 | end
32 | end
33 | end
34 |
--------------------------------------------------------------------------------
/assets/css/github.min.css:
--------------------------------------------------------------------------------
1 | .hljs{display:block;padding:.5em;color:#333;background:#f8f8f8}.hljs-comment,.hljs-template_comment,.diff .hljs-header,.hljs-javadoc{color:#998;font-style:italic}.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.javascript .hljs-title,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status{color:#333;font-weight:bold}.hljs-number,.hljs-hexcolor,.ruby .hljs-constant{color:#099}.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.tex .hljs-formula{color:#d14}.hljs-title,.hljs-id,.coffeescript .hljs-params,.scss .hljs-preprocessor{color:#900;font-weight:bold}.javascript .hljs-title,.lisp .hljs-title,.clojure .hljs-title,.hljs-subst{font-weight:normal}.hljs-class .hljs-title,.haskell .hljs-type,.vhdl .hljs-literal,.tex .hljs-command{color:#458;font-weight:bold}.hljs-tag,.hljs-tag .hljs-title,.hljs-rules .hljs-property,.django .hljs-tag .hljs-keyword{color:#000080;font-weight:normal}.hljs-attribute,.hljs-variable,.lisp .hljs-body{color:#008080}.hljs-regexp{color:#009926}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.tex .hljs-special,.hljs-prompt{color:#990073}.hljs-built_in,.lisp .hljs-title,.clojure .hljs-built_in{color:#0086b3}.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}
--------------------------------------------------------------------------------
/assets/css/pygments-friendly.css:
--------------------------------------------------------------------------------
1 | /*****************************************************************************************
2 | This is free and unencumbered software released into the public domain.
3 |
4 | Anyone is free to copy, modify, publish, use, compile, sell, or
5 | distribute this software, either in source code form or as a compiled
6 | binary, for any purpose, commercial or non-commercial, and by any
7 | means.
8 |
9 | In jurisdictions that recognize copyright laws, the author or authors
10 | of this software dedicate any and all copyright interest in the
11 | software to the public domain. We make this dedication for the benefit
12 | of the public at large and to the detriment of our heirs and
13 | successors. We intend this dedication to be an overt act of
14 | relinquishment in perpetuity of all present and future rights to this
15 | software under copyright law.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 | OTHER DEALINGS IN THE SOFTWARE.
24 |
25 | For more information, please refer to
26 | *****************************************************************************************/
27 |
28 | .highlighter-rouge .hll { background-color: #ffffcc }
29 | .highlighter-rouge .c { color: #60a0b0; font-style: italic } /* Comment */
30 | .highlighter-rouge .err { border: 1px solid #FF0000 } /* Error */
31 | .highlighter-rouge .k { color: #007020; font-weight: bold } /* Keyword */
32 | .highlighter-rouge .o { color: #666666 } /* Operator */
33 | .highlighter-rouge .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
34 | .highlighter-rouge .cp { color: #007020 } /* Comment.Preproc */
35 | .highlighter-rouge .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
36 | .highlighter-rouge .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
37 | .highlighter-rouge .gd { color: #A00000 } /* Generic.Deleted */
38 | .highlighter-rouge .ge { font-style: italic } /* Generic.Emph */
39 | .highlighter-rouge .gr { color: #FF0000 } /* Generic.Error */
40 | .highlighter-rouge .gh { color: #000080; font-weight: bold } /* Generic.Heading */
41 | .highlighter-rouge .gi { color: #00A000 } /* Generic.Inserted */
42 | .highlighter-rouge .go { color: #808080 } /* Generic.Output */
43 | .highlighter-rouge .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
44 | .highlighter-rouge .gs { font-weight: bold } /* Generic.Strong */
45 | .highlighter-rouge .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
46 | .highlighter-rouge .gt { color: #0040D0 } /* Generic.Traceback */
47 | .highlighter-rouge .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
48 | .highlighter-rouge .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
49 | .highlighter-rouge .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
50 | .highlighter-rouge .kp { color: #007020 } /* Keyword.Pseudo */
51 | .highlighter-rouge .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
52 | .highlighter-rouge .kt { color: #902000 } /* Keyword.Type */
53 | .highlighter-rouge .m { color: #40a070 } /* Literal.Number */
54 | .highlighter-rouge .s { color: #4070a0 } /* Literal.String */
55 | .highlighter-rouge .na { color: #4070a0 } /* Name.Attribute */
56 | .highlighter-rouge .nb { color: #007020 } /* Name.Builtin */
57 | .highlighter-rouge .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
58 | .highlighter-rouge .no { color: #60add5 } /* Name.Constant */
59 | .highlighter-rouge .nd { color: #555555; font-weight: bold } /* Name.Decorator */
60 | .highlighter-rouge .ni { color: #d55537; font-weight: bold } /* Name.Entity */
61 | .highlighter-rouge .ne { color: #007020 } /* Name.Exception */
62 | .highlighter-rouge .nf { color: #06287e } /* Name.Function */
63 | .highlighter-rouge .nl { color: #002070; font-weight: bold } /* Name.Label */
64 | .highlighter-rouge .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
65 | .highlighter-rouge .nt { color: #062873; font-weight: bold } /* Name.Tag */
66 | .highlighter-rouge .nv { color: #bb60d5 } /* Name.Variable */
67 | .highlighter-rouge .ow { color: #007020; font-weight: bold } /* Operator.Word */
68 | .highlighter-rouge .w { color: #bbbbbb } /* Text.Whitespace */
69 | .highlighter-rouge .mf { color: #40a070 } /* Literal.Number.Float */
70 | .highlighter-rouge .mh { color: #40a070 } /* Literal.Number.Hex */
71 | .highlighter-rouge .mi { color: #40a070 } /* Literal.Number.Integer */
72 | .highlighter-rouge .mo { color: #40a070 } /* Literal.Number.Oct */
73 | .highlighter-rouge .sb { color: #4070a0 } /* Literal.String.Backtick */
74 | .highlighter-rouge .sc { color: #4070a0 } /* Literal.String.Char */
75 | .highlighter-rouge .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
76 | .highlighter-rouge .s2 { color: #4070a0 } /* Literal.String.Double */
77 | .highlighter-rouge .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
78 | .highlighter-rouge .sh { color: #4070a0 } /* Literal.String.Heredoc */
79 | .highlighter-rouge .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
80 | .highlighter-rouge .sx { color: #c65d09 } /* Literal.String.Other */
81 | .highlighter-rouge .sr { color: #235388 } /* Literal.String.Regex */
82 | .highlighter-rouge .s1 { color: #4070a0 } /* Literal.String.Single */
83 | .highlighter-rouge .ss { color: #517918 } /* Literal.String.Symbol */
84 | .highlighter-rouge .bp { color: #007020 } /* Name.Builtin.Pseudo */
85 | .highlighter-rouge .vc { color: #bb60d5 } /* Name.Variable.Class */
86 | .highlighter-rouge .vg { color: #bb60d5 } /* Name.Variable.Global */
87 | .highlighter-rouge .vi { color: #bb60d5 } /* Name.Variable.Instance */
88 | .highlighter-rouge .il { color: #40a070 } /* Literal.Number.Integer.Long */
89 |
--------------------------------------------------------------------------------
/assets/fonts/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Font license info
2 |
3 |
4 | ## Font Awesome
5 |
6 | Copyright (C) 2016 by Dave Gandy
7 |
8 | Author: Dave Gandy
9 | License: SIL ()
10 | Homepage: http://fortawesome.github.com/Font-Awesome/
11 |
12 |
13 | ## Entypo
14 |
15 | Copyright (C) 2012 by Daniel Bruce
16 |
17 | Author: Daniel Bruce
18 | License: SIL (http://scripts.sil.org/OFL)
19 | Homepage: http://www.entypo.com
20 |
21 |
22 | ## Typicons
23 |
24 | (c) Stephen Hutchings 2012
25 |
26 | Author: Stephen Hutchings
27 | License: SIL (http://scripts.sil.org/OFL)
28 | Homepage: http://typicons.com/
29 |
30 |
31 |
--------------------------------------------------------------------------------
/assets/fonts/README.txt:
--------------------------------------------------------------------------------
1 | This webfont is generated by http://fontello.com open source project.
2 |
3 |
4 | ================================================================================
5 | Please, note, that you should obey original font licenses, used to make this
6 | webfont pack. Details available in LICENSE.txt file.
7 |
8 | - Usually, it's enough to publish content of LICENSE.txt file somewhere on your
9 | site in "About" section.
10 |
11 | - If your project is open-source, usually, it will be ok to make LICENSE.txt
12 | file publicly available in your repository.
13 |
14 | - Fonts, used in Fontello, don't require a clickable link on your site.
15 | But any kind of additional authors crediting is welcome.
16 | ================================================================================
17 |
18 |
19 | Comments on archive content
20 | ---------------------------
21 |
22 | - /font/* - fonts in different formats
23 |
24 | - /css/* - different kinds of css, for all situations. Should be ok with
25 | twitter bootstrap. Also, you can skip style and assign icon classes
26 | directly to text elements, if you don't mind about IE7.
27 |
28 | - demo.html - demo file, to show your webfont content
29 |
30 | - LICENSE.txt - license info about source fonts, used to build your one.
31 |
32 | - config.json - keeps your settings. You can import it back into fontello
33 | anytime, to continue your work
34 |
35 |
36 | Why so many CSS files ?
37 | -----------------------
38 |
39 | Because we like to fit all your needs :)
40 |
41 | - basic file, .css - is usually enough, it contains @font-face
42 | and character code definitions
43 |
44 | - *-ie7.css - if you need IE7 support, but still don't wish to put char codes
45 | directly into html
46 |
47 | - *-codes.css and *-ie7-codes.css - if you like to use your own @font-face
48 | rules, but still wish to benefit from css generation. That can be very
49 | convenient for automated asset build systems. When you need to update font -
50 | no need to manually edit files, just override old version with archive
51 | content. See fontello source code for examples.
52 |
53 | - *-embedded.css - basic css file, but with embedded WOFF font, to avoid
54 | CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain.
55 | We strongly recommend to resolve this issue by `Access-Control-Allow-Origin`
56 | server headers. But if you ok with dirty hack - this file is for you. Note,
57 | that data url moved to separate @font-face to avoid problems with
2 |
3 |
--------------------------------------------------------------------------------
/assets/fonts/font/iconim.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/fonts/font/iconim.ttf
--------------------------------------------------------------------------------
/assets/fonts/font/iconim.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/fonts/font/iconim.woff
--------------------------------------------------------------------------------
/assets/fonts/font/iconim.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/fonts/font/iconim.woff2
--------------------------------------------------------------------------------
/assets/images/blog/emacs-which-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/blog/emacs-which-key.png
--------------------------------------------------------------------------------
/assets/images/blog/emacs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/blog/emacs.png
--------------------------------------------------------------------------------
/assets/images/blog/guia-primero/real_programmers.html:
--------------------------------------------------------------------------------
1 | [[A man sits at a computer, programming. Another man behind him looks over his shoulder.]]
2 | Man: nano? REAL programmers use Emacs.
3 | [[A dark haired woman appears behind him.]]
4 | Woman: Hey. REAL programmers use Vim.
5 | [[Another man appears behind her.]]
6 | Man: Well, REAL programmers use ed.
7 | [[Another man appears behind him.]]
8 | Man: No, REAL programmers use cat.
9 | [[A woman with a bun appears behind him.]]
10 | Woman: REAL programmers use a magnetized needle and a steady hand.
11 | [[A man enters, facing them all.]]
12 | Man: Excuse me, but REAL programmers use butterflies.
13 | [[Holding out a butterfly in front of the computer.]]
14 | Man: They open their hands and let the delicate wings flap once.
15 | [[Diagrams of flowing currents.]]
16 | Man: The disturbances ripple outward, changing the flow of the Eddy currents in the upper atmosphere.
17 | These cause momentary pockets of higher-pressure air to form, ...
18 | Man: Which act as lenses that deflect incoming cosmic rays, focusing them to strike the drive platter and flip the desired bit.
19 | Emacs User: Nice. 'Course, there's an Emacs command to do that.
20 | cat User: Oh yeah! Good ol' C-x M-c M-butterfly...
21 | [[Butterfly man slaps forehead.]]
22 | Butterfly man: Dammit, Emacs.
23 | {{Title text: Real programmers set the universal constants at the start such that the universe evolves to contain the disk with the data they want.}}
24 |
--------------------------------------------------------------------------------
/assets/images/blog/guia-primero/wisdom_of_the_ancients.html:
--------------------------------------------------------------------------------
1 | ((A poem is written outside the only panel, right justified along the left edge of the only panel.))
2 | Never have I felt so close to another soul
3 | And yet so helplessly alone
4 | As when I Google an error
5 | And there's one result
6 | A thread by someone with the same problem
7 | And no answer
8 | Last posted to in 2003
9 | [[A person stands in front of his computer, shaking it violently while looking at the screen.]]
10 | Person: Who were you, DenverCoder9? -
11 | WHAT DID YOU SEE?!
12 |
13 |
14 | {{Title text: All long help threads should have a sticky globally-editable post at the top saying 'DEAR PEOPLE FROM THE FUTURE: Here's what we've figured out so far ...'}}
15 |
--------------------------------------------------------------------------------
/assets/images/blog/org-math.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/blog/org-math.png
--------------------------------------------------------------------------------
/assets/images/blog/segment_trees/segment_trees_heap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/blog/segment_trees/segment_trees_heap.png
--------------------------------------------------------------------------------
/assets/images/blog/segment_trees/segment_trees_visualizacion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/blog/segment_trees/segment_trees_visualizacion.png
--------------------------------------------------------------------------------
/assets/images/blog/ubuntu_press_s_to_mount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/blog/ubuntu_press_s_to_mount.png
--------------------------------------------------------------------------------
/assets/images/favicon-160.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/favicon-160.png
--------------------------------------------------------------------------------
/assets/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/favicon.ico
--------------------------------------------------------------------------------
/assets/images/home/blackboard.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/home/blackboard.jpg
--------------------------------------------------------------------------------
/assets/images/home/community.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/home/community.jpg
--------------------------------------------------------------------------------
/assets/images/home/knowledge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/home/knowledge.png
--------------------------------------------------------------------------------
/assets/images/home/software.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/home/software.jpg
--------------------------------------------------------------------------------
/assets/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/logo.png
--------------------------------------------------------------------------------
/assets/images/new-resource-1-fork.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/new-resource-1-fork.jpeg
--------------------------------------------------------------------------------
/assets/images/new-resource-2-propose.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/new-resource-2-propose.jpeg
--------------------------------------------------------------------------------
/assets/images/new-resource-3-compare.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/new-resource-3-compare.jpeg
--------------------------------------------------------------------------------
/assets/images/new-resource-4-create.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/new-resource-4-create.jpeg
--------------------------------------------------------------------------------
/assets/images/sq_comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/sq_comment.png
--------------------------------------------------------------------------------
/assets/images/sq_diaspora.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/sq_diaspora.png
--------------------------------------------------------------------------------
/assets/images/sq_facebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/sq_facebook.png
--------------------------------------------------------------------------------
/assets/images/sq_feedly.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/sq_feedly.png
--------------------------------------------------------------------------------
/assets/images/sq_twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/libreim/blog/a6fd1a19c39570ba1e61313dd6e3237d2ace86d5/assets/images/sq_twitter.png
--------------------------------------------------------------------------------
/assets/js/new.js:
--------------------------------------------------------------------------------
1 | // Todo esto es cutre, lo sé
2 | var filename = function(title) {
3 | var time = new Date();
4 | var day = time.getDate();
5 | var month = time.getMonth() + 1;
6 | var year = time.getFullYear();
7 |
8 | return "recursos/_posts/" + year + "-" + month + "-" + day + "-" + title.toLowerCase().replace(/\s/g, "-") + ".md";
9 | }
10 |
11 |
12 | var yml = function(title, link, author, tag, license, content) {
13 | var template = `---
14 | title: ${title}
15 | authors: [${author}]
16 | link: "${link}"
17 | tags: [${tag}]
18 | license: ${license}
19 | ---
20 |
21 | ${content}
22 | `;
23 |
24 |
25 | return template;
26 |
27 | }
28 |
29 |
30 | var form = document.querySelector("#new_resource");
31 | form.onsubmit = function(event) {
32 | form.querySelector("[name='filename']").value = filename(form.querySelector("[name='title']").value);
33 | form.querySelector("[name='message']").value = "Añade recurso: " + form.querySelector("[name='title']").value;
34 | form.querySelector("[name='value']").value = yml(
35 | form.querySelector("[name='title']").value,
36 | form.querySelector("[name='link']").value,
37 | form.querySelector("[name='author']").value,
38 | form.querySelector("[name='tag']").value,
39 | form.querySelector("[name='license']").value,
40 | form.querySelector("[name='content']").value
41 | );
42 |
43 | form.querySelector("[name='title']").disabled = true;
44 | form.querySelector("[name='link']").disabled = true;
45 | form.querySelector("[name='author']").disabled = true;
46 | form.querySelector("[name='tag']").disabled = true;
47 | form.querySelector("[name='license']").disabled = true;
48 | form.querySelector("[name='content']").disabled = true;
49 |
50 | return true;
51 | };
52 |
--------------------------------------------------------------------------------
/awesome.html:
--------------------------------------------------------------------------------
1 | ---
2 | ---
3 |
4 |
5 |
8 |
11 |
--------------------------------------------------------------------------------
/blog/_posts/2014-10-1-intro-haskell.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Introducción a Haskell
4 | authors:
5 | - Mario Román
6 | - Pablo Baeyens
7 | category: Programación
8 | ---
9 |
10 | El lenguaje de programación Haskell es uno de los lenguajes puramente
11 | funcionales más utilizados. [^rankingtiobe] Se creó en los años 1980 para reunir las
12 | características de los múltiples lenguajes funcionales en un sólo lenguaje. [^haskellwikipedia]
13 |
14 | Es un lenguaje basado en funciones puras y permitiendo el paso de
15 | funciones como argumentos a funciones de orden superior. Y es un lenguaje
16 | fuertemente tipificado, que comprueba todos los tipos en tiempo de compilación.
17 |
18 | A los repositorios del doble grado hemos subido unos apuntes de introducción
19 | a Haskell con su código fuente bajo licencia CC BY-NC-SA 3.0:
20 | [Introducción a Haskell](https://github.com/libreim/haskell#Íntroducción-a-haskell)
21 |
22 |
23 | [^haskellwikipedia]: [Haskell - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Haskell_%28programming_language%29)
24 | [^rankingtiobe]: [TIOBE - Programming Community Index](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)
25 |
--------------------------------------------------------------------------------
/blog/_posts/2014-10-19-data-mining.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Algoritmos de clasificación en Minería de datos
4 | authors:
5 | - David Charte
6 | category: Ciencia de datos
7 | ---
8 |
9 | La Minería de datos es el análisis de datos para tratar de encontrar
10 | patrones no triviales que aporten información útil. En concreto, el
11 | Problema de clasificación implica aprender las relaciones entre los
12 | datos que se poseen para predecir características de datos futuros.
13 |
14 | Se han redactado unos apuntes sobre clasificación y los algoritmos
15 | más utilizados para tratar el problema, disponibles en el [repositorio
16 | correspondiente de la organización del Doble Grado](http://github.com/libreim/data-mining-classification/)
17 | en GitHub. En ellos se dan las definiciones pertinentes, se distinguen
18 | modalidades del problema y se explican técnicas y algoritmos para
19 | generar clasificadores. Se comparten bajo la licencia [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/).
20 |
--------------------------------------------------------------------------------
/blog/_posts/2014-10-4-intro-categorias.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Introducción a la teoría de categorías
4 | authors:
5 | - Mario Román
6 | category: Álgebra
7 | ---
8 |
9 | Los primeros desarrollos de la teoría de categorías vinieron impulsados en los
10 | años 40 para cubrir necesidades del álgebra homológica. La posterior teoría
11 | general de categorías fue una actualización del álgebra universal, que estudiaba
12 | las características comunes de diversas estructuras algebraicas. [^categoriaswikipedia]
13 |
14 | En los repositorios del doble grado hay unos apuntes de introducción
15 | a la Teoría de Categorías con su código fuente bajo licencia CC BY-NC-SA 3.0. En
16 | ellos se explican tipos de morfismos y propiedades universales. Se
17 | hace especial hincapié en productos y coproductos y se pasan a explicar
18 | los functores y las transformaciones naturales. El objetivo no es aportar
19 | otra explicación formal de la teoría de categorias, sino dar una idea
20 | general de los conceptos básicos:
21 | [Introducción a la Teoría de Categorías](https://github.com/libreim/introCategorias)
22 |
23 |
24 | [^categoriaswikipedia]: [Teoría de Categorías - Wikipedia, the free encyclopedia](http://es.wikipedia.org/wiki/Teor%C3%ADa_de_categor%C3%ADas)
25 |
--------------------------------------------------------------------------------
/blog/_posts/2014-11-8-algoritmos-geneticos.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Algoritmos Genéticos
4 | authors:
5 | - Andrés Herrera
6 | category: Heurísticas
7 | ---
8 |
9 | El objetivo de un matemático e informático consiste en resolver problemas. Los problemas de optimización son un claro ejemplo de cuestiones resolubles mediante la aplicación conjunta de la informática y las matemáticas. Sin embargo, existen algunos problemas de optimización (como el *problema del viajante de comercio* y todos aquellos que sean NP Hard) para los que no se conoce ningún algoritmo polinomial que los resuelva. En estos casos la aplicación de algoritmos exactos que recorran de forma óptima todo el conjunto de soluciones no es viable por el tiempo necesario. Tenemos que recurrir a otras herramientas: las **heurísticas**.
10 |
11 |
12 |
13 | Dado determinado problema de optimización, una **heurística** es un proceso que calcula una solución que satisface determinados criterios de calidad. Puede no calcular la mejor solución posible. Sin embargo, sí intenta que esta sea suficiente para nuestros objetivos manteniendo una eficiencia aceptable.
14 |
15 | Los **algoritmos genéticos** son heurísticas basadas en poblaciones y en los conceptos de evolución y genética. En la naturaleza, las poblaciones de individuos evolucionan con el tiempo gracias a tres factores: la **selección natural**, la **reproducción** y la **mutación**. Los algoritmos genéticos imitan estos procesos para conseguir evolucionar una población de soluciones iniciales.
16 |
17 | En los repositorios del doble grado se encuentran unos [apuntes](https://github.com/libreim/AlgoritmosGeneticos) que explican el funcionamiento de estos algoritmos de forma detallada. Se encuentran protegidos bajo licencia [CC BY-NC 4.0](http://creativecommons.org/licenses/by-nc/4.0/).
18 |
--------------------------------------------------------------------------------
/blog/_posts/2014-12-4-curry-howard.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: El Isomorfismo de Curry-Howard
4 | authors:
5 | - Mario Román
6 | category: Programación
7 | ---
8 |
9 | El isomorfismo de Curry-Howard[^curryhowardwiki] relaciona los sistemas de tipos con la lógica
10 | proposicional. Los tipos son teoremas, y las instancias de un tipo son
11 | demostraciones del teorema que representa.
12 |
13 | A los repositorios del doble grado hemos subido unos apuntes que explican
14 | el isomorfismo con su código fuente bajo licencia CC BY-SA 3.0:
15 | [Isomorfismo de Curry Howard](https://github.com/libreim/curryHoward)
16 |
17 | Los apuntes constan de una presentación general, unos apuntes más detallados,
18 | con ejemplos en Haskell y una introducción al asistente de demostraciones Coq.
19 | Sobre él, se explican los tipos básicos, demostraciones por inducción y demostraciones
20 | explícitas, donde puede verse en acción la correspondencia entre tipos y proposiciones.
21 |
22 |
23 | [^curryhowardwiki]: [Curry-Howard correspondence - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence)
24 |
--------------------------------------------------------------------------------
/blog/_posts/2014-2-23-manualgit.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Manual rápido de Github/Git
4 | authors:
5 | - David Charte
6 | editors:
7 | - Ignacio Cordón
8 | - Mario Román
9 | category: Utilidades
10 | ---
11 |
12 | ## TL;DR
13 | Instala git. Crea un repositorio desde la página de Github. Descárgalo con `git clone`. Actualiza tu versión local con `git pull`. Empaqueta cambios con `git commit -a`. Envía cambios con `git pull && git push`.
14 |
15 |
16 |
17 | ## La versión larga
18 |
19 | Github es un servicio de almacenamiento de código con control de versiones Git. Git permite a los desarrolladores llevar un registro de todos los cambios realizados a lo largo del tiempo. Con una cuenta en Github puedes crear tantos repositorios (públicos) como quieras, y tantos privados como quieras si registras tu correo de la Universidad en [Github Edu](http://edu.github.com). Cada repositorio puede estar compartido por el creador para varios colaboradores, de forma que todos pueden editarlo.
20 |
21 | La gran ventaja de Github/Git respecto de los sistemas de sincronización de archivos (como Dropbox o OneDrive) es que Git no almacena cada archivo completo generado tras cada cambio, sino únicamente los cambios que se han hecho desde la primera versión de cada archivo. Esto permite recuperar un código antiguo sin necesidad de hacer varias copias, y que varios colaboradores editen el mismo archivo sin crear conflictos de versiones, ya que los cambios se mezclan en un único archivo resultante.
22 |
23 | Existen más sistemas de control de versiones aparte de Git, pero son en su mayoría centralizados (solo el servidor almacena el código completo), mientras que Git es un sistema distribuido, es decir, en el que todos los colaboradores obtienen una copia completa del repo y hacen sus propios cambios, estando en el servidor la combinación de los códigos de todos.
24 |
25 | ### Terminología
26 | - *repository/repo* - Lugar en Github para almacenar todo el código de un proyecto e ir registrando los cambios.
27 | - *clone* - Descargar el código de un repositorio y activar git sobre él.
28 | - *commit* - Crear un paquete de cambios a partir de los cambios realizados en la versión local del repo.
29 | - *pull* - Estando en la versión local del repo, descargar los cambios hasta la versión más actual.
30 | - *push* - Enviar los cambios (empaquetados en commits) de la versión local del repo a Github (para que los demás colaboradores puedan descargarlos).
31 | - *merge* - Mezcla de cambios de varios desarrolladores o cuando se envian commits realizados sobre versiones antiguas de los archivos.
32 | - *fork* - Copiar el código de un repositorio (en el que no tenemos permiso de edición) a otro propio para poder editar (y mejorar o arreglar fallos).
33 |
34 | ### Estado de los archivos
35 | Puede consultarse el estado del repositorio usando `git status`. Simplificando, podemos tener los archivos en los siguientes estados:
36 |
37 | - *No registrados (untracked)* - Archivos y modificaciones no añadidas al repositorio. No se enviarán con el próximo commit. No se tienen en cuenta en el repositorio. Pueden añadirse con `git add`, y pasarán a estar registrados.
38 | - *Registrados (tracked)* - Archivos y modificaciones añadidos, que serán parte del próximo commit.
39 | - *Formando parte del commit (committed)* - Tras realizar un `git commit`, archivos y modificaciones que ya forman parte de un commit, aunque todavía no se haya enviado el commit al repositorio.
40 | - *Enviados (pushed)* - Tras enviar el commit con `git push`, los archivos ya forman parte del repositorio de GitHub.
41 |
42 | Además, se pueden especificar archivos a ignorar completamente por git en el archivo `.gitignore`. En este archivo
43 | podemos añadir nombres de archivo y directorios (separados por saltos de línea) de forma que el registro de cambios
44 | no se realice nunca sobre ellos y ni siquiera aparecerán como *untracked*.
45 |
46 | ### Creación del repo
47 | Asumiendo que usamos Linux para utilizar Github, hemos de instalar primero el sistema de control de versiones (en
48 | Ubuntu, `sudo apt-get install git` bastará). En Windows existe una [fantástica aplicación](http://windows.github.com)
49 | que hace todo el trabajo por nosotros, sin necesidad de línea de comandos (OS X también tiene [la suya](http://mac.github.com/)).
50 |
51 | Un repositorio se puede crear desde la web de Github, que nos pedirá un nombre y nos sugerirá que comencemos añadiendo
52 | un archivo README. Una vez creado, copiamos el enlace que aparecerá al final de la sección derecha en la página del
53 | repo (terminado en *.git*) y ejecutamos en terminal `git clone URL` donde URL es la dirección obtenida. Esto creará
54 | una carpeta con contenido idéntico al del repo.
55 |
56 | ### Modificación
57 | Antes de modificar nada es conveniente ejecutar `git pull` para descargar la última versión de los archivos, en caso
58 | de que algún colaborador los haya editado. Esto nos evitará merges innecesarios.
59 |
60 | Tras crear archivos en la versión local, ejecutamos `git add file1 file2 ...` para añadirlos al control de cambios,
61 | o con `git add .`, para añadir todo lo que haya sido modificado, creado,... El comando `git rm file` se emplea para
62 | borrar archivos del repositorio.
63 |
64 | Después de crear archivos o realizar varios cambios en los ya existentes es recomendable crear un commit con `git commit -a`. Esto nos abrirá una instancia del editor `nano` en la que podremos escribir un mensaje para el commit (no puede estar vacío), que describa los cambios realizados brevemente. Al pulsar Ctrl-O, Ctrl-X para guardar y salir, se termina la creación del commit. Aún no están enviados los cambios al repo online, sino que se ha realizado un registro de los mismos, y se puede decir que estamos un commit *por delante* de la versión en Github.
65 |
66 | Antes de enviar los cambios es importante asegurar que se sobreescribirán en las versiones más recientes de los archivos (el repo en Github también podría estar varios commits por delante de nosotros) y para ello ejecutamos `git pull`. Normalmente nos diría que estamos en la versión más actual, pero si no lo estuviéramos no pasa nada, crearía un merge automático mezclando los cambios realizados por nosotros con los más modernos en Github (el caso de que haya conflictos está descrito más abajo).
67 |
68 | Finalmente ejecutamos `git push origin master` que envía nuestros cambios y actualiza el repo en Github. Si ha sido necesario un merge se nos abrirá una instancia de `nano` con un mensaje por defecto para el mismo, que podremos cerrar (Ctrl-X) para mantener.
69 |
70 | En resumen, el orden de comandos necesarios es:
71 |
72 | `git pull` -> (modificaciones) -> `git commit -a` -> `git pull` -> `git push origin master`
73 |
74 | Consejo
75 | : Es cómodo añadir un alias a nuestro *.bashrc* para ejecutar las últimas tres órdenes de seguido. Para ello ejecutad
76 | :
77 | ~~~sh
78 | echo "alias gitsync='git commit -a && git pull && git push origin master'" >> ~/.bashrc
79 | ~~~
80 |
81 | El comando `git push origin master` envía los cambios locales a la rama *master* (la principal) del repositorio remoto (*origin*) en Github. Al trabajar con varias ramas podríamos ejecutar variaciones del tipo `git push origin rama_pruebas`.
82 |
83 | ### Conflictos
84 | Si dos colaboradores trabajan simultáneamente sobre el mismo archivo es posible que se produzcan conflictos, es decir, que uno de ellos no tuviera actualizados los cambios del otro y envíe unos cambios que los sobreescribirían. En ese caso el merge automático falla y git deja que el usuario termine de mezclar los cambios manualmente (para ello separará en los archivos los cambios propios de los otros mediante marcas como `HEAD>>>>`). Tras terminar de mezclarlos, es suficiente con ejecutar de nuevo `git commit -a`, `git pull` y `git push`.
85 |
86 | ### Sitios web
87 | Un repositorio con el nombre `username.github.io` (con *username* nuestro usuario) podrá almacenar páginas HTML que se accedan desde http://username.github.io. Además, una rama `gh-pages` en cualquier otro repositorio se podrá acceder desde http://username.github.io/nombre_repo/.
88 |
89 | ### Más avanzado
90 | Este breve manual no abarca aún temas más avanzados como el aprovechamiento de las ramas (*branches*), los métodos para volver atrás en el código (*reverts* y demás), y la colaboración en otros proyectos mediante *forks* y *pull requests*.
91 |
--------------------------------------------------------------------------------
/blog/_posts/2015-3-14-aproximacion-a-pi.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Aproximación a Pi
4 | authors:
5 | - Óscar Bermúdez
6 | category: Problemas
7 | ---
8 |
9 | Hoy es el día de $$\pi$$ (3/14). En este post vamos a presentar una serie de
10 | métodos para conseguir aproximaciones numéricas de la constante.
11 |
12 |
13 | ## Serie de Leibniz
14 | Uno de los métodos de aproximación a $$\pi$$ viene dado por la serie de Leibniz:
15 |
16 | $$\frac{\pi}{4} = \displaystyle{\sum_{n=0}^\infty \frac{(-1)^n}{2n+1}} =
17 | \displaystyle{\left(1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \dots \right)}$$
18 |
19 | Se basa en desarrollar la serie de potencias de la arcotangente:
20 |
21 | $$\arctan x = \displaystyle{\sum_{n=0}^{\infty} \frac{x^{2n+1}}{2n+1}}=
22 | \displaystyle{\left(x - \frac{x^3}{3} + \frac{x^5}{5} - \frac{x^7}{7} + \dots \right)}$$
23 |
24 | Y evaluarla en 1.
25 | Esta fórmula tiene un pequeño inconveniente: es algo lenta para el cálculo de
26 | $$\pi$$.
27 |
28 | Para más información sobre el método, visita
29 | [Wikipedia](https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80) y
30 | para su demostración, [Proofwiki](https://proofwiki.org/wiki/Leibniz%27s_Formula_for_Pi).
31 |
32 |
33 |
34 |
35 | ## Fórmula de Madhava
36 | Otra forma de aproximarlo sería la dada por Madhava:
37 |
38 | $$\pi = \displaystyle{\sqrt{12} \sum_{n=0}^{\infty} \frac{\left(-\frac{1}{3}\right)^n}{2n+1}} =
39 | \displaystyle{\sqrt{12} \left(\frac{1}{1 \cdot 3^0} - \frac{1}{3 \cdot 3^1} + \frac{1}{5 \cdot 3^2} - \frac{1}{7 \cdot 3^3} + \cdots \right)}$$
40 |
41 | También está basada en el desarrollo de la arcotangente y en evaluarla en un punto, concretamente, en $$\frac{1}{\sqrt{3}}$$:
42 |
43 | $$\frac{\pi}{6} = \arctan \frac{1}{\sqrt{3}} = \displaystyle{\left(\frac{1}{\sqrt{3}} - \frac{\left(\frac{1}{\sqrt{3}}\right)^3}{3} +
44 | \frac{\left(\frac{1}{\sqrt{3}}\right)^5}{5} - \frac{\left(\frac{1}{\sqrt{3}}\right)^7}{7} + \dots \right)} =
45 | \displaystyle{\left(\frac{1}{\sqrt{3}} - \frac{\frac{1}{\sqrt{3}}}{3 \cdot 3} + \frac{\frac{1}{\sqrt{3}}}{5 \cdot 3^2} -
46 | \frac{\frac{1}{\sqrt{3}}}{7 \cdot 3^3} + \dots \right)}$$
47 |
48 | Y despejar $$\pi$$, la incluyo porque es anterior a la serie de Leibniz, aunque es algo menos conocida.
49 | Para más información, visita [Wikipedia](https://en.wikipedia.org/wiki/Madhava_series).
50 |
51 |
52 | ## Producto de Wallis
53 | El producto de Wallis:
54 |
55 | $$\frac{\pi}{2} = \displaystyle{\prod_{n = 1}^{\infty} \left(\frac{2n}{2n-1} \cdot \frac{2n}{2n+1} \right)} =
56 | \frac{2}{1} \cdot \frac{2}{3} \cdot \frac{4}{3} \cdot \frac{4}{5} \cdot \frac{6}{5} \cdot \frac{6}{7} \cdot \frac{8}{7} \cdot \frac{8}{9} \cdots$$
57 |
58 | Éste producto se basa en que las raíces de $$\frac{\sin x}{x}$$ son $$\pm n\pi$$
59 | con $$n \in \mathbb{N}$$ y, por tanto,
60 |
61 | $$\frac{\sin x}{x} =
62 | k \prod_{n=0}^{\infty}(x-n\pi)(x+n\pi) = k \prod_{n=0}^{\infty}\left(1-\frac{x}{n\pi}\right)\left(1+\frac{x}{n\pi}\right) =
63 | k \prod_{n=0}^{\infty}\left(1-\frac{x^2}{n^2 \pi^2}\right)$$
64 |
65 | con $$k \in \mathbb{R}$$ constante. Tomando límite a 0, se obtiene que $$k = 1$$.
66 | Y para obtener el producto de Wallis, basta con evaluar
67 |
68 | $$\frac{\frac{\pi}{2}}{\sin \left(\frac{\pi}{2}\right)} =
69 | \frac{1}{\displaystyle{\prod_{n=0}^{\infty}\left(1-\frac{1}{4n^2}\right)}} = \displaystyle{\prod_{n = 1}^{\infty} \left(\frac{4n^2}{4n^2-1}\right)} =
70 | \displaystyle{\prod_{n = 1}^{\infty} \left(\frac{2n}{2n-1} \cdot \frac{2n}{2n+1} \right)}$$
71 |
72 | Para más información general del método, visita [Wikipedia](https://en.wikipedia.org/wiki/Wallis_product); y para su
73 | demostración, visita [Proofwiki](https://proofwiki.org/wiki/Wallis%27s_Product).
74 |
75 |
76 | ## Algoritmo de Borwein
77 | Aunque no he logrado entender cómo funciona, incluyo el algoritmo de Borwein [^study-in-analytic-number-theory]
78 | por tener una convergencia nónica (es decir, en cada iteración, se multiplican por 9 el número de dígitos correctos),
79 | establece como valores iniciales:
80 |
81 | $$a_0 = \frac{1}{3} \mbox{, }r_0 = \frac{\sqrt{3} - 1}{2}\mbox{ y }s_0 = \sqrt[3]{1 - r_0^3}$$
82 |
83 | [^study-in-analytic-number-theory]: *Jonathon M. Borwein, Peter B. Borwein, Pi and the AGM* - A Study in Analytic Number Theory and Computational Complexity, *Wiley, New York, 1987 Jorg Arndt, Christoph Haenel, Pi Unleashed, Springer, Berlin, 2001, ISBN 3-540-66572-2*.
84 |
85 | Y a partir de ahí, para cada iteración se calcula:
86 |
87 | $$t_{n+1} = 1 + 2r_n$$,
88 |
89 | $$u_{n+1} = \sqrt[3]{9r_n(1+r_n+r_n^2)}$$,
90 |
91 | $$v_{n+1} = t^2_{n+1} + t_{n+1} u_{n+1} + u^2_{n+1} $$,
92 |
93 | $$w_{n+1} = 27 \frac{1 + s_n + s_n^2}{v_{n+1}}$$,
94 |
95 | $$a_{n+1} = w_{n+1} a_n + 3^{2n-1}(1-w_{n+1})$$,
96 |
97 | $$s_{n+1} = \frac{(1-r_n)^3}{(t_{n+1} + 2 u_{n+1}) v_{n+1}}$$,
98 |
99 | $$r_{n+1} = \sqrt[3]{1-s_{n+1}^3}$$.
100 |
101 | Y en este algoritmo, se obtiene que la sucesción $$\{a_n\} \rightarrow \frac{1}{\pi}$$.
102 |
103 |
104 | Más información puede encontrarse [aquí](https://en.wikipedia.org/wiki/Borwein's_algorithm).
105 |
--------------------------------------------------------------------------------
/blog/_posts/2015-3-14-induccion-estructural.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Inducción Estructural
4 | authors:
5 | - Mario Román
6 | category: Lógica
7 | ---
8 |
9 | Normalmente aplicamos inducción sobre los números naturales, y cuando
10 | necesitamos aplicar inducción en otro contexto lo llevamos a los números
11 | naturales. Por ejemplo, si queremos demostrar una propiedad sobre los árboles
12 | binarios, la demostraríamos por inducción sobre la altura del árbol. Pero el
13 | proceso de llevar todo a los naturales puede ser incómodo, tedioso y puede complicar
14 | la demostración innecesariamente. En este post vamos a desarrollar una forma de
15 | ampliar la inducción a la estructura de los tipos de datos para simplificar
16 | todas esas demostraciones.
17 |
18 |
19 | ## Conjuntos bien fundados
20 |
21 | Vamos a definir las relaciones bien fundadas, que nos permitirán definir una
22 | inducción generalizada. [^stackexchangeblog-induction]
23 |
24 | **Relación bien fundada**
25 | : Una relación en un conjunto de elementos es bien fundada si todo subconjunto
26 | no vacío tiene un elemento minimal. Dado un orden parcial, es bien fundado si
27 | todo subconjunto no vacío tiene un elemento tal que ninguno es menor que él.
28 |
29 | Y podemos realizar inducción sobre cualquier conjunto con una relación bien
30 | fundada.
31 |
32 | **Inducción noetheriana**
33 | : Sea $$X$$ un conjunto bien fundado con $$A \subset X$$. Si se cumple:
34 |
35 | $$ (y
43 |
44 |
45 |
46 | ## Inducción sobre tipos
47 |
48 | Ahora vamos a aplicar esto a teoría de tipos. Sea un tipo con sus constructores.
49 | Para todas las instancias constructibles del tipo (pueden generarse en un número
50 | finito de pasos desde sus constructores), definimos un orden parcial:
51 |
52 | **Orden constructivo**
53 | : Para dos instancias del tipo: $$a,b::A$$, $$b$$ se construye con $$a$$ si el
54 | constructor de $$b$$ toma a $$a$$ como argumento. La clausura transitiva de
55 | esta relación forma un orden parcial:
56 |
57 | $$ a \leq b \Rightarrow a \mbox{ se usa en la construcción de } b$$
58 |
59 | Y ahora tenemos una inducción sobre los constructores de los tipos, que
60 | describimos ahora.
61 |
62 | **Inducción sobre tipos**
63 | : Sea un tipo $$A$$ con constructores y sea $$P :: A \rightarrow Bool $$ una propiedad.
64 | Siendo $$a_1, a_2 \dots a_i :: A$$ argumentos del constructor, si se
65 | cumple la condición de inducción para cada constructor $$C_i$$:
66 |
67 | $$P(a_1) \wedge P(a_2) \wedge \dots P(a_i) \Rightarrow P(C_i(a_1,a_2,\dots,b_0,b_1\dots))$$
68 |
69 | Entonces $$a::A \Rightarrow P(a)$$
70 |
71 |
72 | ## Ejemplo 1: Naturales
73 |
74 | Nuestro primer ejemplo va a ser obtener la inducción sobre los naturales como
75 | caso particular. Damos una definición de los naturales en lenguaje Haskell, con
76 | los axiomas de Peano, un natural es 0 o el siguiente de un natural:
77 |
78 | ~~~ Haskell
79 | data Nat = O
80 | | S Nat
81 | ~~~
82 |
83 | Que equivale a la definición en Coq:
84 |
85 | ~~~ Coq
86 | Inductive nat : Type :=
87 | | O : nat
88 | | S : nat -> nat
89 | ~~~
90 |
91 | Es decir, si lo demostramos para `0` y para `S n` sabiéndolo para `n`, lo
92 | hemos demostrado para todos los naturales.
93 |
94 |
95 | ## Ejemplo 2: Árboles binarios
96 |
97 | Ahora vamos a intentar el ejemplo que motivó esta búsqueda. Definimos un árbol
98 | binario como un árbol vacío o como un nodo del que surgen dos árboles binarios,
99 | en Haskell:
100 |
101 | ~~~ Haskell
102 | data Tree a = Empty
103 | | Node a (Tree a) (Tree a)
104 | ~~~
105 |
106 | Que equivale a la definición en Coq:
107 |
108 | ~~~ Coq
109 | Inductive tree (X:Type) : Type :=
110 | | nilt : tree X
111 | | node : X -> tree X -> tree X -> tree X.
112 | ~~~
113 |
114 | Es decir, si demostramos una propiedad para el árbol vacío y para un árbol
115 | sabiendo que la cumplen sus subárboles derecho e izquierdo, la hemos demostrado
116 | para todos los árboles binarios.
117 |
118 | En el repositorio
119 | [Mario Román/recorridosArboles](https://github.com/Mario Román/recorridosArboles) hay varias
120 | demostraciones por inducción sobre árboles binarios, explicados en
121 | lenguaje natural y demostrados luego sobre el asistente de demostraciones Coq.
122 |
--------------------------------------------------------------------------------
/blog/_posts/2015-3-14-intro-beamer.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Introducción a Beamer
4 | authors:
5 | - Pablo Baeyens
6 | category: Programación
7 | ---
8 |
9 | `beamer` es una clase de documento de LaTeX que nos permite crear diapositivas en pdf
10 | y otros formatos. Permite el uso de transiciones, mostrar elementos selectivamente en la
11 | pantalla y aprovechar las capacidades de `tikz`, `pgf` y la mayoría de paquetes de LaTeX
12 | para personalizar el aspecto de la presentación al detalle.
13 |
14 | Puedes encontrar una guía básica escrita en `beamer` [aquí](https://github.com/libreim/beamer).
15 | No he podido cubrir todo, así que otros recursos que puedes utilizar son:
16 |
17 | - [La guía oficial de `beamer`](http://osl.ugr.es/CTAN/macros/latex/contrib/beamer/doc/beameruserguide.pdf)
18 | - [Presentations Wikibooks](http://en.wikibooks.org/wiki/LaTeX/Presentations)
19 | - [TeX Stack Exchange](http://tex.stackexchange.com/questions/tagged/beamer)
20 |
21 | Además, puedes utilizar las plantillas disponibles en [Mario Román/plantillas](https://github.com/Mario Román/plantillas/tree/master/presentacion) para facilitar tu trabajo.
22 |
--------------------------------------------------------------------------------
/blog/_posts/2015-3-14-latex.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: ¿Cómo aprender LaTeX?
4 | authors:
5 | - Pablo Baeyens
6 | category: Programación
7 | ---
8 |
9 | [$$\LaTeX$$](http://www.latex-project.org) es un lenguaje de marcado y composición de textos para crear documentos técnicos, crear gráficos, escribir matemáticas... Actualmente $$\LaTeX$$ se utiliza junto con otros paquetes que añaden funcionalidades adicionales, por lo que dar una visión completa de sus capacidades es complejo. A continuación tienes una lista de recursos para aprender e utilizar $$\LaTeX$$ y algunos de sus paquetes.
10 |
11 |
12 |
13 | ### Instalación
14 |
15 | - **GNU/Linux**: Ubuntu y otras distribuciones incluyen por defecto [TexLive](). Si quieres instalarla puedes hacerlo siguiendo [estas instrucciones](https://www.tug.org/texlive/pkginstall.html). TexLive incluye un gestor de paquetes ([tlmgr](https://www.tug.org/texlive/doc/tlmgr.html)) para instalarlos manualmente, aunque puedes hacerlo automáticamente utilizando [`texliveonfly`](http://www.ctan.org/pkg/texliveonfly).
16 | - **Windows**: La distribución más utilizada es [*MikTeX*](http://miktex.org/). Cuenta con un gestor de paquetes que los instala automáticamente. Aprende a utilizarlo [aquí](http://docs.miktex.org/manual/localguide.html).
17 | - **Mac OS**: La distribución más utilizada es [*MacTeX*](https://tug.org/mactex/). Puedes encontrar [aquí](http://computers.tutsplus.com/tutorials/the-beginners-guide-to-using-tex-in-os-x--mac-45177) una guía de uso e instalación.
18 | - **Online**: Puedes editar documentos online de forma colaborativa con [ShareLaTeX](https://www.sharelatex.com). Puedes encontrar otras opciones [aquí](http://tex.stackexchange.com/questions/3/compiling-documents-online).
19 |
20 | ### Introducciones generales
21 |
22 | Si no conoces $$\LaTeX$$, empieza leyendo [esta respuesta de tex.stackexchange](http://tex.stackexchange.com/questions/4420/best-way-to-start-using-latex-tex) para tener una idea básica. Una vez hecho esto puedes leer:
23 |
24 | - Una introducción muy corta (4 páginas) es [*The very short guide to typesetting with $$\LaTeX$$*](http://osl.ugr.es/CTAN/info/latex-veryshortguide/veryshortguide.pdf). Después de leer esta introducción podrás utilizar $$\LaTeX$$ de forma básica y generar documentos.
25 |
26 | - Una de las guías más utilizadas (130 páginas) es [*La introducción no-tan-corta a LATEX 2ε*](http://osl.ugr.es/CTAN/info/lshort/spanish/lshort-a4.pdf), disponible *online* en español.
27 |
28 | - El [WikiBook en inglés](http://en.wikibooks.org/wiki/LaTeX) y su versión [en español](http://es.wikibooks.org/wiki/Manual_de_LaTeX) disponen también de guías divididas en secciones independientes, siendo muy útiles para consultar aspectos concretos.
29 |
30 | - Hay otras introducciones y libros en inglés [aquí](http://tex.stackexchange.com/questions/11/what-are-good-learning-resources-for-a-latex-beginner), y encontrarlos en otros idiomas (incluido en español) [aquí](http://tex.stackexchange.com/questions/84384/latex-introductions-in-languages-other-than-english).
31 |
32 | ### Matemáticas
33 | $$\LaTeX$$ ofrece la capacidad de escribir expresiones matemáticas utilizando una sintaxis especial. Puedes encontrar una guía rápida [aquí](ftp://ftp.ams.org/pub/tex/doc/amsmath/short-math-guide.pdf). Dada la gran cantidad de símbolos, existen distintos recursos para encontrar los símbolos adecuados:
34 |
35 | - [Detexify](http://detexify.kirelabs.org/classify.html) permite dibujar un símbolo y obtener su comando. Es la opción más sencilla.
36 | - [The Comprehensive $$\LaTeX$$ Symbol List (**4MB!!**)](http://osl.ugr.es/CTAN/info/symbols/comprehensive/symbols-a4.pdf) incluye una lista que puedes consultar en caso de no encontrar el símbolo adecuado.
37 |
38 | ### Referencia y documentación
39 | La gran cantidad de paquetes existentes hace difícil la existencia de un documentación exhaustiva de $$\LaTeX$$. No obstante, algunos recursos que puedes utilizar para encontrar tus respuestas son:
40 |
41 | - [tex.stackexchange](http://tex.stackexchange.com/). Esta es la comunidad de preguntas y respuestas sobre TeX y $$\LaTeX$$ de la red StackExchange. Si no encuentras, ¡siempre puedes preguntar!
42 | - La mayor parte de distribuciones incluyen gran cantidad de documentación, a la que puedes acceder utilizando el comando `texdoc` . Puedes leer más [aquí](http://tex.stackexchange.com/questions/2124/is-there-a-comprehensive-and-complete-latex-reference).
43 | - [CTAN](http://www.ctan.org) incluye la documentación de gran cantidad de paquetes.
44 |
45 | ### Plantillas
46 |
47 | Para empezar un documento complejo, es útil utilizar plantillas o ejemplos. Algunos recursos son:
48 |
49 | - CTAN incluye gran cantidad de [ejemplos](http://osl.ugr.es/CTAN/info/examples/) de distintos paquetes y funcionalidades.
50 | - Para encontrar plantillas puedes ver [el repositorio](https://github.com/Mario Román/plantillas) de @Mario Román y encontrar otras plantillas [aquí](http://www.latextemplates.com/) y [aquí](https://es.sharelatex.com/templates/).
51 |
52 | ### Github y otros
53 |
54 | Otros recursos que pueden ser útiles son:
55 |
56 | - **Macros**: $$\LaTeX$$ permite la creación de comandos y entornos. Para una guía básica puedes leer [Wikibooks](http://en.wikibooks.org/wiki/LaTeX/Macros). Para macros más avanzadas y clases, consulta [aquí](http://tex.stackexchange.com/questions/12668/where-do-i-start-latex-programming).
57 | - **Git y $$\LaTeX$$**: Para integrar git, puedes leer [esta guía](http://stackoverflow.com/questions/6188780/git-latex-workflow).
58 | - `tikz` permite crear imágenes y todo tipo de gráficos vectoriales. Para empezar a utilizarlo puedes leer [aquí](http://tex.stackexchange.com/questions/9116/what-is-the-minimum-one-needs-to-know-to-use-tikz). Además, puedes ver algunos ejemplos [aquí](http://www.texample.net/tikz/examples/).
59 | - Puedes encontrar una guía de beamer [aquí](https://github.com/libreim/beamer).
60 |
--------------------------------------------------------------------------------
/blog/_posts/2016-01-08-teoria-de-tipos.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Teoría de tipos
4 | authors:
5 | - Mario Román
6 | category: Álgebra
7 | ---
8 |
9 | Los sistemas de tipos tienen su utilidad en las matemáticas. Sirven para modelar
10 | una fundamentación de las matemáticas distinta de la usual fundamentación
11 | conjuntista; y tienen varias aplicaciones interesantes en lenguajes funcionales
12 | y asistentes de demostración. En particular, sobre los tipos se puede definir un
13 | álgebra y se pueden representar sistemas lógicos. Vamos a tratar esas
14 | aplicaciones referenciando en cada caso artículos donde se exponen en profundidad.
15 |
16 |
17 | ## Inducción estructural
18 |
19 | La inducción estructural es una generalización de la inducción usual sobre los
20 | naturales que la extiende a otras estructuras representables como tipos de un
21 | lenguaje funcional. Sobre la inducción estructural hemos escrito previamente en el blog una
22 | introducción:
23 |
24 | * [Inducción Estructural - Blog LibreIM](/blog/2015/03/14/induccion-estructural/)
25 |
26 | En ese post se escriben ejemplos sobre los naturales y los
27 | árboles. El artículo sobre el que se basa es:
28 |
29 | * [When can we do induction? - math.blogoverflow](http://math.blogoverflow.com/2015/03/10/when-can-we-do-induction/)
30 |
31 | Ejemplos y más detalles sobre inducción estructural y sus usos pueden
32 | encontrarse en:
33 |
34 | * [Some notes on Structural Induction - Michael Erdmann](http://www.cs.cmu.edu/~me/212/handouts/structural.pdf)
35 | * [Structural Induction Principles for Functional Programmers - James Caldwell](http://arxiv.org/pdf/1312.2696.pdf)
36 |
37 | Y varias demostraciones por inducción estructural implementadas en Coq en este
38 | repositorio sobre [**recorridos en árboles**](https://github.com/Mario Román/recorridosArboles).
39 |
40 |
41 | ## Álgebra de tipos
42 |
43 | En un post anterior de este mismo blog hemos tratado el álgebra de tipos. Ese
44 | post se basó sobre otros tres publicados en el blog de Chris Taylor:
45 |
46 | * [Álgebra de tipos - Blog LibreIM](/blog/2015/03/24/algebra-tipos/)
47 | * [The algebra of algebraic data types, Part I - Chris Taylor](https://web.archive.org/web/20131221121829/https://chris-taylor.github.io/blog/2013/02/10/the-algebra-of-algebraic-data-types/)
48 | * [The algebra of algebraic data types, Part II - Chris Taylor](https://web.archive.org/web/20140222144454/https://chris-taylor.github.io/blog/2013/02/11/the-algebra-of-algebraic-data-types-part-ii/)
49 | * [The algebra of algebraic data types, Part III - Chris Taylor](https://web.archive.org/web/20130613144904/http://chris-taylor.github.io/blog/2013/02/13/the-algebra-of-algebraic-data-types-part-iii/)
50 |
51 | En el segundo de los artículos se usan funciones generadoras para probar
52 | resultados sobre los números de Catalan y los árboles binarios. La teoría de
53 | funciones generadoras necesaria para entender el tratamiento de los árboles
54 | binarios la explica Mike Spivey en
55 | *[The catalan numbers from their generating function](https://mikespivey.wordpress.com/2013/03/19/the-catalan-numbers-from-their-generating-function/)*.
56 |
57 |
58 | Además, existe un resultado de **Fiore y Leinster** que afirma que si demostramos
59 | una relacion polinómica para números complejos, también será válida para
60 | cualquier [semianillo](https://en.wikipedia.org/wiki/Semiring). Y por tanto, para los tipos.
61 | Esto quiere decir que, en la mayoría de las ocasiones, podemos usar
62 | la resta o la división de tipos como si existieran. La demostración excluye
63 | algunos casos particulares y se expone aquí:
64 |
65 | * [Objects of categories as complex numbers - Marcelo Fiore y Tom Leinster](http://arxiv.org/pdf/math/0212377v1.pdf)
66 |
67 | Sobre el uso de las derivadas en el álgebra de tipos existe un resultado de
68 | **Conor McBride** que relaciona las derivadas parciales con los [*zippers*](http://learnyouahaskell.com/zippers) de Haskell
69 | usados para representar contextos. Puede leerse aquí:
70 |
71 | * [The derivative of a regular type is its type of one-hole contexts - Conor McBride](http://strictlypositive.org/diff.pdf).
72 |
73 |
74 | ## Lógica con tipos
75 |
76 | La aplicación de los tipos a la lógica y las demostraciones parte del
77 | isomorfismo de Curry-Howard, que relaciona los sistemas de tipos con sistemas
78 | lógicos. El sistema más simple donde puede apreciarse el isomorfismo es el
79 | [**cálculo lambda tipado**](https://en.wikipedia.org/wiki/Typed_lambda_calculus),
80 | que es isomorfo a la
81 | [**deducción natural**](https://en.wikipedia.org/wiki/Natural_deduction). La
82 | deducción natural es un ejemplo de lógica intuicionista, lo que en la práctica
83 | quiere decir que *no* (!) se tienen el *tercio excluso* y la *doble negación* como
84 | axiomas:
85 |
86 | $$ A \wedge \neg A$$
87 |
88 | $$ \neg \neg A \implies A $$
89 |
90 |
91 |
92 | Los apuntes sobre
93 | [**Curry-Howard**](https://github.com/libreim/curryHoward/blob/master/CurryHoward.pdf)
94 | de los repositorios del doble grado explican el isomorfismo sobre la deducción
95 | natural y el cálculo lambda tipado. El
96 | [código fuente](https://github.com/libreim/curryHoward/tree/master/src)
97 | acompañando los apuntes está escrito en Coq y Haskell.
98 |
99 | La idea de tratar las proposiciones como tipos la expone **Philip Wadler** en los
100 | dos siguientes artículos: primero de manera didáctica, con una introducción
101 | histórica y sobre el sistema de la deducción natural, y luego de forma más
102 | compleja, exponiendo el isomorfismo sobre el sistema de tipos de Haskell.
103 |
104 | * [Propositions as Types - Philip Wadler](http://homepages.inf.ed.ac.uk/wadler/papers/propositions-as-types/propositions-as-types.pdf)
105 | * [The Girard-Reynolds Isomorphism - Philip Wadler](http://homepages.inf.ed.ac.uk/wadler/papers/gr2/gr2.pdf)
106 |
107 |
108 | ## Parametricidad
109 |
110 | La parametricidad limita las instancias posibles de los tipos de la forma
111 | `forall a. p(a)`, y nos permite obtener teoremas sobre todas las instancias de
112 | esos tipos. Se explica a nivel intuitivo en el siguiente post de Bartosz
113 | Milewski y más formalmente en este paper de Philip Wadler:
114 |
115 | * [Parametricity: Money for Nothing and Theorems for Free - Bartosz Milewski](http://bartoszmilewski.com/2014/09/22/parametricity-money-for-nothing-and-theorems-for-free/)
116 | * [Theorems for free! - Philip Wadler](http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf)
117 |
118 |
119 | ## Teoría de tipos
120 |
121 | Los tipos pueden usarse para fundamentar las matemáticas, del mismo modo que lo
122 | hacen los conjuntos (en sistemas axiomáticos como
123 | [ZFC](https://en.wikipedia.org/wiki/Zermelo%E2%80%93Fraenkel_set_theory)) o las
124 | categorías (en sistemas como [ETCS](https://ncatlab.org/nlab/show/ETCS)). En el
125 | siguiente artículo se discuten las diferencias de ambos con la **teoría de tipos
126 | dependientes de Martin-Löf**, que se expone por completo en las notas de
127 | Nordström, Petersson y Smith:
128 |
129 | * [From Set Theory to Type Theory - The n-Category Café](https://golem.ph.utexas.edu/category/2013/01/from_set_theory_to_type_theory.html)
130 | * [Martin-Löf Type Theory - B. Nordström, K. Petersson, J.M. Smith](http://www.cse.chalmers.se/~bengt/papers/hlcs.pdf)
131 |
132 | Esto nos da una fundamentación de las matemáticas con una interpretación
133 | computacional clara.
134 |
135 | Una refinación de esas teorías para producir una fundamentación también
136 | constructivista de las matemáticas es el Cálculo de Construcciones (Calculus of
137 | constructions, COC) desarrollado por **Thierry Coquand** y **Gérard Huet**,
138 | que finalmente dará lugar al asistente de demostraciones **COQ**, desarrollado por
139 | el INRIA. El [**$$\lambda$$-cubo**](https://en.wikipedia.org/wiki/Lambda_cube) es un diagrama para exponer cómo este sistema amplía
140 | al *cálculo lambda tipado* y al *Sistema $$F_\omega$$* que usa Haskell.
141 |
142 | * [Calculus of Constructions - T. Coquand, G. Huet](http://ac.els-cdn.com/0890540188900053/1-s2.0-0890540188900053-main.pdf?_tid=3846e956-b301-11e5-8e78-00000aab0f02&acdnat=1451925532_87ac5a8e6a7bd6477746a55c17130f43).
143 | * [The Coq proof assistant - INRIA](https://coq.inria.fr/)
144 |
--------------------------------------------------------------------------------
/blog/_posts/2016-07-22-apuntes-de-introduccion-al-calculo.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Apuntes de introducción al cálculo
4 | authors:
5 | - Ignacio Cordón
6 | editors:
7 | - Mario Román
8 | - David Charte
9 | category: Análisis
10 | ---
11 |
12 | Presentamos el código fuente de un libro completo de Cálculo escrito por D. Francisco Javier Pérez González, profesor
13 | del departamento de Análisis Matemático de la Universidad de Granada, que sirve como una maravillosa
14 | introducción al Análisis y al razonamiento matemático. Los apuntes están escritos en Latex y licenciados en
15 | Creative Commons BY-NC-SA.
16 |
17 | Queremos agradecérselos a D. Javier Pérez,
18 | que nos proporcionó el código de sus apuntes para que pudiésemos publicarlo, y que ha ayudado a hacer del
19 | conocimiento algo libre y accesible a sus alumnos. En su [página web](http://www.ugr.es/~fjperez/)
20 | se puede encontrar mucho más material dedicado al análisis matemático, como series de
21 | Fourier, variable compleja o análisis en $$\mathbb{R}^n$$.
22 |
23 | Está disponible [el libro completo en formato PDF](https://github.com/libreim/calculo/releases/download/apuntes/calculo.pdf) y el código fuente lo alojamos en [este repositorio en GitHub](https://github.com/libreim/calculo).
24 |
--------------------------------------------------------------------------------
/blog/_posts/2016-10-16-apuntes.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Apuntes para el doble grado
4 | authors:
5 | - Múltiples
6 | editors:
7 | - Javier Sáez
8 | - José María Martín
9 | - Daniel Pozo
10 | - Antonio Coín
11 | - Sofía Almeida
12 | - Jesús Sánchez
13 | - Luis Ortega
14 | - Pedro Bonilla
15 | - Guillermo Galindo
16 | - David Charte
17 | category: Utilidades
18 | ---
19 |
20 | ## Repositorio de apuntes
21 |
22 | A iniciativa de los alumnos de segundo, hemos dejado público un repositorio de
23 | apuntes colectivo sobre las asignaturas del doble grado:
24 |
25 | - [ApuntesDGIIM - GitHub](/apuntesDGIIM/)
26 |
27 | Puedes descargar los apuntes, todavía en construcción, y con licencia Creative Commons en su
28 | [página](/apuntesDGIIM/), que estará disponible desde
29 | [recursos](/recursos).
30 |
--------------------------------------------------------------------------------
/blog/_posts/2017-02-07-apuntes-de-lgebra-ii-en.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Apuntes de Álgebra II
4 | authors:
5 | - Rodrigo Raya
6 | editors:
7 | - Diego Asterio
8 | category: Álgebra
9 | ---
10 |
11 | En los repositorios de LibreIM se han añadido unos [apuntes que se corresponden con el temario de la asignatura Álgebra II](https://github.com/libreim/apuntesalgebraii/blob/master/apuntesalgebraii/algebra2.pdf).
12 |
13 | Las aportaciones para mejorar estos apuntes son bienvenidas. En particular, en el archivo pdf del repositorio se incluyen los teoremas de Sylow, que se perdieron en la versión del código latex. También son bienvenidas contribuciones que completen las demostraciones de los teoremas enunciados o amplíen el material existente.
14 |
15 | [Enlace al repositorio](https://github.com/libreim/apuntesalgebraii/tree/master/apuntesalgebraii)
16 |
--------------------------------------------------------------------------------
/blog/_posts/2017-05-05-emacs-lazy.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Emacs for lazy people
4 | authors:
5 | - David Charte
6 | lang: en
7 | category: Programación
8 | ---
9 |
10 | Emacs is one of the most powerful, extensible editors out there.
11 | However, learning to use it is not an easy task, and I'm just really
12 | lazy. The following are some packages that I hope will make your life
13 | way easier. And if you already use Emacs, I encourage you to try them
14 | and see if they help you get a more comfortable development environment.
15 |
16 | To add any of these packages to your Emacs configuration, find your
17 | initialization file (usually `~/.emacs` or `~/.emacs.d/init.el`) and
18 | add the snippets there. You will also need to install and enable `use-package`
19 | beforehand ([why?](https://web.archive.org/web/20150303120448/http://www.lunaryorn.com/2015/01/06/my-emacs-configuration-with-use-package.html)).
20 |
21 |
22 |
23 | Smex
24 | ----
25 |
26 | In Emacs we use M-x
27 | (Alt+X) to enter any
28 | command without the need for a dedicated keyboard shortcut or menu
29 | entry. By default Emacs doesn't help much while writing a command, and
30 | it can be challenging to remember many of them, as well as tedious
31 | writing the long ones (`package-list-packages` anyone?).
32 | [Smex](https://github.com/nonsequitur/smex/) is a M-x enhancement for
33 | Emacs, built on top of Ido, which means it will try to predict and
34 | autocomplete commands as you write them.
35 |
36 | In order to install and enable Smex, add the following code to your
37 | initialization file:
38 |
39 | ~~~common_lisp
40 | (use-package smex
41 | :config (smex-initialize))
42 | ~~~
43 |
44 | Ergoemacs
45 | ---------
46 |
47 | If you're just starting to use emacs, you may find it difficult to learn
48 | all the new keybindings. If you're a long-time user, you may have
49 | experienced repetitive strain injury (RSI), also known as [Emacs
50 | pinky](https://en.wikipedia.org/wiki/Emacs#Emacs_pinky). Don't worry,
51 | I've got just the solution for you:
52 | [ergoemacs-mode](https://ergoemacs.github.io/index.html) is a minor-mode
53 | that sets ergonomic and well-known keybindings for common editing
54 | functions, with the aim of reducing RSI as well as adding some
55 | familiarity to the use of emacs.
56 |
57 | Just as before, add the following code to your initialization file and
58 | restart Emacs to use it:
59 |
60 | ~~~common_lisp
61 | (use-package ergoemacs-mode
62 | :init
63 | (setq ergoemacs-theme nil)
64 | (setq ergoemacs-keyboard-layout "es")
65 | :config
66 | (ergoemacs-mode 1)
67 | )
68 | ~~~
69 |
70 | You can check [your new keybinding
71 | layout](https://ergoemacs.github.io/key-setup.html). Remember that,
72 | after enabling Ergoemacs, the keyboard shortcut that allows you to enter
73 | a custom command becomes
74 | Alt+A.
75 |
76 | Which-key
77 | ---------
78 |
79 | {% include figure
80 | size="large"
81 | path="emacs-which-key.png"
82 | caption="Which-key interface" %}
83 |
84 | [Which-key](https://github.com/justbur/emacs-which-key) displays the key
85 | bindings following your currently entered incomplete command. That way,
86 | when you can't remember which key to press, you'll have a cheat sheet in
87 | a couple of seconds.
88 |
89 | ~~~common_lisp
90 | (use-package which-key
91 | :config (which-key-mode))
92 | ~~~
93 |
94 | Auto-reload stuff
95 | -----------------
96 |
97 | When using version control, files generally change while having them
98 | open in the editor. If this happens, I expect my editor to refresh the
99 | files so that I don't write on an old version. Emacs doesn't enable this
100 | behavior by default, rather letting the user decide if they want to
101 | reload files. Instead, we can set it to automatically reload files from
102 | disk when changed via these configuration lines (source: [Pragmatic
103 | Emacs](http://pragmaticemacs.com/emacs/automatically-revert-buffers/)):
104 |
105 | ~~~common_lisp
106 | (global-auto-revert-mode 1)
107 | (add-hook 'dired-mode-hook 'auto-revert-mode)
108 | ~~~
109 |
110 | {:.note}
111 | The [magit](https://magit.vc/) plugin for version control with git does
112 | refresh the files without the need for this configuration (thanks [Nacho](https://ncordon.github.io/)
113 | for the remark!).
114 |
115 | Still want more?
116 | -------------------
117 |
118 | These are the main tools that have eased my way into Emacs. You can check out the rest of my configuration in [my dotfiles repository](https://github.com/David Charte/dotfiles/tree/master/emacs).
119 |
--------------------------------------------------------------------------------
/blog/_posts/2017-11-09-calculolambda.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Recursos sobre cálculo lambda
4 | authors:
5 | - Mario Román
6 | lang: es
7 | category: Lógica
8 | ---
9 |
10 | > 1936 - Alonzo Church also invents every language that will ever be
11 | > but does it better. His lambda calculus is ignored because it is
12 | > insufficiently C-like. This criticism occurs in spite of the fact
13 | > that C has not yet been invented.
14 | >
15 | > -- *[A Brief, Incomplete, and Mostly Wrong History of programming languages](http://james-iry.blogspot.com.es/2009/05/brief-incomplete-and-mostly-wrong.html)*
16 |
17 | Alonzo Church desarrolló el cálculo lambda en los años 30 como un
18 | sistema formal que capturaba una noción abstracta de función. Este
19 | sistema puede interpretarse a su vez como un modelo de computación
20 | equivalente a las máquinas de Turing. Refinamientos posteriores
21 | añadieron tipos al lenguaje, que serían la base de una correspondencia
22 | entre modelos de computación y sistemas lógicos.
23 |
24 | ## Apuntes generales
25 | Pueden encontrarse presentaciones generales sobre el cálculo lambda en:
26 |
27 | * Peter Selinger, [Lecture notes on the lambda calculus](http://www.mathstat.dal.ca/~selinger/papers/lambdanotes.pdf).
28 | * Raúl Rojas, [A Tutorial Introduction to the Lambda Calculus](https://www.utdallas.edu/%7Egupta/courses/apl/lambda.pdf)
29 | * H.P. Barendregt, The Lambda Calculus, its syntax and semantics.
30 |
31 |
32 |
33 | En particular, hemos publicado [tres capítulos sobre cálculo lambda](https://github.com/M42/lambda.notes)
34 | como parte de una serie de notas sobre categorías y computación, y una [presentación](https://mroman42.github.io/talks/untypedlambda.pdf)
35 | sobre las bases del cálculo lambda. Tratan
36 |
37 | 1. cálculo lambda no tipado,
38 | 2. cálculo lambda simplemente tipado, y
39 | 3. el isomorfismo de Curry-Howard.
40 |
41 | La mayoría de las demostraciones allí expuestas usan [inducción estructural](/blog/2015/03/14/induccion-estructural/).
42 |
43 | ## Intérpretes de cálculo lambda
44 | Junto a esas notas, se ofrece un intérprete de cálculo lambda no tipado y
45 | simplemente tipado.
46 |
47 | * [Mikrokosmos](https://mroman42.github.io/mikrokosmos/), intérprete de cálculo lambda.
48 | * [Tutorial de Mikrokosmos](https://mroman42.github.io/mikrokosmos/tutorial.html), explicando cómo programar en el cálculo lambda.
49 | * [Código fuente](https://github.com/M42/mikrokosmos), en Haskell y licenciado bajo GPLv3.
50 |
51 | Muchos otros intérpretes de cálculo lambda pueden encontrarse en
52 | Internet, así como tutoriales para escribir un intérprete
53 |
54 | * [The Glambda interpreter](https://github.com/goldfirere/glambda),
55 | cuyo código sirve como introducción a GADTs en Haskell;
56 | * [A λ-calculus interpreter](https://tadeuzagallo.com/blog/writing-a-lambda-calculus-interpreter-in-javascript/) un
57 | tutorial en Javascript.
58 |
59 | ## Isomorfismo de Curry-Howard
60 | El isomorfismo de Curry-Howard es una correspondencia profunda entre tipos y lógica que
61 | se manifiesta en correspondencias particulares entre ciertos sistemas de tipos y ciertos
62 | sistemas lógicos. Por ejemplo, el sistema de tipos del *cálculo lambda simplemente tipado*
63 | se corresponde con la *lógica proposicional intuicionista*.
64 |
65 | Puede leerse más sobre este isomorfismo en
66 |
67 | * [Propositions as Types](http://homepages.inf.ed.ac.uk/wadler/papers/propositions-as-types/propositions-as-types.pdf), de Philip Wadler;
68 | * [Los apuntes sobre Curry-Howard](https://libreim.github.io/blog/2014/12/04/curry-howard/), de este mismo blog; y
69 | * [A tutorial on the Curry-Howard Correspondence](http://purelytheoretical.com/papers/ATCHC.pdf), de Darryl McAdams.
70 |
71 |
--------------------------------------------------------------------------------
/blog/archive.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Archivo
3 | layout: content
4 | paginate:
5 | category: blog
6 | per_page: 50
7 | ---
8 |
9 |
10 |
11 | {% for post in paginator.posts %}
12 | - [{{ post.title }}]({{ post.url }}) por {{ post.authors | join: ", " }}{% endfor %}
13 |
14 | {% include pagination.html %}
15 |
--------------------------------------------------------------------------------
/blog/feed.xml:
--------------------------------------------------------------------------------
1 | ---
2 | layout: null
3 | ---
4 |
5 |
6 |
7 | {{- site.name | xml_escape -}}
8 | {%- if site.description -%}{{- site.description | xml_escape -}}{%- endif -%}
9 | {{- site.url -}}
10 |
11 | {%- for post in site.categories.blog limit:10 -%}
12 |
13 | {{- post.title | xml_escape -}}
14 | {{- post.content | codecogs | xml_escape -}}
15 | {{- post.date | date: "%a, %d %b %Y %H:%M:%S %z" -}}
16 | {{- site.url -}}{{- post.url -}}
17 | {{- site.url -}}{{- post.url -}}
18 |
19 | {%- endfor -%}
20 |
21 |
22 |
--------------------------------------------------------------------------------
/blog/index.html:
--------------------------------------------------------------------------------
1 | ---
2 | title: Blog
3 | layout: content-outer
4 | paginate:
5 | category: blog
6 | ---
7 |
8 |
9 |
10 |
11 | {%- for post in paginator.posts -%}
12 |
13 | {%- assign content = post.content -%}
14 | {%- if content contains '' -%}
15 | {%- assign content = content | split:'' | first -%}
16 | {%- assign content = content | append: '
21 |
22 | {%- include banner
23 | side="left"
24 | title="Proyectos"
25 | description="Para colaborar directamente en nuestros proyectos, consulta [cómo escribir artículos para el blog](https://github.com/libreim/blog/blob/sites/CONTRIBUTING.md) y [cómo aportar recursos](/recursos)"
26 | classes="odd"
27 | -%}
28 |
29 |
30 | {%- include banner
31 | side="right"
32 | title="Eventos"
33 | description="Si quieres estar al tanto de nuestros próximos eventos y proyectos, [inscríbete en nuestro formulario](http://goo.gl/forms/k4Yl1TK5XT2ZaDro1) para que te añadamos a la lista de correo y a nuestra organización de GitHub"
34 | classes="even"
35 | -%}
36 |
37 |
38 | {%- include banner
39 | side="left"
40 | title="Contacto"
41 | description="Forma parte de la comunidad siguiendo nuestro [perfil en Twitter](https://twitter.com/libreim_), [canal de Telegram](https://telegram.me/libreim) y uniéndote a nuestro [grupo de Telegram](https://telegram.me/libreimseminarios)"
42 | classes="odd"
43 | -%}
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | Otras comunidades
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | {%- include banner
61 | side="left"
62 | title="AMAT UGR"
63 | description="Asociación de estudiantes de matemáticas de la Universidad de Granada, con el objetivo de hacer llegar a grandes y pequeños el maravilloso mundo de las matemáticas"
64 | link="http://www.ugr.es/~amat/"
65 | classes="amat"
66 | -%}
67 |
68 | {%- include banner
69 | side="right"
70 | title="Geek & Tech Girls"
71 | description="Comunidad que a través del Software Libre acerca la tecnología a mujeres de todas las edades, a la vez que lucha por una sociedad igualitaria e inclusiva"
72 | link="https://geekandtechgirls.github.io/"
73 | classes="gtg"
74 | -%}
75 |
76 | {%- include banner
77 | side="left"
78 | title="Interferencias"
79 | description="Grupo ciberactivista sin ánimo de lucro que pretende reunir a una serie de personas interesadas en privacidad, vigilancia masiva, derechos en internet, seguridad y derivados"
80 | link="https://interferencias.github.io/"
81 | classes="intf"
82 | -%}
83 |
84 | {%- include banner
85 | side="right"
86 | title="Python Granada"
87 | description="La comunidad dedicada a Python en Granada y alrededores"
88 | link="https://www.python-granada.es/"
89 | classes="pyg"
90 | -%}
91 |
92 | {%- include banner
93 | side="left"
94 | title="OSL-UGR"
95 | description="Entidad perteneciente a la Delegación de la Rectora para la Universidad Digital que coordina actividades relacionadas con el software, hardware y cultura libre en la Universidad de Granada"
96 | link="http://osl.ugr.es"
97 | classes="osl"
98 | -%}
99 |
--------------------------------------------------------------------------------
/deploy.sh:
--------------------------------------------------------------------------------
1 | deploy_all() {
2 | local site_path=.site
3 | mkdir -p $site_path
4 | rm $site_path/* -rf
5 |
6 | bundle exec jekyll build -d $site_path
7 | touch $site_path/.nojekyll
8 | }
9 |
10 | deploy_all
11 |
--------------------------------------------------------------------------------
/guia-de-estilo.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Guía de estilo
4 | authors:
5 | - fdavidcl
6 | editors:
7 | - pbaeyens
8 | category: meta
9 | permalink: /styleguide/
10 | ---
11 |
12 | Esta guía recoge algunos consejos sobre el estilo a seguir
13 | a la hora de escribir un post, y además podrá servir de [plantilla](https://raw.githubusercontent.com/libreim/blog/site/guia-de-estilo.md).
14 |
15 | ## Datos del post
16 | Los datos del post forman la cajita que debe aparecer al principio
17 | de cada publicación. No serán interpretados por el procesador
18 | Markdown sino por Jekyll, para poder incrustar el post en la página
19 | web correcta y añadir los datos necesarios:
20 |
21 | ---
22 | layout: post
23 | title: Guía de estilo
24 | authors:
25 | - fdavidcl
26 | category: meta
27 | ---
28 |
29 | Algunas aclaraciones:
30 |
31 | * El `layout` debe ser siempre `post`. Existen otros layouts
32 | para otras páginas, pero no para los posts.
33 | * El título debe ser conciso y son preferibles los sustantivos a
34 | los verbos (por ejemplo, mejor "*Introducción a Javascript*" que
35 | "*Cómo programar en Javascript*" y que "*Una introducción a la
36 | programación en el lenguaje Javascript*"). No debe acabar en
37 | punto, aunque si tiene varias frases se pueden separar por
38 | puntos. Por ejemplo, "*Introducción a Javascript. Programación
39 | con prototipos*".
40 | * El autor es el identificador que hayáis añadido a
41 | [`_config.yml`](https://github.com/libreim/blog/blob/site/_config.yml).
42 | Si aún no tenéis un identificador, añadidlo.
43 | * En `category` solo puede haber una categoría. Debe ser más genérica
44 | que el tema que trate el post, pero no tanto como *informática*. Se
45 | pueden (y se deben) poner acentos.
46 |
47 | También es un dato del post el nombre del archivo, que será del tipo
48 | `2014-5-17-guia-de-estilo.md`. De él se extraerá la fecha y el enlace
49 | permanente del post, así que no lo hagais largo (en general debe
50 | contener las palabras más importantes del título) y separad por
51 | guiones y no por mayúsculas. No introduzcáis símbolos ni acentos
52 | (números sí son válidos).
53 |
54 | Nota
55 | : Es importante que la codificación del archivo sea *UTF-8
56 | sin BOM*. Si escribís en Linux la codificación *UTF-8* bastará.
57 |
58 | ## Contenido del post
59 |
60 | ### Introducción al tema
61 | Si el post va a ser muy largo, queremos que aparezca sólo el comienzo en la página principal, para que no se haga demasiado larga. En ese caso, después de una breve introducción al post, se escribe `` para que se corte el post en ese lugar en la página principal.
62 |
63 | ### Texto y formato
64 | No hace falta decir que cuidéis la ortografía y
65 | la gramática :). Si usáis un editor con vista previa de Markdown
66 | (como [Atom](http://www.webupd8.org/2014/05/install-atom-text-editor-in-ubuntu-via-ppa.html),
67 | o [StackEdit](https://stackedit.io/)) mejor que mejor, así no hay
68 | problemas de formato tampoco. Pero no os paséis con el formato. Reservad
69 | la negrita para cosas muy importantes, nunca destaquéis párrafos enteros.
70 |
71 | Nota
72 | : Hay algunas diferencias entre el intérprete de Markdown del
73 | blog y el de Atom/Github. En general, el del blog es más estricto con las
74 | líneas en blanco. Añadid siempre líneas en blanco para separar elementos
75 | y párrafos de cualquier otra cosa (listas, código, etc.).
76 |
77 | #### Teoremas, definiciones
78 | Usad la siguiente notación para denotar teoremas, lemas, definiciones y
79 | todo lo que tenga un "enunciado":
80 |
81 | ~~~markdown
82 |
83 | Teorema
84 | : No existen números naturales mayores que 7.
85 | ~~~
86 |
87 | Teorema
88 | : No existen números naturales mayores que 7.
89 |
90 | #### Referencias
91 | Para añadir referencias lo podemos hacer mediante notas a pie de página.
92 | Kramdown incluye una sintaxis específica para esta tarea[^kram]:
93 |
94 | [^kram]: [Kramdown Syntax](http://kramdown.gettalong.org/syntax.html#footnotes)
95 |
96 | ~~~markdown
97 | Kramdown incluye una sintaxis específica para esta tarea[^kram]
98 |
99 | [^kram]: [Kramdown Syntax - Footnotes](http://kramdown.gettalong.org/syntax.html#footnotes)
100 | ~~~
101 |
102 | Nota
103 | : ¡Usad un identificador suficientemente descriptivo para la referencia!
104 | Jekyll no distingue entre referencias de posts distintos por lo que
105 | si dos referencias tienen el mismo identificador se generarán enlaces que
106 | llevarán a una de ellas nada más.
107 |
108 | En general trataremos de seguir el siguiente formato para las referencias
109 | de libros:
110 |
111 | ~~~markdown
112 | Libro, Autor - Sección (página NN)
113 | ~~~
114 |
115 | y este para las referencias a sitios web:
116 |
117 | ~~~markdown
118 | [Página web](http://example.org)
119 | ~~~
120 |
121 | Si no tenéis un sitio concreto para ubicar la marca de referencia, añadid
122 | una frase al final al estilo de:
123 |
124 | Más información [^camino], [^mathandp]
125 |
126 | [^camino]: Constant Mean Curvature Surfaces with Boundary, Rafael López Camino - The Dirichlet Problem in Hyperbolic Space
127 | [^mathandp]: [Math and Programming](http://jeremykun.com/)
128 |
129 | ### Títulos y secciones
130 | Tenéis disponibles los títulos desde el nivel 2 (`##`) hasta nivel 6
131 | (`######`), aunque no os recomendaría usar tantos niveles. El nivel 1
132 | se utiliza automáticamente para el título del
133 | post. De nuevo, no escribáis un punto al final de un título. Evitad
134 | utilizar cualquier otro tipo de separación entre apartados, no uséis
135 | líneas horizontales (`* * *`) ni otro tipo de marcas. Si véis que la
136 | estructura de los posts no es suficientemente visible, mandadme un
137 | mensaje y mejoro el estilo de los títulos de sección.
138 |
139 | Nota
140 | : El procesador de Markdown del blog requiere una línea en
141 | blanco antes de cada título.
142 |
143 | Ejemplos:
144 |
145 | ## Título 2
146 |
147 | ### Título 3
148 |
149 | #### Título 4
150 |
151 | ##### Título 5
152 |
153 | ###### Título 6
154 |
155 | ### El código
156 | Para escribir código tenemos dos sintaxis. o bien dejar 4 espacios de
157 | margen, como el siguiente ejemplo
158 |
159 | ~~~markdown
160 | def codigo_en_ruby
161 | "Una prueba"
162 | end
163 | ~~~
164 | que genera
165 |
166 | def codigo_en_ruby
167 | "Una prueba"
168 | end
169 |
170 | o bien utilizar las marcas `~~~`, y además podemos especificar el
171 | lenguaje mediante una clase:
172 |
173 | ~~~~
174 | ~~~
175 | def codigo_en_ruby
176 | "Una prueba"
177 | end
178 | ~~~
179 | {: .ruby}
180 | ~~~~
181 | {: .markdown}
182 |
183 | que genera
184 |
185 | ~~~ruby
186 | def codigo_en_ruby
187 | "Una prueba"
188 | end
189 | ~~~
190 |
191 | ### Las matemáticas
192 | Para incrustar ecuaciones en $$\LaTeX$$, hay que hacerlo entre dobles dólares
193 | tanto para las ecuaciones en línea como centradas (se diferencian según vayan
194 | en un párrafo de texto o no). Ejemplos:
195 |
196 | ~~~markdown
197 | ...genera $$E = mc^2$$, ...
198 | ~~~
199 |
200 | genera $$E = mc^2$$, y
201 |
202 | ~~~markdown
203 |
204 | $$ \sqrt[n]{x_1x_2 \dots x_n} \leq \frac{x_1+x_2+\dots+x_n}{n} $$
205 |
206 | ~~~
207 |
208 | $$ \sqrt[n]{x_1x_2 \dots x_n} \leq \frac{x_1+x_2+\dots+x_n}{n} $$
209 |
210 | Nota
211 | : Es importante que haya una línea en blanco encima y debajo de las ecuaciones
212 | centradas, de forma que se construya un párrafo nuevo único para la ecuación.
213 |
214 | Además, al parecer kramdown tiene problemas con el carácter `|` y debemos
215 | sustituirlo por `\vert`.
216 |
217 | ### Figuras
218 |
219 | Para incluir imágenes o figuras en el post, se pueden subir imágenes en la
220 | carpeta [images](https://github.com/libreim/blog/tree/site/images), y crear
221 | una figura en el post con la siguiente sintaxis:
222 |
223 | ~~~markdown
224 | {: .fig}
225 | {% raw %} {% endraw %}
226 | **Figura 1.** Pie de la figura
227 | ~~~
228 |
229 | El ancho de la figura se puede ajustar sustituyendo `.fig` por `.med.fig` para
230 | una figura mediana o `.small.fig` para una figura pequeña.
231 |
232 | {: .fig.med}
233 | 
234 | **Figura 1.** Figura de ejemplo
235 |
236 | Nota
237 | : Es recomendable insertar dos espacios después de la imagen (` `) para
238 | asegurar que el pie aparezca en la línea de debajo de la imagen.
239 |
240 | ### Emoticonos y menciones
241 | Jekyll permite incluir [algunos](https://help.github.com/articles/using-jekyll-plugins-with-github-pages/)
242 | plugins. En el blog, tenemos habilitados dos de ellos:
243 |
244 | - [**Jemoji**](https://help.github.com/articles/emoji-on-github-pages/): Permite incluir emoticonos:exclamation::exclamation:. Puedes ver
245 | la lista completa de emoticonos junto con sus códigos [aquí](http://www.emoji-cheat-sheet.com/).
246 |
247 | - [**Menciones**](https://help.github.com/articles/mentions-on-github-pages/) Puedes mencionar a
248 | otros usuarios de Github añadiendo una @ al principio del *username*: @pbaeyens. Esto añadirá un enlace
249 | a su página de Github.
250 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Inicio
4 | bodyclass:
5 | - home-site
6 | ---
7 |
8 |
9 |
10 |
11 |
12 |
13 | Somos una comunidad dedicada al estudio y divulgación de las matemáticas y la informática.
Nuestro objetivo principal es la divulgación de las matemáticas y de la ingeniería informática. Queremos facilitar y hacer accesible el conocimiento en los campos que estudiamos a todas las personas interesadas.
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
Software libre
47 |
Apoyamos y divulgamos el software libre. Creemos que facilita la educación, el acceso al software y la creación de comunidades centradas en compartir el conocimiento.
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
Conocimiento libre
64 |
Apoyamos el conocimiento libre. Creemos que cualquier persona interesada debería poder acceder al conocimiento y que facilitar el mismo es un deber cívico. Por eso preferimos las obras científicas que permitan el acceso a cualquiera, con licencias libres y formatos abiertos.
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
Comunidad
79 |
Creemos en el trabajo colaborativo y comunitario. Creado por y para
80 | la comunidad. Abierto y disponible para todo el mundo.
81 |
82 |
85 | ¡Participa!
86 |
87 |