diff --git a/src/content/posts/apache-alta-carga-de-cpu/index.md b/src/content/posts/apache-alta-carga-de-cpu/index.md new file mode 100644 index 0000000..41ad097 --- /dev/null +++ b/src/content/posts/apache-alta-carga-de-cpu/index.md @@ -0,0 +1,24 @@ +--- +title: "Apache: Alta carga de CPU" +date: 2011-08-09T10:27:52Z +draft: false +tags: [ "sysadmin" ] +image: +--- + +

+ Llevo desde el fin de semana con la mosca detrás de la oreja. Uno de los servidores que administro ha visto incrementada de forma inexperada su carga media de CPU sin motivo aparente. Donde el load average normal de 1 minuto variaba entre 0.40 y 0.80 de repente suponía cargas tan elevadas como 60 o 100 unidades.

+

+ En esos momentos puntuales que llegaban a dejar la máquina zombie el proceso que abarcaba un consumo de entre el 60% y el 90% de CPU era apache2. Intrigante que ni error.log ni slow-queries.log de MySQL (lo que normalmente suele ser cuello de botella) dieran ninguna pista.

+

+ Analytics tampoco decía nada de un aumento considerable de visitas -más bien al contrario- y el resto de herramientas de monitorización parecían cómplices del problema (¡tener tools para ésto!).

+

+ En un alarde de desesperación y viendo más o menos por dónde podían venir los tiros -a través del método de prueba y error- localicé el VirtualHost que estaba dando problemas, un código no auditado y afamado por su ausente optimización. Vamos que ya tenía precedentes, aunque ninguno de esta índole.

+

+ Después de desactivar distintas partes del dominio en más pruebas esperando focalizar el error en algún script concreto, la conclusión es que tenía que ser algo que se incluía en todos los archivos, algo común a toda la web. Así que miramos los includes comunes (si, PHP) y llegamos a la conclusión de que era problema de sesiones, sin exculpar al programador.

+

+ Una de las primeras acciones de todos los scripts es definir el tiempo de sesión a 3 días, definir el directorio donde se guardarán los archivos de sesión y arrancar la sesión. Probablemente el programador no esperaba tener 60k visitas y más de 200k páginas vistas en los 3 días que dura cada sesión, pero está claro que para apache2 suponía un problema el acceso de lectura/escritura a un mismo directorio con más de 90k archivos.

+

+ La solución inicial -a falta de más tiempo para cambiar el sistema de sesiones a memcache, Redis o cualquier otra solución basada en RAM- era sencilla, reducir el tiempo de sesión, vaciar el directorio donde se guardan las sesiones, comprobar de nuevo el load average durante un intervalo representativo y una tarea programada que monitorice el contenido de ese directorio. Después de todo la carga se ha vuelto a estabilizar entre 0.30 y 0.40.

+

+ No sé si estoy para moralejas porque la solución es temporal, pero como lo prometido es deuda me gustaría terminar esta anotación advirtiendo a todo el mundo sobre la fiabilidad del código no auditado, el uso moderado de las sesiones y las endorfinas que libera uno cuando consigue resolver algo "así".

diff --git a/src/content/posts/apache-squid-nginx/index.md b/src/content/posts/apache-squid-nginx/index.md new file mode 100644 index 0000000..fd15faa --- /dev/null +++ b/src/content/posts/apache-squid-nginx/index.md @@ -0,0 +1,54 @@ +--- +title: "Apache + Squid + Nginx" +date: 2011-10-28T23:50:34Z +draft: false +tags: [ ] +image: +--- + +

+ ¡Menuda combinación!. A decir verdad empecé jugando un poco con el maldito slowloris y al final acabé montando este batiburrillo de servidores, primero para paliar el efecto del dichoso gusano y segundo para preparar el servidor para la inminente nueva versión del blog - que me gustaría estrenar con el décimo aniversario de este humilde rinconcito -.

+

+ En un esquema inicial analógico de esos que tantos nos gustan podemos ver la pirula (pido perdón de antemano por la calidad de la foto):

+

+

+

+ Probablemente no sea necesario tener 3 servidores para este entorno, seguro que puedo poner a escuchar Nginx en el puerto 80 y redirigir todo el tráfico dinámico al 81 a la vez que responde al tráfico estático de ciertos subdominios (static*) de forma automática y en la misma instancia. Pero tenía la tarde libre y me apetecía probar una configuración rara con Squid.

+

+ Apache

+

+ La configuración de Apache es de lo más sencilla, lo único que he hecho ha sido ponerlo a escuchar en el puerto 81 por defecto, y a todos sus Virtualhosts también. No había mucho más que tocar puesto que ya tenía el mod_php y todas las dependencias instaladas.

+

+ Nginx

+

+ Nunca había jugado con él y a primera vista me gustó la sencillez de sus archivos de configuración. Tampoco tenía que hacer gran cosa, ponerlo a escuchar en el puerto 82 y poco más puesto que sólo serviría contenido estático. Creé los Virtualhosts que atenderían las peticiones estáticas, los activé vía enlace simbólico a sites-enabled y poco más. La configuración de un Virtualhost cualquiera:

+ +``` +server { + listen 82; + server_name static.dominio.com; + root /home/www/dominio/sd/static/; + autoindex on; +} +``` + +

+ Squid

+

+ Aquí vino la diversión, ¿cómo decirle a Squid que balanceara el tráfico dinámico al puerto 81 y el estático al puerto 82?. Después de leer la documentación y hacer varias pruebas con cache_peer,  y cache_peer_domain he llegado a la conclusión que la configuración "buena" es la siguiente:

+ +``` +cache_peer ip parent 81 0 no-query originserver name=server_1 +cache_peer_domain server_1 dominio.com www.dominio.com +cache_peer ip parent 82 0 no-query originserver name=server_2 +cache_peer_domain server_2 static.dominio.com +``` + +

+ Como se puede ver, habría que cambiar ip por la ip pública correspondiente y los fqdn por los reales.

+

+ Conclusión

+

+ He pasado una tarde agradable en compañía de mis amigos los servidores web. No, en serio, al final he conseguido reproducir el escenario que me había propuesto, (aún sabiendo que se podría mejorar), he frenado los sockets incompletos de Apache y he preparado el servidor para servir estáticos de forma independiente del contenido dinámico (que en breve cambiará de PHP a Python + Django).

+

+ No ha estado mal :).

diff --git a/src/content/posts/bash-shellshock-bug-update-loving-fabric/gallery/bash-shellshock.png b/src/content/posts/bash-shellshock-bug-update-loving-fabric/gallery/bash-shellshock.png new file mode 100644 index 0000000..5aab155 Binary files /dev/null and b/src/content/posts/bash-shellshock-bug-update-loving-fabric/gallery/bash-shellshock.png differ diff --git a/src/content/posts/bash-shellshock-bug-update-loving-fabric/index.md b/src/content/posts/bash-shellshock-bug-update-loving-fabric/index.md new file mode 100644 index 0000000..445aba0 --- /dev/null +++ b/src/content/posts/bash-shellshock-bug-update-loving-fabric/index.md @@ -0,0 +1,33 @@ +--- +title: "Bash shellshock bug update: loving Fabric" +date: 2014-09-26T08:36:17Z +draft: false +tags: [ ] +image: shellshock.jpg +--- + +

When you wake up in the morning with a new like the bash shellshock bug you should get away your lazy part and update all your servers to new patched version. This is ssh every single server, check the vulnerability, update the package, check again that all is ok and move on to next host.

+

If you have tons of servers the task becomes tedious. To get a bit of fun you can choose to develop a Fabric module that makes the job instead of you. The fun:

+ +``` +def make_me_a_bashandwich(): + puts(red('Checking bash vulnerability')) + out = sudo("env x='() { :;}; echo vulnerable' bash -c 'echo this is a test'") + if "vulnerable" in out: + puts(red('Vulnerable')) + puts(red('Updating bash')) + sudo('apt-get update') + sudo('apt-get install --only-upgrade %s' % package) + else: + puts(green('OK')) +``` + +

Your only job is to run that piece of code in all your servers and take a deep look to the screen:

+ +``` +$ fab -H server1,server2,server3 -u root make_me_a_bashandwich +``` + +

+

In my humble opinion, it's more fun than the old way, isn't it?

+

Image credit: Robert GrahamTwitter.

diff --git a/src/content/posts/bash-shellshock-bug-update-loving-fabric/shellshock.jpg b/src/content/posts/bash-shellshock-bug-update-loving-fabric/shellshock.jpg new file mode 100644 index 0000000..a63338b Binary files /dev/null and b/src/content/posts/bash-shellshock-bug-update-loving-fabric/shellshock.jpg differ diff --git a/src/content/posts/cambiar-kernel-en-ovh-con-grub-nfs/index.md b/src/content/posts/cambiar-kernel-en-ovh-con-grub-nfs/index.md new file mode 100644 index 0000000..4b23ca2 --- /dev/null +++ b/src/content/posts/cambiar-kernel-en-ovh-con-grub-nfs/index.md @@ -0,0 +1,51 @@ +--- +title: "Cambiar kernel en ovh con grub (nfs)" +date: 2013-03-11T07:59:44Z +draft: false +tags: [ ] +image: +--- + +

El principal problema que existe para montar un servidor NFS en OVH es que los kernels que habilitan por defecto (OVH + grsec), además de venir con grsec como su propia descripción indica, no tienen soporte para instalar módulos de kernel. De forma que al intentar instalar el módulo para NFS nos dará un fantástico y maravilloso error. Por defecto tenemos el siguiente escenario:

+ +``` +# uname -a +Linux ns302399.ovh.net 3.2.13-grsec-xxxx-grs-ipv6-64 #1 SMP Thu Mar 29 09:48:59 UTC 2012 x86_64 GNU/Linux +``` + +

Así que no queda otra que reemplazar el kernel por uno que ya lleve el módulo de nfs builtin. Llegados a este punto tenemos varias opciones: instalar un kernel desde fuentes, modificar el ya instalado o bajarnos uno de los kernels ”-filer” de OVH. Los kernels "-filer" están pensados para este tipo de servidores de ficheros. Por sencillez optaremos por esta tercera opción.

+

Primeramente descargamos las imágenes del nuevo kernel que vamos a instalar desde el ftp oficial de OVH (ftp://ftp.ovh.net/made-in-ovh/bzImage/):

+ +``` +# cd /boot/ +# wget ftp://ftp.ovh.net/made-in-ovh/bzImage/3.2.13/bzImage-3.2.13-xxxx-grs-ipv6-64-filer +# wget ftp://ftp.ovh.net/made-in-ovh/bzImage/3.2.13/System.map-3.2.13-xxxx-grs-ipv6-64-filer +# ls +bzImage-3.2.13-xxxx-grs-ipv6-64 System.map-3.2.13-xxxx-grs-ipv6-64 +bzImage-3.2.13-xxxx-grs-ipv6-64-filer System.map-3.2.13-xxxx-grs-ipv6-64-filer +grub +``` + +

Ahora tendremos que modificar grub para que al arrancar la máquina lo haga con el nuevo kernel. Lo hacemos editando el fichero /etc/grub.d/06_OVHkernel, en la línea que antes hacía referencia al kernel bzImage*64 ahora le agregamos un -filer y guardamos los cambios:

+ +``` +OS="Debian GNU/Linux" +LINUX_ROOT_DEVICE=${GRUB_DEVICE} +linux=`ls -1 -t /boot/bzImage*64-filer 2>/dev/null | head -n1` +``` + +

Una vez tenemos el nuevo kernel referenciado en el archivo de plantilla 06_OVHkernel, ejecutamos el grub-mkconfig para hacer efectiva la configuración, es recomendable hacer antes una copia de seguridad de la configuración anterior (sabe más el diablo por viejo que por diablo):

+ +``` +# cp /boot/grub/grub.cfg /boot/grub/grub.cfg.old +# grub-mkconfig > /boot/grub/grub.cfg +``` + +

Finalmente toca reiniciar, cruzar los dedos y, si todo ha ido correctamente, comprobar que ya tenemos el nuevo kernel listo para hacer funcionar nuestro servidor NFS:

+ +``` +# uname -a +Linux ns302399.ovh.net 3.2.13-grsec-xxxx-grs-ipv6-64-filer #1 SMP Thu Mar 29 11:26:19 UTC 2012 x86_64 GNU/Linux +``` + +

No es complicado, pero es engañoso pensar en montar un NFS sobre OVH como una trivial tarea de poco más de 5 minutos. 

diff --git a/src/content/posts/codeigniter-reactor-esteroides/index.md b/src/content/posts/codeigniter-reactor-esteroides/index.md new file mode 100644 index 0000000..e659fa0 --- /dev/null +++ b/src/content/posts/codeigniter-reactor-esteroides/index.md @@ -0,0 +1,30 @@ +--- +title: "¿Codeigniter-Reactor + esteroides?" +date: 2011-02-04T20:09:38Z +draft: false +tags: [ "php", "code" ] +image: +--- + +

+ Es algo que todavía no llego a entender ni asimilar. He pasado la mayor parte de la tarde para configurar la nueva versión 2.0 de CodeIgniter-Reactor con varias librerías que, para mi forma de desarrollar, son indispensables en cualquier framework de programación orientado a web:

+ +

+ Como podéis ver siguiendo los enlaces, casi todo lo necesario para montar el esquema inicial de un framework PHP decente está en los repositorios de Phil Sturgeon (bitbucket y github). Su PyroCMS cuenta con todas estas características pero tiene muchas otras librerías que no son necesarias -a mi modo de ver- para tomarlo como base para cualquier otro tipo de proyecto.

+

+ Demasiado complejo de ensamblar, una vez he conseguido hacerlo funcionar más o menos todo ya no tengo ganas de empezar a programar la aplicación que tenía en mente. ¿Por qué no hay *nada* con todas esas funciones  de serie en PHP?. Si, ya sé que con Ruby on Rails o Django hubiera tenido todas estas características -y más- en un par de comandos, pero tenía que desengañarme.

+

+ En este sentido PHP sigue estando tan verde como hace años, me hace perder demasiado tiempo aún conociendo la estructura del lenguaje. Todos sabemos como es la curva de aprendizaje al principio, pero -aunque duela- ha llegado el momento de invertir en otra cosa. Shame on me?

diff --git a/src/content/posts/desarrollo-web-con-python-flask/index.md b/src/content/posts/desarrollo-web-con-python-flask/index.md new file mode 100644 index 0000000..0754d36 --- /dev/null +++ b/src/content/posts/desarrollo-web-con-python-flask/index.md @@ -0,0 +1,255 @@ +--- +title: "Desarrollo web con Python: Flask" +date: 2012-02-15T18:47:34Z +draft: false +tags: [ ] +image: +--- + +

+ Hace algún tiempo empecé a utilizar Flask para un proyecto personal. Flask es un mini framework de desarrollo en python que me ha convencido desde el principio por su sencillez. Intentaré exponer un pequeño ejemplo para que os hagáis una idea de cómo funciona.

+

+

+

+ Y como Álex ha escrito un completo tutorial sobre Pylons/Pyramid con un ejemplo de aplicación, no quería ser menos y explicar mis aventuras y desventuras con esta otra pequeña joya de Python así que allá vamos.

+

+

+

+ Instalación 

+

+ Flask está basado en  Werkzeug, una librería WSGI para Python. Si usamos pip y virtualenv para crear el entorno virtual y comenzar a trabajar (situación que ya he explicado en su día) vemos que las dependencias de Flask son mínimas:

+ +``` +$ sudo easy_install pip +$ pip install virtualenv +$ mkdir -p flaskblog/{src,env} +$ cd flaskblog/ +$ virtualenv --distribute --no-site-packages env/ +$ pip -E env/ install flask +Downloading Flask-0.8.tar.gz +Downloading/unpacking Werkzeug>=0.6.1 (from flask) +Downloading/unpacking Jinja2>=2.4 (from flask) +Installing collected packages: flask, Jinja2, Werkzeug +$ pip -E env/ install flask-wtf +Downloading Flask-WTF-0.5.2.tar.gz +Downloading/unpacking WTForms (from flask-wtf) +Installing collected packages: flask-wtf, WTForms +$ pip -E env/ install flask-sqlalchemy +``` + +

+ Una  vez creado el entorno virtual instalamos Flask, que depende de Werkzeug y de Jinja2 como sistema de templates. También instalamos Flask-WTF para tener integración con WTForms y hacer más sencillo el uso de formularios con funciones avanzadas (csrf, etc...). Y por último Flask-SQLAlchemy como complemento ORM para la base de datos.

+

+ Requirements y configuración

+

+ A continuación vamos a entrar por primera vez en el entorno y crear el fichero de requisitos - yo normalmente le llamo requirements.txt - para poder regenerar el entorno virtual tantas veces y en tantas máquinas como queramos:

+ +``` +$ source env/bin/activate +(env)$ pip freeze > src/requirements.txt +``` + +

+ Si luego queremos regenerar el entorno a partir del fichero lo haremos ejecutando el siguiente comando:

+ +``` +$ pip install -E nuevo_env/ -r src/requirements.txt +``` + +

+ Empezamos a montar el esqueleto de la aplicación dentro del directorio src/ creando un directorio para los templates, como queremos que nuestra aplicación pueda tener varios templates a elegir, creamos también el "por defecto":

+ +``` +(env)$ mkdir -p templates/default/ +``` + +

+ Ya que estamos empezando una aplicación desde cero nos gustaría tener un mínimo de configuración para la misma así que vamos a usar un fichero para que guarde ciertos valores variables:

+ +``` +(env)$ cat config.py +import os +DEBUG = True +_basedir = os.path.abspath(os.path.dirname(__file__)) +DATA_PATH = os.path.join(_basedir, 'data') +DEFAULT_TPL = 'default' +USERNAME = 'admin' +PASSWORD = 'default' +SECRET_KEY = 'devel secret key' +URL = 'http://localhost:5000/' +TITLE = 'OurApplication' +VERSION = '0.1' +LANG = 'es' +LANG_DIRECTION = 'ltr' +YEAR = '2012' +del os +``` + +

+ Con la configuración y el entorno listos, lo siguiente será empezar la aplicación propiamente dicha, así que manos a la obra.

+

+ Primeros pasos con Flask

+

+ Vamos a reducir el grueso de la aplicación a un solo archivo, le llamaremos blog.py - ya sé que no suena muy original pero imagino que será entendible -. Nuestro blog.py será el controlador principal, en él incluiremos de forma excepcional el modelo, los formularios y los métodos que se encargarán de la lógica y de llamar a las plantillas. Para empezar por el principio definimos el archivo como una aplicación Flask y cargamos la configuración que antes hemos creado:

+ +``` +# -*- coding: utf-8 -*- +""" +OurApplication +~~~~~~~~~~~~~~ +:copyright: (c) 2011 by Oscar M. Lage. +:license: BSD, see LICENSE for more details. +""" +import os +from flask import Flask, render_template, request, redirect +from werkzeug.routing import Rule +# Flask application and config +app = Flask(__name__) +app.config.from_object('config') +# Middleware to serve the static files +from werkzeug import SharedDataMiddleware +import os +app.wsgi_app = SharedDataMiddleware(app.wsgi_app, { + '/': os.path.join(os.path.dirname(__file__), 'templates', app.config['DEFAULT_TPL']) +}) +# Index +@app.route('/') +def index(): + return render_template(app.config['DEFAULT_TPL']+'/index.html', + conf = app.config) +if __name__ == '__main__': + app.run() +``` + +

+ * Lo más raro son esas 3 lineas que hemos incluido en el archivo, una especie de Middleware para poder servir archivos estáticos directamente desde el template seleccionado.

+

+ Una vez tenemos la aplicación "preparada" hemos de crear la plantilla para que se pueda ejecutar sin errores, para ello dentro del directorio templates/default/ creamos el archivo index.html al que referenciamos en el controlador, el contenido del archivo podría ser algo así:

+ +``` +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" + xml:lang="{{ conf['LANG'] }}" lang="{{ conf['LANG'] }}" + dir="{{ conf['LANG_DIRECTION'] }}"> +<head> + <title>{% block title %}{% endblock %} [{{ conf['TITLE'] }}]</title> +</head> +<body> + <div id="header"> + <h1>{{ conf['TITLE'] }}</h1> + </div> + <div id="content"> + Contenido + </div> + <div id="footer"> + <p>{{ conf['TITLE'] }} - {{ conf['YEAR'] }}</p> + </div> +</body> +``` + +

+ Y ya podríamos ejecutar por primera vez nuestra aplicación desde consola para luego comprobar que todo está correcto en navegador, así que vamos a ello:

+ +``` +$ python blog.py + * Running on http://127.0.0.1:5000/ + * Restarting with reloader +``` + +

+ Si abrimos el navegador en la url proporcionada (http://127.0.0.1:5000/) obtendremos una pantalla similar a la de la siguiente figura:

+

+

+

+ SQLAlchemy

+

+ Una vez tenemos la base y el esqueleto de la aplicación vamos a incorporar una base de datos para hacerla dinámica. Para ello usaremos Flask-SQLAlchemy. Para trabajar con SQLAlchemy agregamos una nueva variable de configuración para la base de datos:

+ +``` +SQLALCHEMY_DATABASE_URI = 'sqlite:///'+ os.path.join(os.path.dirname(__file__), 'database.db') +``` + +

+ Y le decimos a blog.py el esquema que vamos a utilizar:

+ +``` +from flaskext.sqlalchemy import SQLAlchemy +... +db = SQLAlchemy(app) +... +# Model +class Blog(db.Model): + __tablename__ = 'Blog' + __mapper_args__ = dict(order_by="date desc") + id = db.Column(db.Integer, primary_key=True) + subject = db.Column(db.Unicode(255)) + author = db.Column(db.Unicode(255)) + date = db.Column(db.DateTime()) + content = db.Column(db.Text()) +``` + +

+ Por último creamos la base de datos desde una consola python para poder usarla desde cualquier parte del controlador, tan simple como entrar a python desde el directorio src/ donde tenemos blog.py y ejecutar lo siguiente:

+ +``` +>>> from blog import db +>>> db.create_all() +``` + +

+ Ya tenemos el archivo database.db preparado para cargarlo de datos mediante los métodos correspondientes de blog.py, algunos ejemplos:

+ +``` +@app.route('/add', methods=['GET','POST']) +def add(): + if request.method == 'POST': + post = Blog(request.form['subject'], request.form['content']) + db.session.add(post) + db.session.commit() + return redirect(url_for('index')) + return render_template(app.config['DEFAULT_TPL']+'/add.html', + conf = app.config) +``` + +

+ Flask-WTForms

+

+ Una vez tenemos preparada la base de datos y el método que agregará nuevos posts tan solo falta crear el formulario que nos permitirá tal funcionalidad y crear el template, poco más de un par de lineas:

+ +``` +# Create Form +class CreateForm(Form): + subject = TextField('Subject', [validators.required()]) + content = TextAreaField('Content', [validators.required(), validators.Length(min=1)]) +``` + +

+ Y el template con el formulario correspondiente sería el siguiente:

+ +``` +<form method="post" action=""> + <dl> + {{ form.csrf }} + {{ form.subject.label }} {{ form.subject(style="width:100%") }} + {% for error in form.subject.errors %} {{ error }} {% endfor %} + <br /> + {{ form.content.label }} {{form.content(style="height:100px;width:100%") }} + {% for error in form.content.errors %} {{ error }} {% endfor %} + </dl> + <p><input type="submit" value="submit"> + </form> +``` + +

+ Y ya tendríamos un formulario para agregar posts totalmente funcional. Entre esta vista, la de un listado de posts y la del detalle de los mismos (ver repositorio más abajo), tendríamos una pequeña aplicación con Flask + SQLAlchemy + WTForms.

+

+ Resumiendo

+

+ Para finalizar, además de las vistas que hemos dicho que faltaban, tendríamos que dar un poco más de colorido a los templates (css, imágenes...), crear un layout.html que se pueda extender desde el resto de plantillas y poner un poco de orden en todo lo explicado, pero como no quiero extenderme mucho más en el artículo, nada mejor que un pequeño repositorio en el que se pueden ir viendo los avances:

+ +

+ Espero que con este pequeño y humilde ejemplo haya quedado más o menos claro el uso de este framework. Siempre es divertido probar cosas nuevas y cuando se trata de piezas tan sencillas y bien documentadas como las tratadas el placer es doble.

diff --git a/src/content/posts/disconnecting-a-bit/gallery/2013-06-12_19.07.12.jpg b/src/content/posts/disconnecting-a-bit/gallery/2013-06-12_19.07.12.jpg new file mode 100644 index 0000000..ef3d478 Binary files /dev/null and b/src/content/posts/disconnecting-a-bit/gallery/2013-06-12_19.07.12.jpg differ diff --git a/src/content/posts/disconnecting-a-bit/gallery/2013-06-12_19.13.37.jpg b/src/content/posts/disconnecting-a-bit/gallery/2013-06-12_19.13.37.jpg new file mode 100644 index 0000000..7cb471e Binary files /dev/null and b/src/content/posts/disconnecting-a-bit/gallery/2013-06-12_19.13.37.jpg differ diff --git a/src/content/posts/disconnecting-a-bit/gallery/2013-06-12_19.34.08.jpg b/src/content/posts/disconnecting-a-bit/gallery/2013-06-12_19.34.08.jpg new file mode 100644 index 0000000..f19d026 Binary files /dev/null and b/src/content/posts/disconnecting-a-bit/gallery/2013-06-12_19.34.08.jpg differ diff --git a/src/content/posts/disconnecting-a-bit/index.md b/src/content/posts/disconnecting-a-bit/index.md new file mode 100644 index 0000000..fff3916 --- /dev/null +++ b/src/content/posts/disconnecting-a-bit/index.md @@ -0,0 +1,10 @@ +--- +title: "Disconnecting a bit" +date: 2013-06-13T06:52:10Z +draft: false +tags: [ ] +image: +--- + +

Yesterday we had a great afternoon. From time to time it's recommended to turn off the computer world and enjoy with family and friends. Yesterday we did. I was really tired and needing fresh air on my mind.

+

We must repeat, almost, once a week!

diff --git a/src/content/posts/django-and-memcache-clear-cache-keys/index.md b/src/content/posts/django-and-memcache-clear-cache-keys/index.md new file mode 100644 index 0000000..fa2ab06 --- /dev/null +++ b/src/content/posts/django-and-memcache-clear-cache-keys/index.md @@ -0,0 +1,143 @@ +--- +title: "Django and memcache: clear cache keys" +date: 2014-02-05T13:35:54Z +draft: false +tags: [ "django", "code" ] +image: web-accelerators-memcached.jpg +--- + +

Let's play Django with Memcached. As the great framework Django is, it's so easy to activate any kind of cache in your project. Memcached is one of the options, but you can also work with DatabaseCache, FileBasedCache, LocMemCache, MemcachedCache, DummyCache (a kind of non-cache very useful for devel/test enviroments) or - of course - your own CustomCache if you want.

+

Activating cache

+

It's too easy to activate the cache feature, it's enough to set the preferences in settings, install python-memcached in your enviroment (in case you will use MemcachedCache), and not much more to do. A couple of examples:

+

1. Basic FileBasedCache settings:

+ +``` +# settings.py +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', + 'LOCATION': '/var/tmp/django_cache', + } +} +``` + +

2. MemcachedCache settings:

+ +``` +# settings.py +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'LOCATION': '127.0.0.1:11211', + } +} +``` + +

3. Depending on the enviroment you can use MemcachedCache and DummyCache:

+ +``` +# settings.devel.py +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', + } +} +``` + + +``` +# settings.production.py +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'LOCATION': '127.0.0.1:11211', + } +} +``` + +

Setting the places where cache will act

+

Now that we have our project with a configured kind of cache, we must to say where and when to activate it. There are multiple ways to do it (on the whole site, views, templates, urls...). I'm going to use... let's say urls. So, in our urls.py we have to set a time and activate the cache:

+ +``` +# urls.py + +from django.views.decorators.cache import cache_page + +ctime = (60 * 24) # A day +urlpatterns = patterns('', + url(r'^$', + cache_page(ctime)(BlogIndexView.as_view()), + {}, + 'blog-index' + ), + ... +) +``` + +

A simple server reload will be enough to have cache running. We can see it on action with django-debug-toolbar, django-memcache-status or something like that.

+

Clean a specific key cache

+

And now the funniest part. For example, talking about a blog tool, when you write a new post (or editing older one) the software should be able to remove some cache keys, i.e. the blog-index one (because you have a new post) and the post-detail other (because you must be able to inmediately see the changes in the post you're editting).

+

Following this link I've created a cache.py with this content:

+ +``` +# cache.py + +# -*- coding: utf-8 -*- + +def expire_view_cache( + view_name, + args=[], + namespace=None, + key_prefix=None, + method="GET"): + + """ + This function allows you to invalidate any view-level cache. + + view_name: view function you wish to invalidate or it's named url pattern + args: any arguments passed to the view function + namepace: optioal, if an application namespace is needed + key prefix: for the @cache_page decorator for the function (if any) + + http://stackoverflow.com/questions/2268417/expire-a-view-cache-in-django + added: method to request to get the key generating properly + """ + + from django.core.urlresolvers import reverse + from django.http import HttpRequest + from django.utils.cache import get_cache_key + from django.core.cache import cache + from django.conf import settings + # create a fake request object + request = HttpRequest() + request.method = method + if settings.USE_I18N: + request.LANGUAGE_CODE = settings.LANGUAGE_CODE + # Loookup the request path: + if namespace: + view_name = namespace + ":" + view_name + request.path = reverse(view_name, args=args) + # get cache key, expire if the cached item exists: + key = get_cache_key(request, key_prefix=key_prefix) + if key: + if cache.get(key): + cache.set(key, None, 0) + return True + return False +``` + +

And last step is to call the expire_view_cache function on model form save hook (admin.py in this case):

+ +``` +# admin.py + +from cache import expire_view_cache + +class PostAdminForm(admin.ModelAdmin): + ... + def save_model(self, request, obj, form, change): + expire_view_cache("blog-index") + expire_view_cache("post-detail", [obj.slug]) +``` + +

And that's all, we are able to clean/purge/remove the cache when a new post is added or edited. As you can see in the code, cache is fun but you have to be careful to set it on the right way.

diff --git a/src/content/posts/django-and-memcache-clear-cache-keys/web-accelerators-memcached.jpg b/src/content/posts/django-and-memcache-clear-cache-keys/web-accelerators-memcached.jpg new file mode 100644 index 0000000..14fa65c Binary files /dev/null and b/src/content/posts/django-and-memcache-clear-cache-keys/web-accelerators-memcached.jpg differ diff --git a/src/content/posts/django-cambiando-de-db-engine/index.md b/src/content/posts/django-cambiando-de-db-engine/index.md new file mode 100644 index 0000000..5c8e5f5 --- /dev/null +++ b/src/content/posts/django-cambiando-de-db-engine/index.md @@ -0,0 +1,25 @@ +--- +title: "Django: Cambiando de DB Engine" +date: 2012-04-28T18:42:31Z +draft: false +tags: [ "code", "django" ] +image: +--- + +

+ Normalmente las especificaciones de un entorno de desarrollo y las de un entorno en producción suelen ser bastante diferentes. Quizás en el primero buscas la comodidad mientras que cuando se hace el deploy a producción priman otras cosas. Este suele ser el caso del motor de base de datos cuando trabajas con Django.

+

+ Durante el proceso de desarrollo es muy cómodo utilizar sqlite porque no requiere de ningún servidor adicional y está soportado de base en Django (builtin). Es posible que una vez acabado el desarrollo queramos cambiar a otro SGBD "de verdad" como pueden ser MySQL o PostgreSQL.

+

+ Lo que podría suponer un quebradero de cabeza en otras arquitecturas, en nuestro caso utilizando dumpdata y loaddata, se reduce a las siguientes tres lineas:

+ +``` +$ python manage.py dumpdata --indent=4 --format=json > fixtures.json +$ scp fixtures.json user@remote:/path/project/ +(remote)$ python manage.py loaddata fixtures.json +``` + +

+ En la primera usamos dumpdata para hacer un dumpeado de todos los datos de la aplicación (sqlite) en formato json, posteriormente pasamos ese archivo al entorno de producción (en este caso pongamos de ejemplo a otro servidor) y allí finalmente (con el conector apuntando al nuevo gestor) ejecutamos el loaddata para insertar los datos.

+

+ Et voilà!

diff --git a/src/content/posts/django-deploy-problems-limited-hosting/django.png b/src/content/posts/django-deploy-problems-limited-hosting/django.png new file mode 100644 index 0000000..5617389 Binary files /dev/null and b/src/content/posts/django-deploy-problems-limited-hosting/django.png differ diff --git a/src/content/posts/django-deploy-problems-limited-hosting/index.md b/src/content/posts/django-deploy-problems-limited-hosting/index.md new file mode 100644 index 0000000..fcda6ac --- /dev/null +++ b/src/content/posts/django-deploy-problems-limited-hosting/index.md @@ -0,0 +1,97 @@ +--- +title: "Django deploy: problems with limited hosting" +date: 2014-07-21T21:51:18Z +draft: false +tags: [ "django", "code" ] +image: django.png +--- + +

Some months ago I had to deal with a Symfony2 project in a shared hosting (Spanish article) and now the big next deal is a similar task with Django.

+

The project is almost done and I have the hosting credentials, once I'm in I noticed that there is no chance to configure anything (Apache, WSGI or whatever) so I was a bit lost. Thanks to my Ailalelo's mates (they had lot of experience with this kind of situations) I found the proper configuration.

+

Hosting is django-ready, but the version they're running (1.4.2) is not the best choice, I want to install 1.6.x, the one I have used to develop the project. The other big requirement is virtualenv+pip to retrieve the packages I'm using.

+

Mainly I've solved it with two files, project.cgi and .htaccess.

+

project.cgi

+

The hosting structure is like many others, I have access to a homedir with the following directories:

+ +``` +myhome/ + logs/ + tmp/ + www/ + cgi-bin/ + index.html +``` + +

Before to say Apache what to do with our project, let's install virtualenv and all the requirements, my choice is to put the environment out of the www/ directory:

+ +``` +myhome/ + env/ + logs/ + tmp/ + www/ + cgi-bin/ + project/ + index.html +``` + + +``` +$ virtualenv env +$ . env/bin/activate +$ pip install -r www/project/requirements/production.txt +``` + +

Seems to be that apache's mod_cgi will process all the files you put in the cgi-bin directory, so we already know where to save our project.cgi. I have to tell apache to use my own virtualenv python, where the environment and the project are. And finally set some environment variables:

+ +``` +#!/home/myhome/env/bin/python + +import os +from os.path import abspath, dirname +from sys import path + +actual = os.path.dirname(__file__) +path.insert(0, os.path.join(actual, "..", "project/project")) +path.insert(0, os.path.join(actual, "..", "env")) + +# Set the DJANGO_SETTINGS_MODULE environment variable. +os.environ['PATH'] = os.environ['PATH'] + ':/home/myhome/www/project/node_modules/less/bin' +os.environ['SECRET_KEY'] = 'SECRETKEY' +os.environ['DJANGO_SETTINGS_MODULE'] = "project.settings.production" + +from django.core.servers.fastcgi import runfastcgi +runfastcgi(method="threaded", daemonize="false") +``` + +

Note that I modified the PATH because I have to be able to use less binary, required for django-compressor package. In this particular case my user was not allowed to install node/less in the system, so I had to install it locally, referencing the particular node_modules folder.

+

.htaccess

+

Now that Apache knows what to do, we should redirect almost all the incoming traffic to the cgi, so let's write some.htaccess rules:

+ +``` +AddHandler fcgid-script .fcgi +RewriteEngine On + +RewriteRule ^static/(.*)$ project/project/static/$1 [L] +RewriteRule ^media/(.*)$ project/project/media/$1 [L] + +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule ^(.*)$ cgi-bin/project.cgi/$1 [QSA,L] + +AddDefaultCharset UTF-8 +``` + +

The media/ and static/ dirs are redirected to the proper location, because they didn't work as is. Not much more to say with this file, it's easy to understand I think.

+

Remember

+ +

 

+ diff --git a/src/content/posts/django-limpiando-usuarios-desde-shell/index.md b/src/content/posts/django-limpiando-usuarios-desde-shell/index.md new file mode 100644 index 0000000..02b7534 --- /dev/null +++ b/src/content/posts/django-limpiando-usuarios-desde-shell/index.md @@ -0,0 +1,20 @@ +--- +title: "Django: limpiando usuarios desde shell" +date: 2013-09-12T23:03:29Z +draft: false +tags: [ "django", "code" ] +image: +--- + +

Es tal el interés por el foro de VamosaVidas (si, ese que rompí en su día y he vuelto a arreglar) que todos los días tenemos cientos de registros. Realmente se trata de robots que se dedican a hacer spam, pero eso es lo de menos :P.

+

Mientras no actualizo y arreglo django-authall es un poco coñazo andar mirando en el admin el último usuario bueno y borrar manualmente uno a uno cotejando que no me equivoque, así que he pensado en un par de lineas que no deberían hacer demasiado daño si se usan con precaución. Desde la shell de nuestro proyecto podemos hacer algo así:

+ +``` +$ python manage.py shell +>>> from django.contrib.auth.models import User +>>> list(User.objects.order_by('date_joined')) +>>> [user.delete() for user in list(User.objects.order_by('date_joined'))[100:]] +``` + +

Primero estamos listando todos los usuarios por orden de fecha de registro, los convertimos en lista para que no salgan los datos "truncados". Y en segundo lugar estamos eliminando todos excepto los 100 primeros.

+

Esta es la sencillez y potencia de Python.

diff --git a/src/content/posts/django-virtualenv-pip/index.md b/src/content/posts/django-virtualenv-pip/index.md new file mode 100644 index 0000000..4f8cb2a --- /dev/null +++ b/src/content/posts/django-virtualenv-pip/index.md @@ -0,0 +1,151 @@ +--- +title: "Django + virtualenv + pip" +date: 2011-02-23T21:37:56Z +draft: false +tags: [ "django", "code" ] +image: +--- + +

No lo tenía claro, pero cuando entendí lo que suponía y cómo se trabajaba con virtualenv + pip me decidí a probarlo. Voy a intentar explicar como se utilizan estas herramientas de una forma genérica, para hacernos una idea de lo que significa y los casos en los que se pueden aplicar. A grandes rasgos:

+ +

Con estas herramientas intentaremos instalar un entorno virtual independiente para gestionar todas las dependencias de nuestro proyecto.

+

Instalación del entorno virtualenv + pip

+

Primero instalamos pip, que como hemos mencionado anteriormente, es el gestor de paquetes con el que vamos a instalar el resto de componentes. Tiramos de easy_install para instalarlo. Una vez instalado pip, instalamos también virtualenv y tendremos la base necesaria para seguir trabajando:

+ +``` +$ sudo easy_install pip +$ pip install virtualenv +``` + +

Vamos a crear el entorno. Supongamos 2 directorios de trabajo, src/ y env/. El directorio src/ lo destinaremos al código fuente (podemos tirar de repositorio o iniciar nuestro proyecto directamente ahí), en env/ meteremos todos los paquetes y dependencias del proyecto, osea el entorno:

+ +``` +$ mkdir -p foo/{env,src} +$ cd foo/ +$ virtualenv --distribute --no-site-packages env/ +New python executable in env/bin/python +Installing distribute........................................done. +``` + +

Ahora ya estamos preparados para instalar las aplicaciones/dependencias dentro del entorno de trabajo, lo haremos "desde fuera" con la opción -E:

+ +``` +$ pip -E env/ install django +Downloading/unpacking django + Downloading Django-1.2.4.tar.gz (6.4Mb): 6.4Mb downloaded + Running setup.py egg_info for package django +[...] +Successfully installed django +Cleaning up... +``` + + +``` +$ sudo pip -E env/ install -e hg+https://bitbucket.org/ubernostrum/django-registration#egg=django-registration +$ sudo pip -E env/ install -e git+https://github.com/flashingpumpkin/django-socialregistration.git#egg=django-socialregistration +[instalamos el resto de dependencias] +``` + +

Vamos a comprobar que todo está correcto, para ello utilizamos una herramienta que se llama yolk, capaz de listar todos los paquetes que tenemos instalados en el entorno, primero instalamos esa herramienta, luego entramos en el entorno y la ejecutamos (aunque podríamos hacer lo mismo con la orden pip freeze como se muestra a continuación):

+ +``` +$ pip -E env/ install yolk +$ source env/bin/activate +(env)$ yolk -l +Django - 1.2.4 - active +Python - 2.6.6 - active development (/usr/lib/python2.6/lib-dynload) +distribute - 0.6.14 - active +pip - 0.8.1 - active +wsgiref - 0.1.2 - active development (/usr/lib/python2.6) +yolk - 0.4.1 - active +``` + +

Nota: Como se puede ver en el ejemplo de arriba, para entrar en el entorno que hemos creado usamos el comando source env/bin/activate, para salir del mismo usamos el comando deactivate.

+ +``` +(env)$ pip freeze +Django==1.2.4 +distribute==0.6.14 +wsgiref==0.1.2 +yolk==0.4.1 +``` + +

Ahora que tenemos más o menos clara la forma de actuar, vamos a hacer un freeze y guardar el archivo de requisitos dentro del repositorio para poder volver a reproducirlo en cualquier otra máquina. Insisto, todos estos comandos pueden ejecutarse dentro del entorno (env) o fuera del mismo con la opción -E entorno de pip:

+ +``` +(env)$ cd foo/src/ +(env)$ pip freeze > requirements.txt +(env)$ cat requirements.txt +Django==1.2.4 +South==0.7.3 +distribute==0.6.14 +wsgiref==0.1.2 +yolk==0.4.1 +(env)$ deactivate +$ +``` + +

Y ya podemos empezar a programar el proyecto en dentro de src/.

+

Replicando el entorno

+

Suponemos ahora que estamos en otra máquina -aunque en el ejemplo seguimos en la misma- donde queremos montar de nuevo todo el entorno. Primero creamos de nuevo la estructura anterior y luego hacemos un pull del repositorio la carpeta src/ (como estamos en la misma máquina lo simulando haciendo un cp :P):

+ +``` +$ mkdir -p bar/{env,src} +$ cp -r foo/src/* bar/src +``` + +

Y ahora procuramos recrear el entorno, primero hacemos un entorno nuevo y vacío en bar/env/ y luego instalamos todo lo que hemos logueado en el requirements.txt:

+ +``` +$ virtualenv --distribute --no-site-packages bar/env/ +$ pip install -E bar/env/ -r bar/src/requirements.txt +... +Successfully installed Django South ... yolk +Cleaning up... +``` + +

Comprobamos que todo esté correcto:

+ +``` +$ source bar/env/bin/activate +(env)$ pip freeze +Django==1.2.4 +distribute==0.6.14 +wsgiref==0.1.2 +yolk==0.4.1 +(env)$ deactivate +$ +``` + +

Conclusión

+

Virtualenv y pip forman una combinación excelente de elementos para hacer de un proyecto un ente sin dependencias frustradas y con todos los requisitos y versiones específicas para garantizar el correcto funcionamiento del mismo. Ahora, por lo que me han contado, debería interesarme en Fabric para automatizar los deploys y seguir haciendo magia.

+

Referencias

+
+ +
diff --git a/src/content/posts/dovecot-pequenas-peculiaridades/index.md b/src/content/posts/dovecot-pequenas-peculiaridades/index.md new file mode 100644 index 0000000..b458752 --- /dev/null +++ b/src/content/posts/dovecot-pequenas-peculiaridades/index.md @@ -0,0 +1,48 @@ +--- +title: "Dovecot, pequeñas peculiaridades" +date: 2010-09-07T09:20:13Z +draft: false +tags: [ "dovecot" ] +image: +--- + +

+ Desde hace algún tiempo -y después de haber lidiado con Cyrus y Courier- he optado por Dovecot como servidor POP3 e IMAP para máquinas en producción. Por varios motivos: la sencillez de configuración, sigue los estándares, soporta mbox y Maildir y algo muy importante, tiene un backend de autentificación SMTP compatible con Postfix (entre otros).

+

+ Sin duda el servicio de correo electrónico es el menos agradecido y probablemente el más doloroso para el sysadmin pero el haber dado con esta combinación de elementos me ha ahorrado un montón de problemas.

+

+ De todos modos en la última instalación que me ha tocado he encontrado un par de peculiaridades que me gustaría documentar por si alguien se encuentra en la misma situación.

+

+ Habiendo instalado el mismo O.S., las mismas versiones de software y exactamente los mismos ficheros de configuración a la hora de despachar correos me encuentro con un error inexperado en mail.log:

+ +``` +... status=bounced (local configuration error) +``` + +

+ Así sin más descripción no puedo adivinar mucho así que decido activar errores en dovecot.conf con la directiva de configuración log_path = /var/log/dovecot.log. Ahora sí podemos sacar más información del dovecot.log:

+ +``` +Fatal: postmaster_address setting not given +``` + +

+ Esto ya es otra cosa, después de un poco de googling corrijo el fallo agregando al fichero de configuración una dirección de postmaster, sigue pareciéndome raro porque /etc/aliases es el mismo que otras máquinas y nunca había notificado este problema antes pero bueno, es cuestión de agregar a dovecot.conf  lo siguiente:

+ +``` +protocol lda { + postmaster_address = tu-postmaster@tu-dominio.com +} +``` + +

+ Reinicio el servicio y a funcionar... pero no por mucho tiempo puesto que al día siguiente me encuentro con el servicio parado, vuelvo a reiniciar y el proceso se vuelve a parar cada día, repitiendo la jugada. Volviendo a los logs -ese gran invento- veo que todos los días a eso de las 6:00am suelta el siguiente mensaje:

+ +``` +dovecot: 2010-09-05 05:59:53 Fatal: Time just moved backwards by 9 seconds. This might cause a lot of problems, so I'll just kill myself now. http://wiki.dovecot.org/TimeMovedBackwards +``` + +

+ Justo a esa hora tengo una tarea programada que sincroniza la hora del servidor con rdate. Al parecer Dovecot detecta que la hora ha cambiado y para no entrar en conflictos se hace el harakiri. Interesante, es algo que tienen documentado en su wiki y te animan a que cambies rdate/ntpdate por ntpd, clockspeed o chrony.

+

+ Nada del otro mundo pero sí me ha supuesto algo de tiempo saber el origen de los errores para poder subsanarlos así que bueno, si al menos esta entrada ayuda a alguien o le ahorra algún dolor de cabeza me daré por contento.

diff --git a/src/content/posts/el-mejor-firewall/index.md b/src/content/posts/el-mejor-firewall/index.md new file mode 100644 index 0000000..0e886a5 --- /dev/null +++ b/src/content/posts/el-mejor-firewall/index.md @@ -0,0 +1,20 @@ +--- +title: "El mejor firewall" +date: 2010-02-11T16:16:22Z +draft: false +tags: [ ] +image: +--- + +Lo he visto en puntogeek a través del twitter de demogar y me ha parecido tan gracioso que he caido en el burdo copy-paste: +

+
    +
  1. Una célula humana contiene 75MB de información génetica.
  2. +
  3. Un espermatozoide contiene la mitad; eso significa 37.5MB.
  4. +
  5. Un ml de semen contiene 100 millones de espermatozoides.
  6. +
  7. En promedio la eyaculación dura 5 segundos y contiene 2.24 ml de semen
  8. +
  9. Esto significa que la producción del miembro de un hombre equivale 37.5MB x 100,000,000 x 2.25)/5 = 1,687,500,000,000,000 bytes/segundo = 1,6875 Terabytes/seg.
  10. +
    +Esto quiere decir que el óvulo femenino soporta este ataque DDoS a 1,5 terabytes por segundo, y solo permite que pase un solo paquete de información lo que la hace el mejor hardware firewall del mundo. +

    +La mala noticia de esto, es que ese paquete de información que deja pasar, cuelga el sistema por aproximadamente nueve meses. diff --git a/src/content/posts/el-papeleo-de-ser-padre/index.md b/src/content/posts/el-papeleo-de-ser-padre/index.md new file mode 100644 index 0000000..20baf99 --- /dev/null +++ b/src/content/posts/el-papeleo-de-ser-padre/index.md @@ -0,0 +1,85 @@ +--- +title: "El papeleo de ser padre" +date: 2013-01-08T18:41:27Z +draft: false +tags: [ ] +image: +--- + +

    Pasados esos primeros momentos de tensión y felicidad máximos, vuelves a casa para que la realidad trate de despertarte a golpe de pequeñas bofetadas. O eso es lo que me está pasando a mi. Pasas de preocuparte porque todo salga bien en la eco, porque no haya ninguna complicación en el momento del parto, porque todas las pruebas estén correctas, a otro tipo de minucias que, si bien no son tan importantes, acaban desgastando igualmente a ese individuo comúnmente llamado neopadre.

    +

    Por un lado tenemos la repetitiva monotonía de las tomas cada 3 horas (creo que cualquiera que haya sido padre y vuelva a escuchar esas palabras - "cada 3 horas" - debe sentir escalofríos occipitales), que además, si tienes la suerte de contar con gemelos (double win!), se multiplican por doble trabajo y mitad de descanso, a menos que cuentes con la ayuda del encomiable Dr. Octopus.

    +

    Y por otro lado viene el jaleo de los papeleos, la oficialidad de los renacuajos pasa por gastar más gasolina (porque Lugo en estas fechas, diga lo que diga Borja, no está para mucha bicicleta) y tiempo que en cualquier otra cosa que se te ocurra. Y aquí es donde me quiero parar a detallar el proceso, porque el resto es algo que se aprende con el tiempo y los ríos de consejos que te darán tus más cercanos. Pero los papeles, ¡Ay los papeles!...

    +

    Hospital

    +

    En el hospital lo principal es (que todo salga bien, obviamente) estar tranquilo y disfrutar del mayor tiempo posible con tu(s) hijo(s), esas primeras horas son muy importantes y (por lo que dicen) marcan el lazo de unión entre padres e hijos. Sin embargo tienes que estar pendiente también de pedir en admisión del propio hospital (o en la propia planta, depende del funcionamiento) ciertos documentos:

    + +

    Además tendrás que rellenar (imagino que dependiendo de autonomías y funcionamientos internos) otros papeles correspondientes con la salud del nacido:

    + +

    Registro civil

    +

    Una de las primeras cosas que se te pasan por la cabeza es registrar al/los renacuajos. Toda esa discusión por los nombres con tu pareja, suegra y demás familia, tienen que acabar en un papel legal firmado sellado y timbrado. En nuestro caso, en el propio hospital te indican cómo hacer, te ofrecen El Papel Amarillo (tm) con información relativa al parto donde tendrás que cubrir poco más que los datos de los progenitores y los nombres de los chavales. Todo esto se ha de entregar en el Registro Civil junto con el libro de familia, por lo que:

    + +

    En un par de días tendrás que volver a recoger el libro de familia actualizado. Oficialmente a partir de ese momento ya les puedes llamar por su nombre, antes recomiendo términos como cacahuete, cosito, renacuajo, etc...

    +

    Certificado de empresa

    +

    Si estás trabajando por cuenta ajena deberás pedirle a tu empresa un certificado de que estás trabajando allí (¡curioso eh!). En ese papel van detalladas también las bases de cotización, necesarias para tramitar tu baja por maternidad/paternidad. Ojo, aseguraos de que el certificado de empresa va firmado y sellado por la empresa o no valdrá de mucho. Depende de la empresa podrán pediros cierta acreditación de que realmente habéis tenido un hijo, aseguraos de llevar encima:

    + +

    Padrón

    +

    Aunque el "derecho a una vivienda digna" no sea tal en este país y, desgraciadamente, haya muchas personas sin hogar propio; hay que empadronar a tus hijos en algún sitio. Así que toca ir al Ayuntamiento de turno y rellenar los correspondientes formularios, para ello debemos llevar de casa:

    + +

    Alta del bebé en la Seguridad Social

    +

    Se tramita en la Seguridad Social y, como todo lo que se tramita en el INSS, dependiendo del funcionario de turno se puede contar como una experiencia maravillosa o maravillosamente traumática, antes de nada ¡mucha suerte!. Para dar de alta en la Seguridad Social y meterlo en la cartilla de alguno de los padres es interesante saber qué pediatra toca a cada uno, porque podréis escoger la cartilla del padre o de la madre. Documentos imprescindibles a presentar con el correspondiente impreso:

    + +

    Informe de Maternidad (El Papelito Azul)

    +

    El médico de cabecera debe expedir este informe que hará falta posteriormente para presentar la baja por maternidad. Para ello debemos llevar:

    + +

    Baja por paternidad/maternidad

    +

    También se tramita en la Seguridad Social (Instituto Nacional de la Seguridad Social, INSS, etc...). Y normalmente tiene tela porque depende de cada caso, no es lo mismo cuenta ajena que autónomo, etc... pero por lo general te pedirán:

    + +

    Solicitud de prestaciones

    +

    Dependiendo del caso, del embarazo, del parto y de la situación personal, es posible que tengas derecho a ciertas ayudas que papá Estado concede (de momento) por traer un hijo a este mundo. Este tipo de ayudas se suelen tramitar también desde el INSS (Seguridad Social, Instituto Nacional de la Seguridad Social, etc...) y suelen tener requisitos variopintos, así que por norma general diremos que hace falta:

    + +

    A tales momentos (enero 2013) creo que sigue vigente una prestación de deducción por maternidad (100€/mes durante un par de años) y alguna que otra subvención por partos múltiples (impreso) o algo así. Más información en la propia web de la Seguridad Social.

    +

    En definitiva...

    +

    Decir antes de nada que todo este rollo que acabo de soltar está sujeto al funcionamiento de cada Comunidad Autónoma, de papá Estado e, imagino, dependerá también del año en el que se tramite puesto que estas cosas cambian tanto como el devenir del líquido elemento. Ah, ¡y las firmas!. No os olvidéis de fecha y firma en todos y cada uno de los papeles que se presenten, pero bueno, eso ya os lo recordará también el funcionario de turno.

    +

    Con todo esto que os estoy contando no quiero decir que no esté encantado con este nuevo status parental, al contrario (ríos de babas salen diariamente de mi cansada boca), pero si os estáis planteando tener descendencia, contad también con estas situaciones, con toneladas de paciencia, gasolina en el coche, disponibilidad para hacer varios viajes a la misma ventanilla y un par de bolígrafos a mano cargados de tinta.

    diff --git a/src/content/posts/emacs-go-to-line-y-reload-sin-salir-de-emacs/index.md b/src/content/posts/emacs-go-to-line-y-reload-sin-salir-de-emacs/index.md new file mode 100644 index 0000000..6a05e15 --- /dev/null +++ b/src/content/posts/emacs-go-to-line-y-reload-sin-salir-de-emacs/index.md @@ -0,0 +1,23 @@ +--- +title: "Emacs go to line y reload sin salir de Emacs" +date: 2012-08-13T19:39:29Z +draft: false +tags: [ ] +image: +--- + +

    Se me hace muy cómodo tener un atajo de teclado para la típica orden de "ir a la linea X", así que en vez de escribir todo el tochaco de comando que hace falta en Emacs para ello (M-x goto-line<RET>#linea<RET>) voy a hacer un binding. Abro el archivo .emacs y agrego lo siguiente:

    + +``` +;; Goto-line +short-cut key(global-set-key "C-l" 'goto-line) +``` + +

    Una vez guardado y para hacer efectiva la configuración sin tener que salir de Emacs ejecuto lo siguiente: 

    + +``` +M-x load-file +~/.emacs +``` + +

    Y ya tengo lo que quería, mi shortcut de "ir a la linea X" en Ctrl + L. Tip básico de Emacs patrocinado por chocolate blanco Mercadona y agua de mineralización muy débil Bezoya.

    diff --git a/src/content/posts/feeling-old-techie/index.md b/src/content/posts/feeling-old-techie/index.md new file mode 100644 index 0000000..45fe5a8 --- /dev/null +++ b/src/content/posts/feeling-old-techie/index.md @@ -0,0 +1,11 @@ +--- +title: "Feeling an old techie" +date: 2015-03-25T19:00:19Z +draft: false +tags: [ ] +image: old-techie.jpg +--- + +

    I was thinking about that feeling lately. It seems that I can not follow the wave out there, there are many things escaping from my comprehension due lack of time. Starting to talk about anything not related to my day-by-day is starting to feeling myself out of date.

    +

    Last days I could get some short time to read about a couple of topics - frontend related this time - and I felt like I was using cobol (nothing against cobol here). It's a fact you can not focus in every new brilliant and recently released piece of technology, but it's like there was an interestellar space between what I thought it was the right way and recent developments or best practices.

    +

    Probably have to go back to the old habit of taking Friday afternoons (or any other shift) as research & development. Would be great.

    diff --git a/src/content/posts/feeling-old-techie/old-techie.jpg b/src/content/posts/feeling-old-techie/old-techie.jpg new file mode 100644 index 0000000..cbefccd Binary files /dev/null and b/src/content/posts/feeling-old-techie/old-techie.jpg differ diff --git a/src/content/posts/hacer-scroll-en-gnu-screen/index.md b/src/content/posts/hacer-scroll-en-gnu-screen/index.md new file mode 100644 index 0000000..3379b23 --- /dev/null +++ b/src/content/posts/hacer-scroll-en-gnu-screen/index.md @@ -0,0 +1,22 @@ +--- +title: "Hacer scroll en GNU Screen" +date: 2011-04-11T12:31:43Z +draft: false +tags: [ ] +image: +--- + +

    + Me ha pasado un par de veces y siempre he acabado en el mismo sitio así que he decidido documentarlo con un mini-post, porque seguro que no será la última vez que me pase. Ejecutando ciertos comandos en remoto a través de screen hay veces que el scroll se desborda y necesitaría leer parte de la salida, tan sencillo como:

    + +

    + Otra sencillo hack para afinar una de las mejores herramientas que he usado (y ya van unos cuantos). Así que nada más, a disfrutarlo.

    diff --git a/src/content/posts/lazy-summer/gallery/0.jpg b/src/content/posts/lazy-summer/gallery/0.jpg new file mode 100644 index 0000000..9d02ab4 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/0.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/1.jpg b/src/content/posts/lazy-summer/gallery/1.jpg new file mode 100644 index 0000000..3df49d3 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/1.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/10.jpg b/src/content/posts/lazy-summer/gallery/10.jpg new file mode 100644 index 0000000..5101198 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/10.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/11.jpg b/src/content/posts/lazy-summer/gallery/11.jpg new file mode 100644 index 0000000..1824595 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/11.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/12.jpg b/src/content/posts/lazy-summer/gallery/12.jpg new file mode 100644 index 0000000..663f4a0 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/12.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/13.jpg b/src/content/posts/lazy-summer/gallery/13.jpg new file mode 100644 index 0000000..0be6d23 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/13.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/14.jpg b/src/content/posts/lazy-summer/gallery/14.jpg new file mode 100644 index 0000000..c722f14 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/14.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/15.jpg b/src/content/posts/lazy-summer/gallery/15.jpg new file mode 100644 index 0000000..b697417 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/15.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/16.jpg b/src/content/posts/lazy-summer/gallery/16.jpg new file mode 100644 index 0000000..480ef64 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/16.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/17.jpg b/src/content/posts/lazy-summer/gallery/17.jpg new file mode 100644 index 0000000..835773e Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/17.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/18.jpg b/src/content/posts/lazy-summer/gallery/18.jpg new file mode 100644 index 0000000..b58508d Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/18.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/19.jpg b/src/content/posts/lazy-summer/gallery/19.jpg new file mode 100644 index 0000000..a8631a3 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/19.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/2.jpg b/src/content/posts/lazy-summer/gallery/2.jpg new file mode 100644 index 0000000..2ef1734 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/2.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/20.jpg b/src/content/posts/lazy-summer/gallery/20.jpg new file mode 100644 index 0000000..9e7de5f Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/20.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/3.jpg b/src/content/posts/lazy-summer/gallery/3.jpg new file mode 100644 index 0000000..46d1a5f Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/3.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/4.jpg b/src/content/posts/lazy-summer/gallery/4.jpg new file mode 100644 index 0000000..ae6689a Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/4.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/5.jpg b/src/content/posts/lazy-summer/gallery/5.jpg new file mode 100644 index 0000000..6c32048 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/5.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/6.jpg b/src/content/posts/lazy-summer/gallery/6.jpg new file mode 100644 index 0000000..5d8804d Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/6.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/7.jpg b/src/content/posts/lazy-summer/gallery/7.jpg new file mode 100644 index 0000000..5078dcd Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/7.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/8.jpg b/src/content/posts/lazy-summer/gallery/8.jpg new file mode 100644 index 0000000..0186078 Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/8.jpg differ diff --git a/src/content/posts/lazy-summer/gallery/9.jpg b/src/content/posts/lazy-summer/gallery/9.jpg new file mode 100644 index 0000000..e1bea8f Binary files /dev/null and b/src/content/posts/lazy-summer/gallery/9.jpg differ diff --git a/src/content/posts/lazy-summer/index.md b/src/content/posts/lazy-summer/index.md new file mode 100644 index 0000000..2720744 --- /dev/null +++ b/src/content/posts/lazy-summer/index.md @@ -0,0 +1,13 @@ +--- +title: "Lazy summer" +date: 2015-09-14T10:48:38Z +draft: false +tags: [ ] +image: summer2015.jpg +--- + +

    There were almost no workouts during July + August, and September is starting the same way. We're experiencing too much changes with the kids school and the inestable weather here, so my body is feeling dumb, as my mind.

    +

    On the other hand we had a nice summer, traveling from here to there and enjoying weather, beach, friends and family. Enough to charge batteries and start thinking in next adventure.

    + +{{< gallery match="gallery/*" sortOrder="asc" rowHeight="150" margins="5" thumbnailResizeOptions="600x600 q90 Lanczos" previewType="blur" embedPreview="true" >}} + diff --git a/src/content/posts/lazy-summer/summer2015.jpg b/src/content/posts/lazy-summer/summer2015.jpg new file mode 100644 index 0000000..c722f14 Binary files /dev/null and b/src/content/posts/lazy-summer/summer2015.jpg differ diff --git a/src/content/posts/limitando-usuarios-ssh-en-mercurial/index.md b/src/content/posts/limitando-usuarios-ssh-en-mercurial/index.md new file mode 100644 index 0000000..4676143 --- /dev/null +++ b/src/content/posts/limitando-usuarios-ssh-en-mercurial/index.md @@ -0,0 +1,32 @@ +--- +title: "Limitando usuarios ssh en Mercurial" +date: 2010-07-21T01:24:05Z +draft: false +tags: [ ] +image: +--- + +

    + Si algo bueno tiene Mercurial es que permite la autentificación de usuarios a través de SSH. Es muy sencillo agregar un nuevo usuario a un desarrollo/repositorio: adduser y con meterlo dentro del grupo correspondiente al desarrollo llegaría. Pero ¿qué ocurre si no queremos que ese usuario haga otra cosa que no sean comandos hg?.

    +

    + Conociendo la existencia de hg-ssh no ocurre demasiado, se trata de un script que hemos de referenciar en el authorized_keys del usuario que acabamos de crear de forma que todos los comandos entrantes pasen por este script. El script se encarga de parsear el comando que se pide en ejecución: si es de la familia de Mercurial lo ejecuta, en cualquier otro caso mostrará un error.

    +

    + Ejemplo de authorized_keys:

    + +``` +command="~/hg-ssh /home/repo1 /home/repo2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AAAA... +``` + +

    + He optado por copiar el archivo hg-ssh en el directorio home del usuario, pero se podría referenciar directamente el que trae de ejemplo la instalación de Mercurial.

    +

    + Nos encontramos con otro pequeño inconveniente, si el script se tiene que referenciar en el archivo authorized_keys como he dicho antes, el usuario debe tener su clave pública DSA/RSA configurada en el servidor, así que para estar seguros de que no se salta las restricciones impuestas por hg-ssh, deberíamos desactivar cualquier intento de acceso por contraseña:

    + +``` +# nano /etc/ssh/sshd_config +Match Group desarrolladores +PasswordAuthentication no +``` + +

    + Reiniciamos sshd y todo debería funcionar de forma adecuada, el usuario podrá hacer commits, push, pull, update... desde la máquina cuya clave id_dsa.pub hemos agregado en el servidor pero no podrá acceder a través de ssh a ningún otro comando, ni a shell; por lo tanto creo que se ha conseguido el principal objetivo.

    diff --git a/src/content/posts/mercurial-automatizando-al-maximo/gallery/esquema-mercurial.jpg b/src/content/posts/mercurial-automatizando-al-maximo/gallery/esquema-mercurial.jpg new file mode 100644 index 0000000..15dd399 Binary files /dev/null and b/src/content/posts/mercurial-automatizando-al-maximo/gallery/esquema-mercurial.jpg differ diff --git a/src/content/posts/mercurial-automatizando-al-maximo/index.md b/src/content/posts/mercurial-automatizando-al-maximo/index.md new file mode 100644 index 0000000..58427f4 --- /dev/null +++ b/src/content/posts/mercurial-automatizando-al-maximo/index.md @@ -0,0 +1,87 @@ +--- +title: "Mercurial: automatizando al máximo" +date: 2010-03-18T13:28:20Z +draft: false +tags: [ ] +image: +--- + +

    Cuando trabajamos con servidores de versiones seguro que hay muchas razones de peso de por medio, una de ellas -la que veremos- puede ser la replicación de código en diversas máquinas.

    Supongamos un montón de máquinas que comparten el mismo código de repositorio, el orden de propagación de un cambio en todas esas máquinas es sencillo:

    +
      +
    1. Programamos dicho cambio en nuestro servidor de desarrollo (devel).
    2. +
    3. Hacemos un commit local (en sistemas de versionado distribuido -como Mercurial- cada repositorio también es servidor).
    4. +
    5. Lo siguiente es un push al servidor donde almacenamos el código (repo código).
    6. +
    7. Ahora tocaría entrar en cada una de esas máquinas en las que queremos propagar el código y ejecutar un hg pull ; hg update.
    8. +
    +

    Tedioso cuando el número de máquinas que se manejan tiene dos cifras. Intentemos automatizar todo el proceso a través de las opciones que nos ofrece Mercurial.

    Combinando la confianza entre equipos por ssh y los hooks de mercurial podemos crear un monstruo sencillo de manejar.

    +
    +

    Local/Devel

    +

    En la copia local lo primero que tenemos que hacer es un clone del repositorio padre y definir los archivos que vamos a ignorar. Por ejemplo los archivos de configuración de base de datos o de peculiaridades locales de cada proyecto en producción (idioma, usuarios, themes, datos de usuario, imágenes...):

    + +``` +[devel] # cat repo/.hgignore +syntax: glob +.hgignore +config.php +bd.php +.project +uploads* +``` + +

    Nota: una buena práctica sería no agregar esos ficheros que estamos ignorando al repositorio, podemos agregar unos config-example.php o algo así para tener una referencia pero no las configuraciones en sí -imho-.

    A la hora de hacer un pull al repositorio del código todos los archivos que concuerden con los patrones escritos en el fichero .hgignore no se agregarán al repositorio. Ojo: el fichero .hgignore debe estar en el raíz del repositorio y debe pertenecer al mismo usuario que vaya a hacer el pull.

    +

    Repo código

    +

    Aquí es donde viene la chicha. Teóricamente en el repositorio del código no habría demasiado que tocar, sin embargo es aquí donde ejerceremos la mayor automatización del proceso. Para propagar los cambios a las máquinas en producción podemos hacerlo de dos formas:

    +
      +
    1. Como hacíamos antes, entrando en cada máquina en producción y hacer pull del repositorio del código
    2. +
    3. Desde el repositorio del código hacer push a todas las máquinas en producción
    4. +
    +


    Este punto ha sido el que más me ha costado entender, digamos que dependiendo de la dirección en la que se ejecute el pull/push los resultados son los mismos. Con lo que, si desde el repositorio del código ejecutamos lo siguiente, los cambios se propagarán a las máquinas 1, 2, 3 y 4:

    + +``` +[repo] # hg push ssh://usuario@maquina1/repo +[repo] # hg push ssh://usuario@maquina2/repo +[repo] # hg push ssh://usuario@maquina3/repo +[repo] # hg push ssh://usuario@maquina4/repo +``` + +

    Tuneando un poco el repo/.hg/hgrc del repositorio podemos acortar el comando e intentar automatizarlo un poco más, fijaos:

    + +``` +[repo] # cat repo/.hg/hgrc +[paths] +maquina1 = ssh://user@maquina1/repo +maquina2 = ssh://user@maquina2/repo +maquina3 = ssh://user@maquina3/repo +maquina4 = ssh://user@maquina4/repo +``` + +

    Ojo: el fichero hgrc debe estar dentro del directorio .hg/ del repositorio y debe pertenecer al mismo usuario que vaya a hacer el pull.

    De forma que para ejecutar el comando de propagación a todas las máquinas tendremos que hacer un:

    + +``` +[repo] # hg push maquina1 ; hg push maquina2 ; hg push maquina3 ; hg push maquina4 +``` + +

    Ya tenemos los push automatizados, ¿y los updates del lado de producción?. Vamos a ello.

    +

    Máquina producción

    +

    Cada vez que una de estas máquinas recibe un push del repositorio de código, mercurial debe actualizar los datos con un hg update. Para hacerlo automáticamente en cada push -ya lo hemos visto en otro post- en el repositorio de cada una de las máquinas en producción configuramos el repo/.hg/hgrc de forma que:

    + +``` +[hooks] +changegroup = hg update +``` + +

    Ojo: el fichero hgrc debe estar dentro del directorio .hg/ del repositorio y debe pertenecer al mismo usuario que vaya a hacer el pull.

    +

    Proceso

    + +``` + - Programamos en "devel" y guardamos cambios. + - [devel] # hg commit + - [devel] # hg push + - [repo] # hg push maquina1 ; hg push maquina2... +pushing to ssh://user@maquina1/repo +searching for changes +pushing to ssh://user@maquina2/repo +searching for changes +... +``` + diff --git a/src/content/posts/mercurial-en-fedora-core-4-y-centos-5/index.md b/src/content/posts/mercurial-en-fedora-core-4-y-centos-5/index.md new file mode 100644 index 0000000..65c1b8d --- /dev/null +++ b/src/content/posts/mercurial-en-fedora-core-4-y-centos-5/index.md @@ -0,0 +1,36 @@ +--- +title: "Mercurial en Fedora Core 4 y CentOS 5" +date: 2010-03-08T17:22:14Z +draft: false +tags: [ ] +image: +--- + +Necesitaba instalar Mercurial en varias máquinas totalmente desactualizadas, concretamente una Fedora Core release 4 (Stentz) y una CentOS release 5 (final), pensé que iba a ser un lío de dependencias pero al final ha resultado inexplicablemente más sencillo de lo esperado: + +

    Fedora Core 4

    + +``` +# cat /etc/fedora-release +Fedora Core release 4 (Stentz) +# wget http://packages.sw.be/mercurial/mercurial-1.0.2-1.fc4.rf.i386.rpm +# rpm -Uvh mercurial-1.0.2-1.fc4.rf.i386.rpm +# hg --version +Mercurial Distributed SCM (version 1.0.2) +``` + + +

    CentOS 5

    + +``` +# cat /etc/redhat-release +CentOS release 5 (Final) +# wget http://packages.sw.be/mercurial/mercurial-1.3.1-1.el5.rf.i386.rpm +# rpm -Uvh mercurial-1.3.1-1.el5.rf.i386.rpm +# hg --version +Mercurial Distributed SCM (version 1.3.1) +``` + + +

    Binarios

    +Vale que no sean la última versión (1.5 atm) pero estos binarios me han ahorrado bastante tiempo y evitado un problema, mola :). diff --git a/src/content/posts/mercurial-hook-on-push/index.md b/src/content/posts/mercurial-hook-on-push/index.md new file mode 100644 index 0000000..cdf4324 --- /dev/null +++ b/src/content/posts/mercurial-hook-on-push/index.md @@ -0,0 +1,17 @@ +--- +title: "Mercurial: Hook on push" +date: 2010-02-21T13:21:26Z +draft: false +tags: [ ] +image: +--- + +Lo tenía pendiente desde que cambié de Subversion a Mercurial, sabía que se podía y que era algo trivial pero lo vas dejando y bueno, just happens. El caso es que cuando haces un push al servidor lo normal es hacer un update de su lado, así que el hook que lo automatiza es el correspondiente: + +``` +[server]$ cat /path/del/repo/.hg/hgrc +[hooks] +changegroup = hg update +``` + +Y fuera preocupaciones. La obligada referencia a Tao of Mac, desde donde me vino la inspiración mientras intentaba poner el Macbook a punto. diff --git a/src/content/posts/mercurial-merge-branches/index.md b/src/content/posts/mercurial-merge-branches/index.md new file mode 100644 index 0000000..81d5c38 --- /dev/null +++ b/src/content/posts/mercurial-merge-branches/index.md @@ -0,0 +1,25 @@ +--- +title: "Mercurial: Merge branches" +date: 2013-07-17T10:38:15Z +draft: false +tags: [ ] +image: +--- + +

    Tarde o temprano llegaría la hora de trabajar con branches. Y ello lleva inequívocamente a tener que mezclarlas algún día. Suponiendo un escenario de repositorio con dos ramas (default, new), una vez el código es estable y está probado, haremos lo siguiente:

    + +``` +$ hg branch +new +$ hg pull -u +$ hg commit -m "[ADD] New features" +$ hg push +$ hg update default +$ hg branch +default +$ hg merge new +$ hg commit -m "[MER] Merging default and new branches" +$ hg push +``` + +

    El proceso es lógico, estamos trabajando en la rama new, hacemos commit de todos los cambios, nos pasamos a la rama default, hacemos un merge de una con otra y commiteamos de nuevo la mezcla. Una vez hecho todo ésto ya volvemos a tener una sola rama default en la que seguir la linea de desarrollo.

    diff --git a/src/content/posts/mercurial-pager-extension/gallery/mercurial-pager.png b/src/content/posts/mercurial-pager-extension/gallery/mercurial-pager.png new file mode 100644 index 0000000..0e4a9db Binary files /dev/null and b/src/content/posts/mercurial-pager-extension/gallery/mercurial-pager.png differ diff --git a/src/content/posts/mercurial-pager-extension/index.md b/src/content/posts/mercurial-pager-extension/index.md new file mode 100644 index 0000000..2268eff --- /dev/null +++ b/src/content/posts/mercurial-pager-extension/index.md @@ -0,0 +1,36 @@ +--- +title: "Mercurial: pager extension" +date: 2014-01-23T15:19:07Z +draft: false +tags: [ ] +image: +--- + +

    Sometimes when you are using Mercurial you want to paginate the output results. With paginate I mean use someting like bash more or less commands. Trying to focus yourself in a long list display is nearly imposible without a pager, so you can do it old-school-style:

    + +``` +$ hg st | more +$ hg st | less +``` + +

    Or you can activate the Mercurial PagerExtension, easy peasy:

    + +``` +[extensions] +pager= + +[pager] +pager = LESS='FRX' less +attend = +ignore = help +``` + +

    Once you have saved theese lines on your ~/.hgrc, all the Mercurial commands will be paged. Remember that, by default, PagerExtension only works with annotate, cat, diff, export, glog, log and qdiff commands. If you want it to be run with all the commands you have to add the "attend=" line. On the other hand, if you want to ignore some commands you can specify that with the "ignore" option as you can see in the above sample.

    +

    Mercurial Pager

    +

    More information about the PagerExtension and Mercurial in general:

    + diff --git a/src/content/posts/mercurial-sobre-apache/index.md b/src/content/posts/mercurial-sobre-apache/index.md new file mode 100644 index 0000000..e978d5e --- /dev/null +++ b/src/content/posts/mercurial-sobre-apache/index.md @@ -0,0 +1,59 @@ +--- +title: "Mercurial sobre Apache" +date: 2010-05-07T14:52:47Z +draft: false +tags: [ ] +image: +--- + +

    + Mi predilección por Mercurial ha quedado patente en algún que otro post, así que una vez estamos conforme con nuestro servidor de versiones llega el momento de dar un paso más. Intentaremos configurar un interfaz web para mostrar el código a todo el mundo (una especie de Trac solo para código y adaptado a Mercurial).

    +

    + El proceso es tan sencillo como crear otro VirtualHost en tu Apache con unas características un poco especiales porque en vez de tirar de archivos dinámicos (.php, .asp…) vamos a tirar de un cgi en Python, así que la configuración sería algo así:

    +

    +

    + +``` +<VirtualHost *:80> + ServerAdmin webmaster@localhost + DocumentRoot /home/www/userlinux/sd/mercurial/cgi-bin/ + ServerName hg.userlinux.net + ScriptAlias / /home/www/userlinux/sd/mercurial/cgi-bin/hgwebdir.cgi/ + <Directory "/home/www/userlinux/sd/mercurial/cgi-bin/"> + SetHandler cgi-script + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + </Directory> + ErrorLog /home/www/userlinux/sd/mercurial/logs/error.log + CustomLog /home/www/userlinux/sd/mercurial/logs/access.log combined +</VirtualHost> +``` + +

    + Fijaos que el archivo hgwebdir.cgi es el que lleva todo el trabajo, y ¿de dónde lo sacamos?. Si tenemos instalado Mercurial (cosa que se da por supuesta), ya lo tenemos en el sistema, tan solo hemos de copiarlo a su nueva ubicación y tan contentos:

    +

    +  

    + +``` +# cp /usr/share/doc/mercurial/examples/hgwebdir.cgi /home/www/userlinux/sd/mercurial/cgi-bin/ # chmod a+x /srv/hg/cgi-bin/hgwebdir.cgi +``` + +

    Ahora vamos a configurar alguna que otra preferencia del interfaz web, para ello creamos al mismo nivel del cgi un archivo de configuración llamado hgweb.config:

    + +``` +[paths] +rcms-plugin-prueba = /home/mercurial/rcms-plugin-prueba/ +[web] +style = gitweb +allow_archive = bz2 gz zip +maxchanges = 200 +``` + +

    + En él -como veis- definimos los repositorios que vamos a mostrar (nombre = ruta) y varias opciones de la web como su theme, si permitimos o no descargar el contenido del repositorio…

    +

    + Ojo con los permisos, tanto del archivo de configuración como de los repositorios, a los que ha de acceder el usuario propietario de Apache para leer. Un reinicio de Apache bastaría para tener el repositorio listo:

    +

    +

    diff --git a/src/content/posts/new-monitor-acer-g276hla/acerg276hl2.jpg b/src/content/posts/new-monitor-acer-g276hla/acerg276hl2.jpg new file mode 100644 index 0000000..1ade1e4 Binary files /dev/null and b/src/content/posts/new-monitor-acer-g276hla/acerg276hl2.jpg differ diff --git a/src/content/posts/new-monitor-acer-g276hla/gallery/0.jpg b/src/content/posts/new-monitor-acer-g276hla/gallery/0.jpg new file mode 100644 index 0000000..232be79 Binary files /dev/null and b/src/content/posts/new-monitor-acer-g276hla/gallery/0.jpg differ diff --git a/src/content/posts/new-monitor-acer-g276hla/gallery/1.jpg b/src/content/posts/new-monitor-acer-g276hla/gallery/1.jpg new file mode 100644 index 0000000..3e7b3af Binary files /dev/null and b/src/content/posts/new-monitor-acer-g276hla/gallery/1.jpg differ diff --git a/src/content/posts/new-monitor-acer-g276hla/gallery/2.jpg b/src/content/posts/new-monitor-acer-g276hla/gallery/2.jpg new file mode 100644 index 0000000..1ade1e4 Binary files /dev/null and b/src/content/posts/new-monitor-acer-g276hla/gallery/2.jpg differ diff --git a/src/content/posts/new-monitor-acer-g276hla/gallery/3.jpg b/src/content/posts/new-monitor-acer-g276hla/gallery/3.jpg new file mode 100644 index 0000000..d5ab601 Binary files /dev/null and b/src/content/posts/new-monitor-acer-g276hla/gallery/3.jpg differ diff --git a/src/content/posts/new-monitor-acer-g276hla/gallery/4.jpg b/src/content/posts/new-monitor-acer-g276hla/gallery/4.jpg new file mode 100644 index 0000000..fb1277e Binary files /dev/null and b/src/content/posts/new-monitor-acer-g276hla/gallery/4.jpg differ diff --git a/src/content/posts/new-monitor-acer-g276hla/gallery/5.jpg b/src/content/posts/new-monitor-acer-g276hla/gallery/5.jpg new file mode 100644 index 0000000..6ed59de Binary files /dev/null and b/src/content/posts/new-monitor-acer-g276hla/gallery/5.jpg differ diff --git a/src/content/posts/new-monitor-acer-g276hla/index.md b/src/content/posts/new-monitor-acer-g276hla/index.md new file mode 100644 index 0000000..b27da78 --- /dev/null +++ b/src/content/posts/new-monitor-acer-g276hla/index.md @@ -0,0 +1,14 @@ +--- +title: "New monitor: Acer G276HLA" +date: 2015-07-20T11:48:53Z +draft: false +tags: [ ] +image: acerg276hl2.jpg +--- + +

    A great friend of mine adviced me about a bid during the Amazon Premium Day. We have been talking about monitors some time ago and he remembered I was searching a replacement for my 22" Benq.

    +

    It is a led monitor Acer G276HLA with 27 inches and DVI + HDMI ports, you can read the other specifications in the Acer web.

    + +{{< gallery match="gallery/*" sortOrder="asc" rowHeight="150" margins="5" thumbnailResizeOptions="600x600 q90 Lanczos" previewType="blur" embedPreview="true" >}} + +

    One of the "cons" is the max. allowed resolution (1920x1080), but as my Macbook Air (not the retina one) has that same value, it's good for me. After a couple of days using it, I'm totally adapted and I think I've done a good buy.

    diff --git a/src/content/posts/nginx/index.md b/src/content/posts/nginx/index.md new file mode 100644 index 0000000..1975ce2 --- /dev/null +++ b/src/content/posts/nginx/index.md @@ -0,0 +1,10 @@ +--- +title: "Nginx" +date: 2011-11-10T21:16:03Z +draft: false +tags: [ ] +image: +--- + +

    + Cuando algo tan sencillo de instalar y de configurar se convierte en un servicio mejor que sus antecesores en prácticamente todas sus características podemos decir que hemos dado un salto de calidad importante. Y eso que todavía no he probado la última rama. Gracias Igor.

    diff --git a/src/content/posts/pair-programming-con-tmux/index.md b/src/content/posts/pair-programming-con-tmux/index.md new file mode 100644 index 0000000..ff08f0e --- /dev/null +++ b/src/content/posts/pair-programming-con-tmux/index.md @@ -0,0 +1,17 @@ +--- +title: "Pair programming con tmux" +date: 2013-02-25T08:56:09Z +draft: false +tags: [ ] +image: +--- + +

    Con screen era sencillo crear un entorno para el pair programming, pero con tmux también es trivial. Me refiero a compartir una sesión de terminal para poder interactuar desde varias localizaciones distintas:

    + +``` +tmux -S /tmp/pair +chmod 777 /tmp/pair +tmux -S /tmp/pair attach +``` + +

    Se trata de crear una sesión especificando el destino, asignarle permisos (en este caso a todo el mundo) y conectarse a esa sesión con el otro usuario deseado. A partir de ahí ambos usuarios (el que ha creado la sesión y el que se ha conectado posteriormente) pueden interactuar simultáneamente.

    diff --git a/src/content/posts/papa-somos-campeones-del-mundo/index.md b/src/content/posts/papa-somos-campeones-del-mundo/index.md new file mode 100644 index 0000000..2d43b31 --- /dev/null +++ b/src/content/posts/papa-somos-campeones-del-mundo/index.md @@ -0,0 +1,16 @@ +--- +title: "Papá, ¡somos campeones del mundo!" +date: 2010-07-12T01:40:30Z +draft: false +tags: [ ] +image: +--- + +

    +

    +

    + Me compraste mi primer balón, mi primera equipación, me enseñaste a jugar limpio, a vivir los partidos con entusiasmo, con emoción pero con serenidad, a creer siempre en el buen fútbol, en la humildad, en los buenos jugadores. Sabías que algún día llegaría, tenía que llegar después de tantos partidos, de tanto sufrimiento, de tantos palos. Nunca perdiste la esperanza.

    +

    + Y ha llegado, ha sido hoy, gracias a la mejor generación de futbolistas de la historia del país puedo decir que hemos visto juntos a España ganar una Eurocopa y un Mundial. Y es muy posible que ni mis hijos ni mis nietos puedan decir lo mismo a sus padres.

    +

    + Papá... ¡¡somos campeones del mundo!!.

    diff --git a/src/content/posts/pycones-2014/index.md b/src/content/posts/pycones-2014/index.md new file mode 100644 index 0000000..df070f9 --- /dev/null +++ b/src/content/posts/pycones-2014/index.md @@ -0,0 +1,11 @@ +--- +title: "PyConES 2014" +date: 2014-11-20T13:53:25Z +draft: false +tags: [ ] +image: pycones2014.jpg +--- + +

    El pasado fin de semana del 8-9 de Noviembre (2014) se celebró en Zaragoza la segunda edición de la PyConES, la conferencia nacional de Python con mayor relevancia de España. El año pasado también asistimos en su primera edición celebrada en Madrid y este año no iba a ser menos así que allá me fui con Borja, en tren, desde Lugo.

    +

    Las charlas a las que asistí fueron muy interesantes, normalmente casi siempre lo son si te pones en modo esponja e intentas sacar provecho a cada frase o idea del ponente. Al igual de interesante que coincidir con toda esa gente que vemos de sarao ensarao y hacer efectivas algunas desvirtualizaciones.

    +

    Y como el año pasado me olvidé de publicar las fotos, este año no quería repetir la desfachatez: FOTOS, así que sin tiempo para una reseña más profunda... ¡nos vemos en la PyConES2015!.

    diff --git a/src/content/posts/pycones-2014/pycones2014.jpg b/src/content/posts/pycones-2014/pycones2014.jpg new file mode 100644 index 0000000..433045d Binary files /dev/null and b/src/content/posts/pycones-2014/pycones2014.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/0.jpg b/src/content/posts/pycones-2015/gallery/0.jpg new file mode 100644 index 0000000..7d4bde1 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/0.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/1.jpg b/src/content/posts/pycones-2015/gallery/1.jpg new file mode 100644 index 0000000..4dc0476 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/1.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/10.jpg b/src/content/posts/pycones-2015/gallery/10.jpg new file mode 100644 index 0000000..9c357ba Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/10.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/11.jpg b/src/content/posts/pycones-2015/gallery/11.jpg new file mode 100644 index 0000000..0c3d61a Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/11.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/12.jpg b/src/content/posts/pycones-2015/gallery/12.jpg new file mode 100644 index 0000000..a26b7e9 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/12.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/13.jpg b/src/content/posts/pycones-2015/gallery/13.jpg new file mode 100644 index 0000000..1c4692a Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/13.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/14.jpg b/src/content/posts/pycones-2015/gallery/14.jpg new file mode 100644 index 0000000..3bf9871 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/14.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/15.jpg b/src/content/posts/pycones-2015/gallery/15.jpg new file mode 100644 index 0000000..cd179a1 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/15.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/16.jpg b/src/content/posts/pycones-2015/gallery/16.jpg new file mode 100644 index 0000000..bfd174d Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/16.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/17.jpg b/src/content/posts/pycones-2015/gallery/17.jpg new file mode 100644 index 0000000..98f5e3a Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/17.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/18.jpg b/src/content/posts/pycones-2015/gallery/18.jpg new file mode 100644 index 0000000..788c7b2 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/18.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/19.jpg b/src/content/posts/pycones-2015/gallery/19.jpg new file mode 100644 index 0000000..4eb1871 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/19.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/2.jpg b/src/content/posts/pycones-2015/gallery/2.jpg new file mode 100644 index 0000000..2acff45 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/2.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/20.jpg b/src/content/posts/pycones-2015/gallery/20.jpg new file mode 100644 index 0000000..3f06989 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/20.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/21.jpg b/src/content/posts/pycones-2015/gallery/21.jpg new file mode 100644 index 0000000..109826f Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/21.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/22.jpg b/src/content/posts/pycones-2015/gallery/22.jpg new file mode 100644 index 0000000..9558412 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/22.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/23.jpg b/src/content/posts/pycones-2015/gallery/23.jpg new file mode 100644 index 0000000..17c7a36 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/23.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/24.jpg b/src/content/posts/pycones-2015/gallery/24.jpg new file mode 100644 index 0000000..681d001 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/24.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/25.jpg b/src/content/posts/pycones-2015/gallery/25.jpg new file mode 100644 index 0000000..6db9400 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/25.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/26.jpg b/src/content/posts/pycones-2015/gallery/26.jpg new file mode 100644 index 0000000..8b18f5e Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/26.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/27.jpg b/src/content/posts/pycones-2015/gallery/27.jpg new file mode 100644 index 0000000..e3f5ab0 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/27.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/28.jpg b/src/content/posts/pycones-2015/gallery/28.jpg new file mode 100644 index 0000000..04d0fc1 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/28.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/29.jpg b/src/content/posts/pycones-2015/gallery/29.jpg new file mode 100644 index 0000000..8043e3c Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/29.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/3.jpg b/src/content/posts/pycones-2015/gallery/3.jpg new file mode 100644 index 0000000..5778d1a Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/3.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/30.jpg b/src/content/posts/pycones-2015/gallery/30.jpg new file mode 100644 index 0000000..957f43c Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/30.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/31.jpg b/src/content/posts/pycones-2015/gallery/31.jpg new file mode 100644 index 0000000..21578c2 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/31.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/32.jpg b/src/content/posts/pycones-2015/gallery/32.jpg new file mode 100644 index 0000000..2278f78 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/32.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/33.jpg b/src/content/posts/pycones-2015/gallery/33.jpg new file mode 100644 index 0000000..1e8a3fc Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/33.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/34.jpg b/src/content/posts/pycones-2015/gallery/34.jpg new file mode 100644 index 0000000..bdf6a5f Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/34.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/35.jpg b/src/content/posts/pycones-2015/gallery/35.jpg new file mode 100644 index 0000000..a6ec056 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/35.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/36.jpg b/src/content/posts/pycones-2015/gallery/36.jpg new file mode 100644 index 0000000..e31f7d3 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/36.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/37.jpg b/src/content/posts/pycones-2015/gallery/37.jpg new file mode 100644 index 0000000..710857e Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/37.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/38.jpg b/src/content/posts/pycones-2015/gallery/38.jpg new file mode 100644 index 0000000..c897240 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/38.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/39.jpg b/src/content/posts/pycones-2015/gallery/39.jpg new file mode 100644 index 0000000..6564439 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/39.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/4.jpg b/src/content/posts/pycones-2015/gallery/4.jpg new file mode 100644 index 0000000..b3102af Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/4.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/40.jpg b/src/content/posts/pycones-2015/gallery/40.jpg new file mode 100644 index 0000000..943a43e Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/40.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/41.jpg b/src/content/posts/pycones-2015/gallery/41.jpg new file mode 100644 index 0000000..4f16181 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/41.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/42.jpg b/src/content/posts/pycones-2015/gallery/42.jpg new file mode 100644 index 0000000..b2b9e18 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/42.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/43.jpg b/src/content/posts/pycones-2015/gallery/43.jpg new file mode 100644 index 0000000..00c40ff Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/43.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/44.jpg b/src/content/posts/pycones-2015/gallery/44.jpg new file mode 100644 index 0000000..9ecbba7 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/44.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/45.jpg b/src/content/posts/pycones-2015/gallery/45.jpg new file mode 100644 index 0000000..baca048 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/45.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/46.jpg b/src/content/posts/pycones-2015/gallery/46.jpg new file mode 100644 index 0000000..d74d6bb Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/46.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/47.jpg b/src/content/posts/pycones-2015/gallery/47.jpg new file mode 100644 index 0000000..a5b9a6d Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/47.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/48.jpg b/src/content/posts/pycones-2015/gallery/48.jpg new file mode 100644 index 0000000..236e59a Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/48.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/49.jpg b/src/content/posts/pycones-2015/gallery/49.jpg new file mode 100644 index 0000000..49e18ed Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/49.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/5.jpg b/src/content/posts/pycones-2015/gallery/5.jpg new file mode 100644 index 0000000..144e568 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/5.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/50.jpg b/src/content/posts/pycones-2015/gallery/50.jpg new file mode 100644 index 0000000..9b873e3 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/50.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/51.jpg b/src/content/posts/pycones-2015/gallery/51.jpg new file mode 100644 index 0000000..09bc8b7 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/51.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/52.jpg b/src/content/posts/pycones-2015/gallery/52.jpg new file mode 100644 index 0000000..e84b18f Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/52.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/53.jpg b/src/content/posts/pycones-2015/gallery/53.jpg new file mode 100644 index 0000000..f3be7af Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/53.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/54.jpg b/src/content/posts/pycones-2015/gallery/54.jpg new file mode 100644 index 0000000..3a0cec9 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/54.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/55.jpg b/src/content/posts/pycones-2015/gallery/55.jpg new file mode 100644 index 0000000..a00f39a Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/55.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/56.jpg b/src/content/posts/pycones-2015/gallery/56.jpg new file mode 100644 index 0000000..4504edd Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/56.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/57.jpg b/src/content/posts/pycones-2015/gallery/57.jpg new file mode 100644 index 0000000..66d6fd8 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/57.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/58.jpg b/src/content/posts/pycones-2015/gallery/58.jpg new file mode 100644 index 0000000..9342f5c Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/58.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/59.jpg b/src/content/posts/pycones-2015/gallery/59.jpg new file mode 100644 index 0000000..4b41fdc Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/59.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/6.jpg b/src/content/posts/pycones-2015/gallery/6.jpg new file mode 100644 index 0000000..16b089b Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/6.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/60.jpg b/src/content/posts/pycones-2015/gallery/60.jpg new file mode 100644 index 0000000..6361414 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/60.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/61.jpg b/src/content/posts/pycones-2015/gallery/61.jpg new file mode 100644 index 0000000..db14b5d Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/61.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/7.jpg b/src/content/posts/pycones-2015/gallery/7.jpg new file mode 100644 index 0000000..a34f2f0 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/7.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/8.jpg b/src/content/posts/pycones-2015/gallery/8.jpg new file mode 100644 index 0000000..1b9d143 Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/8.jpg differ diff --git a/src/content/posts/pycones-2015/gallery/9.jpg b/src/content/posts/pycones-2015/gallery/9.jpg new file mode 100644 index 0000000..8fc827e Binary files /dev/null and b/src/content/posts/pycones-2015/gallery/9.jpg differ diff --git a/src/content/posts/pycones-2015/index.md b/src/content/posts/pycones-2015/index.md new file mode 100644 index 0000000..c1eebbb --- /dev/null +++ b/src/content/posts/pycones-2015/index.md @@ -0,0 +1,34 @@ +--- +title: "PyConES 2015" +date: 2015-11-28T11:32:51Z +draft: false +tags: [ "python", "code" ] +image: pycones2015.png +--- + +

    El pasado fin de semana (20 a 22 noviembre de 2015) se celebró en Valencia la PyConES 2015, la tercera edición de la conferencia nacional sobre Python más importante de España. Así que como no podía ser de otra forma, después de un noviembre atípico por un más que intenso e interesante Sprint (materia de otro post), allá nos fuimos Borja y yo a pasar el fin de semana entre amigos a la ciudad del Turia.

    +

    Este año era especial por varios motivos. En primer lugar porque fuimos (y volvimos) en avión, intentando superar mi ya archiconocida aerofobia, en segundo lugar por el reencuentro con los amigos de #monojimmy (a los que no veía desde el SIMO de 2004). Y, por supuesto, por la propia conferencia y todo lo que conlleva.

    +

    Las charlas como siempre, sublimes, este año incluso hemos podido asistir a un taller de AsyncIO el viernes y a un par de asambleas de la Asociación Python España para tomar decisiones sobre la nueva junta y la nueva sede de la PyConES.

    + +

    Y con un montón de conocimientos y términos nuevos, con un montón de networking, horchatas y fartóns, un montón de comida en el buche y una nueva cuenta de twitter (@python_lugo), nos hemos vuelto a casa - volando - con las pilas cargadas pensando en el privilegio que es formar parte de esta pequeña gran familia. Gracias a los huéspedes por tratarnos como en casa, a la organización por el magnífico trabajo y a toda la comunidad por hacer posible este fenomenal evento.

    +

    Nos vemos en la PyConES 2016.

    + +{{< gallery match="gallery/*" sortOrder="asc" rowHeight="150" margins="5" thumbnailResizeOptions="600x600 q90 Lanczos" previewType="blur" embedPreview="true" >}} + diff --git a/src/content/posts/pycones-2015/pycones2015.png b/src/content/posts/pycones-2015/pycones2015.png new file mode 100644 index 0000000..f6d5802 Binary files /dev/null and b/src/content/posts/pycones-2015/pycones2015.png differ diff --git a/src/content/posts/restaurar-innodb-partiendo-solamente-de-archivos/index.md b/src/content/posts/restaurar-innodb-partiendo-solamente-de-archivos/index.md new file mode 100644 index 0000000..88c0df0 --- /dev/null +++ b/src/content/posts/restaurar-innodb-partiendo-solamente-de-archivos/index.md @@ -0,0 +1,91 @@ +--- +title: "Restaurar InnoDB partiendo solamente de archivos" +date: 2013-12-05T14:42:23Z +draft: false +tags: [ ] +image: +--- + +

    El título suena muy a "la he liado parda por favor échame una mano". En efecto. Básicamente (y creo que lo repetiré varias veces a lo largo del artículo para que queda claro), la mejor solución para no llegar nunca a este punto es hacer dumps de vuestras bases de datos.

    +

    Olvidaos de rsync, rdiff-backup o cualquier solución de backups que tengáis implementada contra ficheros, InnoDB no es MyISAM. Pero bueno, como he leído en alguna de las referencias que pongo al final del artículo, dejemos de llorar, nuestros datos todavía deberían estar ahí.

    +

    Requisitos

    +

    Para restaurar una base de datos InnoDB desde archivos (frm y binary logs), sin tener dumpeado completo, debemos tener lo siguiente:

    + +

    Si tienes lo necesario podemos seguir con la intentona.

    +

    Restaurando

    +

    El primer paso es restaurar los ficheros del día adecuado, pongamos que queremos hacerlo de hace 10 días a través de nuestro rdiff-backup:

    + +``` +# mkdir ~/restaura/ +# rdiff-backup -r 10D /backup/mysql/ibdata1 ~/restaura/ibdata1 +# rdiff-backup -r 10D /backup/mysql/ib_logfile0 ~/restaura/ib_logfile0 +# rdiff-backup -r 10D /backup/mysql/ib_logfile1 ~/restaura/ib_logfile1 +# rdiff-backup -r 10D /backup/mysql/database ~/restaura/database/ +``` + +

    Los pasamos a la máquina en la que vayamos a ejecutar el aislado de mysql:

    + +``` +# scp -r ~/restaura/ oscar@Air.local:~/restaura-innodb/ +``` + +

    Aislando MySQL

    +

    Lo primero que hemos de tener claro es que para restaurar desde estos archivos en este escenario es que tenemos que aislar un MySQL solamente para ésto. Es decir, coger un MySQL que tengamos por ahí parado o sin mucho funcionamiento para ponerlo a funcionar sólo con la base de datos que vamos a resturar.

    +

    ¿Por qué?, porque los logs binarios (ib_log e ibdata) guardan información de todas las bases de datos del servidor, así que no podemos sobreescribir los ya existentes, para ello podemos hacer una copia del directorio que actualmente está funcionando en ese servidor que vamos a usar (para posteriormente dejarlo todo tal y como estaba).

    +

    En este caso concreto voy a utilizar el de mi Mac. Lo primero de todo es parar el servidor, Luego hago copia de seguridad y preparo el nuevo directorio mysql5 para que el servidor lo detecte adecuadamente:

    + +``` +$ sudo kill -9 `ps aux | grep mysql | awk '{print $2}'` ; ps aux | grep mysql +# cd /opt/local/var/db/ +# mv mysql5 mysql5_backup +# mkdir mysql5 +# cp mysql_backup/mysql-bin* mysql5 +# cp -r mysql_backup/mysql/ mysql5 +``` + +

    Agregando los datos restaurados

    +

    Ahora que tenemos un entorno mysql mínimo funcional (todavía no hemos arrancado de nuevo el servidor), vamos a agregar la base de datos que hemos restaurado para poder acceder a los datos:

    + +``` +# cp -r ~/restaura-innodb/ib_logfile* /opt/local/var/db/mysql5/ +# cp -r ~/restaura-innodb/ibdata1 /opt/local/var/db/mysql5/ +# cp -r ~/restaura-innodb/database /opt/local/var/db/mysql5/ +``` + +

    El nuevo directorio mysql5 tiene que quedar tal que así:

    + +``` +$ ls +Air.local.err mysql-bin.000002 mysql-bin.000010 mysql-bin.000018 +Air.local.pid mysql-bin.000003 mysql-bin.000011 mysql-bin.000019 +ib_logfile0 mysql-bin.000004 mysql-bin.000012 mysql-bin.000020 +ib_logfile1 mysql-bin.000005 mysql-bin.000013 mysql-bin.000021 +ibdata1 mysql-bin.000006 mysql-bin.000014 mysql-bin.index +database/ mysql-bin.000007 mysql-bin.000015 +mysql/ mysql-bin.000008 mysql-bin.000016 +mysql-bin.000001 mysql-bin.000009 mysql-bin.000017 +``` + +

    Comprobamos que todos los ficheros tienen permisos para el usuario mysql (_mysql:_mysql en el caso concreto del MySQL de OSX instalado vía Macports), y arrancamos de nuevo el servidor. Si todo ha ido bien y tenemos algo de suerte, deberíamos tener acceso a los datos de esa base de datos que se nos resistía.

    +

    Volverlo a dejar todo como estaba

    +

    Este punto no es recomendable del todo. Como lección aprendida no deberíamos dejar todo como estaba: deberíamos mejorar las copias de seguridad para que no vuelva a pasar esta pirula del InnoDB.

    +

    Sin embargo si nos referimos al servidor MySQL que aislamos, como hemos sido previsores, será sencillo dejarlo como estaba:

    + +``` +# cd /opt/local/var/db/ +# mv mysql5 mysql5_restauraciones +# mv mysql5_backup mysql5 +``` + +

    Y reiniciamos el servidor.

    +

    Insistiendo en los dumps

    +

    La mejor forma de hacer una copia de seguridad de una base de datos (en general, pero sobre todo si hablamos de InnoDB) es haciendo dumps completos, así que es importante repetir hasta la saciedad que la práctica aquí descrita no es sana, ni recomendable, ni segura en absoluto. Ni para los sysadmins.

    +

    Referencias

    + diff --git a/src/content/posts/rooted-con/index.md b/src/content/posts/rooted-con/index.md new file mode 100644 index 0000000..6a7377e --- /dev/null +++ b/src/content/posts/rooted-con/index.md @@ -0,0 +1,23 @@ +--- +title: "Rooted CON" +date: 2010-01-15T09:51:00Z +draft: false +tags: [ ] +image: +--- + +Hay un nuevo evento en el panorama de la seguridad informática a nivel nacional. Para despistados -que los habrá :D- estoy hablando de la Rooted CON. Un grupo de profesionales -y fanáticos de la seguridad- se han juntado para ofrecer un congreso con conferencias altamente técnicas desde un enfoque práctico y neutral. +
    Rooted CON
    +Por lo que podemos ver en la sección de ponentes promete demasiado como para ser verdad -¡qué alguien me pellizque!-. Poco a poco se irán confirmando más ponentes y los detalles de cada ponencia: + +Todavía no sé si podré asistir porque es entre semana (18, 19 y 20 de marzo) y complicado de compatibilizar en horarios con el resto de las obligaciones. +

    +Será uno de los eventos más interesantes del año en cuanto a seguridad y espero que consiga continuidad. Desde aquí my 2€cents en forma de promoción. (Vía Vierito y Rooted CON). diff --git a/src/content/posts/upgrading-django-18/django18.jpg b/src/content/posts/upgrading-django-18/django18.jpg new file mode 100644 index 0000000..8e9a92c Binary files /dev/null and b/src/content/posts/upgrading-django-18/django18.jpg differ diff --git a/src/content/posts/upgrading-django-18/gallery/django_logo_avatar.png b/src/content/posts/upgrading-django-18/gallery/django_logo_avatar.png new file mode 100644 index 0000000..2548ed4 Binary files /dev/null and b/src/content/posts/upgrading-django-18/gallery/django_logo_avatar.png differ diff --git a/src/content/posts/upgrading-django-18/index.md b/src/content/posts/upgrading-django-18/index.md new file mode 100644 index 0000000..e7f1bd7 --- /dev/null +++ b/src/content/posts/upgrading-django-18/index.md @@ -0,0 +1,29 @@ +--- +title: "Upgrading Django to 1.8" +date: 2015-06-06T00:24:40Z +draft: false +tags: [ ] +image: django18.jpg +--- + +

    As they said, having last version has several benefits:

    + +

    Also it's even greater that 1.8 is a LTS (Long-term support), that means we will get bug fixes and security updates for a guaranteed period of time, typically 3+ years.

    +

    How the upgrade has affected to some Django 1.4 production code?, hard to say in few words, it depends on how the code is (+ 3rd party pieces), but main spots - to take it carefully - I've noted were:

    + +

    It would be very tough if this above points pretend to be a guide or something like that. Not by a long shot. My recommendation is - of course - take a cup of your favourite drink, a bunch of patience... start reading the release notes and, above all, have as much fun as you can :).

    diff --git a/src/content/posts/welcome-2016/index.md b/src/content/posts/welcome-2016/index.md new file mode 100644 index 0000000..6a26982 --- /dev/null +++ b/src/content/posts/welcome-2016/index.md @@ -0,0 +1,11 @@ +--- +title: "Welcome 2016" +date: 2016-01-04T20:14:36Z +draft: false +tags: [ "personal" ] +image: winter.jpeg +--- + +

    2015 will be remembered (by us) as the year when my children started going to school. With all its implications, new schedules, calendar settings and try to fit the mess with the work times and other tasks. Despite the initial organizational mess, the year was ok with me as we all have health. The only spot I need to improve is to be able to disconnect and to have a better "parenting quality time".

    +

    At the professional side I'm working with an incredible team of friends, learning from them every day - I could even attend a full MeigaSprint - so the only thing I can ask the new year is to keep the current situation. It might be interesting to gather some time to contribute actively to any open source project, let's see if I can handle it.

    +

    And well, as all the years, there are some other minor tasks ready to be improved: the phisical shape or to work a bit more the fear of flying... but don't like to be too hard on myself ;).

    diff --git a/src/content/posts/welcome-2016/winter.jpeg b/src/content/posts/welcome-2016/winter.jpeg new file mode 100644 index 0000000..28b04a8 Binary files /dev/null and b/src/content/posts/welcome-2016/winter.jpeg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/0_12542296717115834462.json b/src/resources/_gen/images/posts/lazy-summer/gallery/0_12542296717115834462.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/0_12542296717115834462.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/0_hua6ad174fa62b219fcdeaea69594a5e21_254853_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/0_hua6ad174fa62b219fcdeaea69594a5e21_254853_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..13676f3 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/0_hua6ad174fa62b219fcdeaea69594a5e21_254853_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/0_hua6ad174fa62b219fcdeaea69594a5e21_254853_dec993eb4ef4124154ce8f96e2bc36ea.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/0_hua6ad174fa62b219fcdeaea69594a5e21_254853_dec993eb4ef4124154ce8f96e2bc36ea.jpg new file mode 100644 index 0000000..24ad05d Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/0_hua6ad174fa62b219fcdeaea69594a5e21_254853_dec993eb4ef4124154ce8f96e2bc36ea.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/10_10468696459291441460.json b/src/resources/_gen/images/posts/lazy-summer/gallery/10_10468696459291441460.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/10_10468696459291441460.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/10_hu7a769204fde0a7dc32a9aa2d0c07434b_247397_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/10_hu7a769204fde0a7dc32a9aa2d0c07434b_247397_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..a572c49 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/10_hu7a769204fde0a7dc32a9aa2d0c07434b_247397_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/10_hu7a769204fde0a7dc32a9aa2d0c07434b_247397_d078d1f9744c8540756ab5ac1d807d76.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/10_hu7a769204fde0a7dc32a9aa2d0c07434b_247397_d078d1f9744c8540756ab5ac1d807d76.jpg new file mode 100644 index 0000000..0ef7675 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/10_hu7a769204fde0a7dc32a9aa2d0c07434b_247397_d078d1f9744c8540756ab5ac1d807d76.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/11_14446311478061399442.json b/src/resources/_gen/images/posts/lazy-summer/gallery/11_14446311478061399442.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/11_14446311478061399442.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/11_hu4b0a808e6c7f99b86cc3f0f03b23625f_278233_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/11_hu4b0a808e6c7f99b86cc3f0f03b23625f_278233_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..cbce33c Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/11_hu4b0a808e6c7f99b86cc3f0f03b23625f_278233_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/11_hu4b0a808e6c7f99b86cc3f0f03b23625f_278233_cb30f3cef39b0b09c68bce71758642de.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/11_hu4b0a808e6c7f99b86cc3f0f03b23625f_278233_cb30f3cef39b0b09c68bce71758642de.jpg new file mode 100644 index 0000000..1fd00bf Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/11_hu4b0a808e6c7f99b86cc3f0f03b23625f_278233_cb30f3cef39b0b09c68bce71758642de.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/12_9657967456792301594.json b/src/resources/_gen/images/posts/lazy-summer/gallery/12_9657967456792301594.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/12_9657967456792301594.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/12_hu9a24c0421e5b37ebdaf76a5f5e77a461_146296_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/12_hu9a24c0421e5b37ebdaf76a5f5e77a461_146296_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..75301ad Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/12_hu9a24c0421e5b37ebdaf76a5f5e77a461_146296_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/12_hu9a24c0421e5b37ebdaf76a5f5e77a461_146296_e4c4f1dfd48154aa5887304dd6c21882.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/12_hu9a24c0421e5b37ebdaf76a5f5e77a461_146296_e4c4f1dfd48154aa5887304dd6c21882.jpg new file mode 100644 index 0000000..093fe41 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/12_hu9a24c0421e5b37ebdaf76a5f5e77a461_146296_e4c4f1dfd48154aa5887304dd6c21882.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/13_2265300918231969149.json b/src/resources/_gen/images/posts/lazy-summer/gallery/13_2265300918231969149.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/13_2265300918231969149.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/13_hub1cd6d8e97ea647884fb9bf1b5ee6167_194767_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/13_hub1cd6d8e97ea647884fb9bf1b5ee6167_194767_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..99a9e23 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/13_hub1cd6d8e97ea647884fb9bf1b5ee6167_194767_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/13_hub1cd6d8e97ea647884fb9bf1b5ee6167_194767_c0a63f8663e2f468bd3430c1c13ca436.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/13_hub1cd6d8e97ea647884fb9bf1b5ee6167_194767_c0a63f8663e2f468bd3430c1c13ca436.jpg new file mode 100644 index 0000000..9f51af7 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/13_hub1cd6d8e97ea647884fb9bf1b5ee6167_194767_c0a63f8663e2f468bd3430c1c13ca436.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/14_17979406503656069238.json b/src/resources/_gen/images/posts/lazy-summer/gallery/14_17979406503656069238.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/14_17979406503656069238.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/14_hu17d75a076600b50c3a3a10958a7146a0_233876_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/14_hu17d75a076600b50c3a3a10958a7146a0_233876_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..72630a8 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/14_hu17d75a076600b50c3a3a10958a7146a0_233876_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/14_hu17d75a076600b50c3a3a10958a7146a0_233876_a21425d10659f0471cca1dc44ccf05d5.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/14_hu17d75a076600b50c3a3a10958a7146a0_233876_a21425d10659f0471cca1dc44ccf05d5.jpg new file mode 100644 index 0000000..fbed394 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/14_hu17d75a076600b50c3a3a10958a7146a0_233876_a21425d10659f0471cca1dc44ccf05d5.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/15_6854941267386546792.json b/src/resources/_gen/images/posts/lazy-summer/gallery/15_6854941267386546792.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/15_6854941267386546792.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/15_hufe5524e95aff50893cd6150ecd4329cd_199417_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/15_hufe5524e95aff50893cd6150ecd4329cd_199417_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..fb5d41c Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/15_hufe5524e95aff50893cd6150ecd4329cd_199417_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/15_hufe5524e95aff50893cd6150ecd4329cd_199417_ebc6006a6bcb6b21043a6e5b09e102f6.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/15_hufe5524e95aff50893cd6150ecd4329cd_199417_ebc6006a6bcb6b21043a6e5b09e102f6.jpg new file mode 100644 index 0000000..aef6a10 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/15_hufe5524e95aff50893cd6150ecd4329cd_199417_ebc6006a6bcb6b21043a6e5b09e102f6.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/16_15654678712509277964.json b/src/resources/_gen/images/posts/lazy-summer/gallery/16_15654678712509277964.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/16_15654678712509277964.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/16_hu5ff30388f726448c95e3738bf4caaa99_266698_25e092bcfe570b5047f5cc9b93c6cd2c.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/16_hu5ff30388f726448c95e3738bf4caaa99_266698_25e092bcfe570b5047f5cc9b93c6cd2c.jpg new file mode 100644 index 0000000..edd6073 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/16_hu5ff30388f726448c95e3738bf4caaa99_266698_25e092bcfe570b5047f5cc9b93c6cd2c.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/16_hu5ff30388f726448c95e3738bf4caaa99_266698_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/16_hu5ff30388f726448c95e3738bf4caaa99_266698_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..37c9633 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/16_hu5ff30388f726448c95e3738bf4caaa99_266698_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/17_10272761687856848526.json b/src/resources/_gen/images/posts/lazy-summer/gallery/17_10272761687856848526.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/17_10272761687856848526.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/17_hu3ff4ce1472300f1d9cc5a5269c1803bf_191871_34e1e87e440064aae64c43d3a865289d.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/17_hu3ff4ce1472300f1d9cc5a5269c1803bf_191871_34e1e87e440064aae64c43d3a865289d.jpg new file mode 100644 index 0000000..2507ec9 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/17_hu3ff4ce1472300f1d9cc5a5269c1803bf_191871_34e1e87e440064aae64c43d3a865289d.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/17_hu3ff4ce1472300f1d9cc5a5269c1803bf_191871_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/17_hu3ff4ce1472300f1d9cc5a5269c1803bf_191871_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..4a35b03 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/17_hu3ff4ce1472300f1d9cc5a5269c1803bf_191871_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/18_9048111019021426309.json b/src/resources/_gen/images/posts/lazy-summer/gallery/18_9048111019021426309.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/18_9048111019021426309.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/18_huebf5c3a29c953a79f29293f358a7fa07_233066_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/18_huebf5c3a29c953a79f29293f358a7fa07_233066_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..69de069 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/18_huebf5c3a29c953a79f29293f358a7fa07_233066_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/18_huebf5c3a29c953a79f29293f358a7fa07_233066_a258a4c581985f7f59237c172672865f.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/18_huebf5c3a29c953a79f29293f358a7fa07_233066_a258a4c581985f7f59237c172672865f.jpg new file mode 100644 index 0000000..4672dc7 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/18_huebf5c3a29c953a79f29293f358a7fa07_233066_a258a4c581985f7f59237c172672865f.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/19_14829241292874871625.json b/src/resources/_gen/images/posts/lazy-summer/gallery/19_14829241292874871625.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/19_14829241292874871625.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/19_huf71818ce818f35b48a8df3b9a52ecdbc_163666_46b172c3f8efb2ce190210c298b76766.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/19_huf71818ce818f35b48a8df3b9a52ecdbc_163666_46b172c3f8efb2ce190210c298b76766.jpg new file mode 100644 index 0000000..9f504a6 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/19_huf71818ce818f35b48a8df3b9a52ecdbc_163666_46b172c3f8efb2ce190210c298b76766.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/19_huf71818ce818f35b48a8df3b9a52ecdbc_163666_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/19_huf71818ce818f35b48a8df3b9a52ecdbc_163666_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..0b54ed7 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/19_huf71818ce818f35b48a8df3b9a52ecdbc_163666_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/1_10356200995465040671.json b/src/resources/_gen/images/posts/lazy-summer/gallery/1_10356200995465040671.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/1_10356200995465040671.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/1_hu55e24b817882a8bdc351185f3fce38ac_213786_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/1_hu55e24b817882a8bdc351185f3fce38ac_213786_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..f9d9195 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/1_hu55e24b817882a8bdc351185f3fce38ac_213786_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/1_hu55e24b817882a8bdc351185f3fce38ac_213786_b7906db26a4591ce976f7290204b6f89.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/1_hu55e24b817882a8bdc351185f3fce38ac_213786_b7906db26a4591ce976f7290204b6f89.jpg new file mode 100644 index 0000000..ed85c70 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/1_hu55e24b817882a8bdc351185f3fce38ac_213786_b7906db26a4591ce976f7290204b6f89.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/20_4846922027852131315.json b/src/resources/_gen/images/posts/lazy-summer/gallery/20_4846922027852131315.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/20_4846922027852131315.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/20_hua4607f52c3cc0638490f1a028973ebab_341674_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/20_hua4607f52c3cc0638490f1a028973ebab_341674_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..00b2863 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/20_hua4607f52c3cc0638490f1a028973ebab_341674_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/20_hua4607f52c3cc0638490f1a028973ebab_341674_e6d87b030f10e09378406cc1be4a3a4f.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/20_hua4607f52c3cc0638490f1a028973ebab_341674_e6d87b030f10e09378406cc1be4a3a4f.jpg new file mode 100644 index 0000000..48ae1a8 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/20_hua4607f52c3cc0638490f1a028973ebab_341674_e6d87b030f10e09378406cc1be4a3a4f.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/2_2677898251415631342.json b/src/resources/_gen/images/posts/lazy-summer/gallery/2_2677898251415631342.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/2_2677898251415631342.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/2_hu8746df48e62d6c4c083f75256ad0d24d_163145_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/2_hu8746df48e62d6c4c083f75256ad0d24d_163145_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..c731b97 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/2_hu8746df48e62d6c4c083f75256ad0d24d_163145_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/2_hu8746df48e62d6c4c083f75256ad0d24d_163145_f5e2538f828c9d0559ef472f4361f0ef.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/2_hu8746df48e62d6c4c083f75256ad0d24d_163145_f5e2538f828c9d0559ef472f4361f0ef.jpg new file mode 100644 index 0000000..768c55e Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/2_hu8746df48e62d6c4c083f75256ad0d24d_163145_f5e2538f828c9d0559ef472f4361f0ef.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/3_3774987806653364015.json b/src/resources/_gen/images/posts/lazy-summer/gallery/3_3774987806653364015.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/3_3774987806653364015.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/3_huad418d6c218f4505d38c6567545a4f9d_148906_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/3_huad418d6c218f4505d38c6567545a4f9d_148906_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..b46a2fc Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/3_huad418d6c218f4505d38c6567545a4f9d_148906_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/3_huad418d6c218f4505d38c6567545a4f9d_148906_c8cc38e80c775412d4cf33c218c27cba.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/3_huad418d6c218f4505d38c6567545a4f9d_148906_c8cc38e80c775412d4cf33c218c27cba.jpg new file mode 100644 index 0000000..c6ae4d4 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/3_huad418d6c218f4505d38c6567545a4f9d_148906_c8cc38e80c775412d4cf33c218c27cba.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/4_1155274053709823457.json b/src/resources/_gen/images/posts/lazy-summer/gallery/4_1155274053709823457.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/4_1155274053709823457.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/4_hua95a0999227bb81fc72ab8702e233b2c_181343_59abe7b4eebb8bfc9d29eb00381ab4ad.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/4_hua95a0999227bb81fc72ab8702e233b2c_181343_59abe7b4eebb8bfc9d29eb00381ab4ad.jpg new file mode 100644 index 0000000..0ee4ded Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/4_hua95a0999227bb81fc72ab8702e233b2c_181343_59abe7b4eebb8bfc9d29eb00381ab4ad.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/4_hua95a0999227bb81fc72ab8702e233b2c_181343_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/4_hua95a0999227bb81fc72ab8702e233b2c_181343_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..cf5ba01 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/4_hua95a0999227bb81fc72ab8702e233b2c_181343_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/5_8306663107032736831.json b/src/resources/_gen/images/posts/lazy-summer/gallery/5_8306663107032736831.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/5_8306663107032736831.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/5_hu05e4ef8bda285d66ba7d2e2fe850b6a1_138000_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/5_hu05e4ef8bda285d66ba7d2e2fe850b6a1_138000_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..2b44d4b Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/5_hu05e4ef8bda285d66ba7d2e2fe850b6a1_138000_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/5_hu05e4ef8bda285d66ba7d2e2fe850b6a1_138000_73e8c96b98d775ead46bf3b8af8b0d82.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/5_hu05e4ef8bda285d66ba7d2e2fe850b6a1_138000_73e8c96b98d775ead46bf3b8af8b0d82.jpg new file mode 100644 index 0000000..161262f Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/5_hu05e4ef8bda285d66ba7d2e2fe850b6a1_138000_73e8c96b98d775ead46bf3b8af8b0d82.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/6_2057340787951051576.json b/src/resources/_gen/images/posts/lazy-summer/gallery/6_2057340787951051576.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/6_2057340787951051576.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/6_hu47039d94ba7933155f835c2a4e8d15c6_196519_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/6_hu47039d94ba7933155f835c2a4e8d15c6_196519_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..b52a357 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/6_hu47039d94ba7933155f835c2a4e8d15c6_196519_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/6_hu47039d94ba7933155f835c2a4e8d15c6_196519_c6e1254194df6938610d7934ff4e9361.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/6_hu47039d94ba7933155f835c2a4e8d15c6_196519_c6e1254194df6938610d7934ff4e9361.jpg new file mode 100644 index 0000000..eb07ce5 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/6_hu47039d94ba7933155f835c2a4e8d15c6_196519_c6e1254194df6938610d7934ff4e9361.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/7_1779127309759365730.json b/src/resources/_gen/images/posts/lazy-summer/gallery/7_1779127309759365730.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/7_1779127309759365730.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/7_hu242023f163b9cb034503189446fcba6e_389238_441ea80f3c1d9d3ba2311fb8bd0da981.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/7_hu242023f163b9cb034503189446fcba6e_389238_441ea80f3c1d9d3ba2311fb8bd0da981.jpg new file mode 100644 index 0000000..1e3f1a1 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/7_hu242023f163b9cb034503189446fcba6e_389238_441ea80f3c1d9d3ba2311fb8bd0da981.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/7_hu242023f163b9cb034503189446fcba6e_389238_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/7_hu242023f163b9cb034503189446fcba6e_389238_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..45fb623 Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/7_hu242023f163b9cb034503189446fcba6e_389238_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/8_16280807446024759666.json b/src/resources/_gen/images/posts/lazy-summer/gallery/8_16280807446024759666.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/8_16280807446024759666.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/8_hu1524ac3c5dd57dd83a664cdc458aa3d2_347799_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/8_hu1524ac3c5dd57dd83a664cdc458aa3d2_347799_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..9b229db Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/8_hu1524ac3c5dd57dd83a664cdc458aa3d2_347799_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/8_hu1524ac3c5dd57dd83a664cdc458aa3d2_347799_9f6f07beb32c589b9623d70f50d301fa.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/8_hu1524ac3c5dd57dd83a664cdc458aa3d2_347799_9f6f07beb32c589b9623d70f50d301fa.jpg new file mode 100644 index 0000000..a5206ac Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/8_hu1524ac3c5dd57dd83a664cdc458aa3d2_347799_9f6f07beb32c589b9623d70f50d301fa.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/9_3623233093655540535.json b/src/resources/_gen/images/posts/lazy-summer/gallery/9_3623233093655540535.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/lazy-summer/gallery/9_3623233093655540535.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/9_hu4faaaeaa83ff802cba93a3d08ced9a29_373484_2d1f037fc10f0e15741f6fbd86edffa9.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/9_hu4faaaeaa83ff802cba93a3d08ced9a29_373484_2d1f037fc10f0e15741f6fbd86edffa9.jpg new file mode 100644 index 0000000..99355cf Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/9_hu4faaaeaa83ff802cba93a3d08ced9a29_373484_2d1f037fc10f0e15741f6fbd86edffa9.jpg differ diff --git a/src/resources/_gen/images/posts/lazy-summer/gallery/9_hu4faaaeaa83ff802cba93a3d08ced9a29_373484_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/lazy-summer/gallery/9_hu4faaaeaa83ff802cba93a3d08ced9a29_373484_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..521502c Binary files /dev/null and b/src/resources/_gen/images/posts/lazy-summer/gallery/9_hu4faaaeaa83ff802cba93a3d08ced9a29_373484_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/0_12003568618266380924.json b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/0_12003568618266380924.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/0_12003568618266380924.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/0_hu241915f69f324ea3b8e959697cc5c661_215220_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/0_hu241915f69f324ea3b8e959697cc5c661_215220_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..cc5813d Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/0_hu241915f69f324ea3b8e959697cc5c661_215220_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/0_hu241915f69f324ea3b8e959697cc5c661_215220_8997f5005d61be0b11ddb503ebf92b15.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/0_hu241915f69f324ea3b8e959697cc5c661_215220_8997f5005d61be0b11ddb503ebf92b15.jpg new file mode 100644 index 0000000..df496dc Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/0_hu241915f69f324ea3b8e959697cc5c661_215220_8997f5005d61be0b11ddb503ebf92b15.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/1_15434077189497542689.json b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/1_15434077189497542689.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/1_15434077189497542689.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/1_hu9f83be7f23cca4aa3b203c370a83843b_179785_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/1_hu9f83be7f23cca4aa3b203c370a83843b_179785_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..4d25281 Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/1_hu9f83be7f23cca4aa3b203c370a83843b_179785_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/1_hu9f83be7f23cca4aa3b203c370a83843b_179785_d65cc7b8ec9552b05e4bc932627d3e20.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/1_hu9f83be7f23cca4aa3b203c370a83843b_179785_d65cc7b8ec9552b05e4bc932627d3e20.jpg new file mode 100644 index 0000000..fb37011 Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/1_hu9f83be7f23cca4aa3b203c370a83843b_179785_d65cc7b8ec9552b05e4bc932627d3e20.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/2_1369601799788787489.json b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/2_1369601799788787489.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/2_1369601799788787489.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/2_hu02326bb09892813fb374f7b3dd2a7122_229388_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/2_hu02326bb09892813fb374f7b3dd2a7122_229388_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..a26ee4e Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/2_hu02326bb09892813fb374f7b3dd2a7122_229388_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/2_hu02326bb09892813fb374f7b3dd2a7122_229388_6e6dade569e5fdb5ba6b37a20943d445.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/2_hu02326bb09892813fb374f7b3dd2a7122_229388_6e6dade569e5fdb5ba6b37a20943d445.jpg new file mode 100644 index 0000000..45a51b4 Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/2_hu02326bb09892813fb374f7b3dd2a7122_229388_6e6dade569e5fdb5ba6b37a20943d445.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/3_1099391948206504701.json b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/3_1099391948206504701.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/3_1099391948206504701.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/3_huadad41939994a4ef8fe9ad5741fbc601_256045_22932dcf8c9f806b80326b263a497ed1.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/3_huadad41939994a4ef8fe9ad5741fbc601_256045_22932dcf8c9f806b80326b263a497ed1.jpg new file mode 100644 index 0000000..3f395c9 Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/3_huadad41939994a4ef8fe9ad5741fbc601_256045_22932dcf8c9f806b80326b263a497ed1.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/3_huadad41939994a4ef8fe9ad5741fbc601_256045_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/3_huadad41939994a4ef8fe9ad5741fbc601_256045_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..87740c8 Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/3_huadad41939994a4ef8fe9ad5741fbc601_256045_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/4_5835243169553804839.json b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/4_5835243169553804839.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/4_5835243169553804839.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/4_hu20cb8430c2cabf8ae663e5a8386ff4e0_197684_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/4_hu20cb8430c2cabf8ae663e5a8386ff4e0_197684_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..184c823 Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/4_hu20cb8430c2cabf8ae663e5a8386ff4e0_197684_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/4_hu20cb8430c2cabf8ae663e5a8386ff4e0_197684_a201f6f463e39653e3d83972bb83e4f4.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/4_hu20cb8430c2cabf8ae663e5a8386ff4e0_197684_a201f6f463e39653e3d83972bb83e4f4.jpg new file mode 100644 index 0000000..313b91c Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/4_hu20cb8430c2cabf8ae663e5a8386ff4e0_197684_a201f6f463e39653e3d83972bb83e4f4.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/5_15830273850576042776.json b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/5_15830273850576042776.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/5_15830273850576042776.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/5_hub7134565acc1de84f9f40425e792c45f_195244_0ba845deb7084aa861ee960fff71cfdb.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/5_hub7134565acc1de84f9f40425e792c45f_195244_0ba845deb7084aa861ee960fff71cfdb.jpg new file mode 100644 index 0000000..1d6473b Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/5_hub7134565acc1de84f9f40425e792c45f_195244_0ba845deb7084aa861ee960fff71cfdb.jpg differ diff --git a/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/5_hub7134565acc1de84f9f40425e792c45f_195244_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/5_hub7134565acc1de84f9f40425e792c45f_195244_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..05b617b Binary files /dev/null and b/src/resources/_gen/images/posts/new-monitor-acer-g276hla/gallery/5_hub7134565acc1de84f9f40425e792c45f_195244_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/0_6407891107764303174.json b/src/resources/_gen/images/posts/pycones-2015/gallery/0_6407891107764303174.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/0_6407891107764303174.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/0_hu54519c6757e6321992efe4f4c53743f9_207923_090c75ee5112034c652deab05d9485b1.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/0_hu54519c6757e6321992efe4f4c53743f9_207923_090c75ee5112034c652deab05d9485b1.jpg new file mode 100644 index 0000000..8b3f68c Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/0_hu54519c6757e6321992efe4f4c53743f9_207923_090c75ee5112034c652deab05d9485b1.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/0_hu54519c6757e6321992efe4f4c53743f9_207923_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/0_hu54519c6757e6321992efe4f4c53743f9_207923_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..e0e5f2e Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/0_hu54519c6757e6321992efe4f4c53743f9_207923_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/10_5923254932184830627.json b/src/resources/_gen/images/posts/pycones-2015/gallery/10_5923254932184830627.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/10_5923254932184830627.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/10_hu0589d82e265b071e8c60bfec4760e1a6_213087_5aeb26bb22c50e1a5e81bfedb5ada5a6.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/10_hu0589d82e265b071e8c60bfec4760e1a6_213087_5aeb26bb22c50e1a5e81bfedb5ada5a6.jpg new file mode 100644 index 0000000..8ac12fb Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/10_hu0589d82e265b071e8c60bfec4760e1a6_213087_5aeb26bb22c50e1a5e81bfedb5ada5a6.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/10_hu0589d82e265b071e8c60bfec4760e1a6_213087_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/10_hu0589d82e265b071e8c60bfec4760e1a6_213087_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..3edefc3 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/10_hu0589d82e265b071e8c60bfec4760e1a6_213087_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/11_11424483052873418705.json b/src/resources/_gen/images/posts/pycones-2015/gallery/11_11424483052873418705.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/11_11424483052873418705.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/11_hub27a1a2d96e42c0c908f15fe57cfe256_236766_3132c15370e018421e4c92dff0263ac7.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/11_hub27a1a2d96e42c0c908f15fe57cfe256_236766_3132c15370e018421e4c92dff0263ac7.jpg new file mode 100644 index 0000000..265a97f Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/11_hub27a1a2d96e42c0c908f15fe57cfe256_236766_3132c15370e018421e4c92dff0263ac7.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/11_hub27a1a2d96e42c0c908f15fe57cfe256_236766_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/11_hub27a1a2d96e42c0c908f15fe57cfe256_236766_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..5b76d3d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/11_hub27a1a2d96e42c0c908f15fe57cfe256_236766_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/12_18383679857442506057.json b/src/resources/_gen/images/posts/pycones-2015/gallery/12_18383679857442506057.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/12_18383679857442506057.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/12_hu415afaa8db9f597ba9170d2ec8460f41_168276_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/12_hu415afaa8db9f597ba9170d2ec8460f41_168276_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..feeca4f Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/12_hu415afaa8db9f597ba9170d2ec8460f41_168276_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/12_hu415afaa8db9f597ba9170d2ec8460f41_168276_eec101845791b396d9616213beb7fa6d.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/12_hu415afaa8db9f597ba9170d2ec8460f41_168276_eec101845791b396d9616213beb7fa6d.jpg new file mode 100644 index 0000000..4d5bfe7 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/12_hu415afaa8db9f597ba9170d2ec8460f41_168276_eec101845791b396d9616213beb7fa6d.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/13_11516240076029516894.json b/src/resources/_gen/images/posts/pycones-2015/gallery/13_11516240076029516894.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/13_11516240076029516894.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/13_hu3a05d244130cb507287a4b52bdd43cec_228590_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/13_hu3a05d244130cb507287a4b52bdd43cec_228590_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..4e02dbe Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/13_hu3a05d244130cb507287a4b52bdd43cec_228590_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/13_hu3a05d244130cb507287a4b52bdd43cec_228590_f92fb01e8b83a7b2fbb5e29e442fc420.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/13_hu3a05d244130cb507287a4b52bdd43cec_228590_f92fb01e8b83a7b2fbb5e29e442fc420.jpg new file mode 100644 index 0000000..4baf0f5 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/13_hu3a05d244130cb507287a4b52bdd43cec_228590_f92fb01e8b83a7b2fbb5e29e442fc420.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/14_8934699809560152849.json b/src/resources/_gen/images/posts/pycones-2015/gallery/14_8934699809560152849.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/14_8934699809560152849.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/14_hu08f089d05889016cf744884dd5a86791_166098_2e146033c51de21f407bd92664143b7d.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/14_hu08f089d05889016cf744884dd5a86791_166098_2e146033c51de21f407bd92664143b7d.jpg new file mode 100644 index 0000000..6a90d63 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/14_hu08f089d05889016cf744884dd5a86791_166098_2e146033c51de21f407bd92664143b7d.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/14_hu08f089d05889016cf744884dd5a86791_166098_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/14_hu08f089d05889016cf744884dd5a86791_166098_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..3dde84e Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/14_hu08f089d05889016cf744884dd5a86791_166098_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/15_16052802994018388647.json b/src/resources/_gen/images/posts/pycones-2015/gallery/15_16052802994018388647.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/15_16052802994018388647.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/15_hubf1eaef9cdaa33214b5752795eace030_168142_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/15_hubf1eaef9cdaa33214b5752795eace030_168142_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..47c9433 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/15_hubf1eaef9cdaa33214b5752795eace030_168142_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/15_hubf1eaef9cdaa33214b5752795eace030_168142_cd2fff2a709192cf5b5543a29ce6d100.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/15_hubf1eaef9cdaa33214b5752795eace030_168142_cd2fff2a709192cf5b5543a29ce6d100.jpg new file mode 100644 index 0000000..1767d24 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/15_hubf1eaef9cdaa33214b5752795eace030_168142_cd2fff2a709192cf5b5543a29ce6d100.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/16_7571942764884083773.json b/src/resources/_gen/images/posts/pycones-2015/gallery/16_7571942764884083773.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/16_7571942764884083773.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/16_hu2f468ac3ee91971df9889188d62ed9bc_165597_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/16_hu2f468ac3ee91971df9889188d62ed9bc_165597_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..e7236c7 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/16_hu2f468ac3ee91971df9889188d62ed9bc_165597_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/16_hu2f468ac3ee91971df9889188d62ed9bc_165597_b5274ec6785b6ced365c61ca520adedf.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/16_hu2f468ac3ee91971df9889188d62ed9bc_165597_b5274ec6785b6ced365c61ca520adedf.jpg new file mode 100644 index 0000000..4330df5 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/16_hu2f468ac3ee91971df9889188d62ed9bc_165597_b5274ec6785b6ced365c61ca520adedf.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/17_10584072443146593500.json b/src/resources/_gen/images/posts/pycones-2015/gallery/17_10584072443146593500.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/17_10584072443146593500.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/17_huef35fe6df9f44f2551a205b6d2aa8ed4_218370_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/17_huef35fe6df9f44f2551a205b6d2aa8ed4_218370_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..c79610b Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/17_huef35fe6df9f44f2551a205b6d2aa8ed4_218370_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/17_huef35fe6df9f44f2551a205b6d2aa8ed4_218370_aaedf623dbef7fb9f437050a3bceb55b.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/17_huef35fe6df9f44f2551a205b6d2aa8ed4_218370_aaedf623dbef7fb9f437050a3bceb55b.jpg new file mode 100644 index 0000000..4ab4e21 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/17_huef35fe6df9f44f2551a205b6d2aa8ed4_218370_aaedf623dbef7fb9f437050a3bceb55b.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/18_14097150707768090989.json b/src/resources/_gen/images/posts/pycones-2015/gallery/18_14097150707768090989.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/18_14097150707768090989.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/18_huc5d1302b1f3d26680f9a159e1990b516_288672_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/18_huc5d1302b1f3d26680f9a159e1990b516_288672_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..20eba54 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/18_huc5d1302b1f3d26680f9a159e1990b516_288672_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/18_huc5d1302b1f3d26680f9a159e1990b516_288672_a2a306bf157afda35ae90a8d9baa47a5.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/18_huc5d1302b1f3d26680f9a159e1990b516_288672_a2a306bf157afda35ae90a8d9baa47a5.jpg new file mode 100644 index 0000000..e322073 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/18_huc5d1302b1f3d26680f9a159e1990b516_288672_a2a306bf157afda35ae90a8d9baa47a5.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/19_10339331887317504427.json b/src/resources/_gen/images/posts/pycones-2015/gallery/19_10339331887317504427.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/19_10339331887317504427.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/19_hu9e8f9b87d3e9717749f336f20dd472dd_258616_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/19_hu9e8f9b87d3e9717749f336f20dd472dd_258616_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..6eb8fb8 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/19_hu9e8f9b87d3e9717749f336f20dd472dd_258616_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/19_hu9e8f9b87d3e9717749f336f20dd472dd_258616_750773e6f1416d2f856f70c99cbce29b.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/19_hu9e8f9b87d3e9717749f336f20dd472dd_258616_750773e6f1416d2f856f70c99cbce29b.jpg new file mode 100644 index 0000000..cf7f984 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/19_hu9e8f9b87d3e9717749f336f20dd472dd_258616_750773e6f1416d2f856f70c99cbce29b.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/1_18047899977523128934.json b/src/resources/_gen/images/posts/pycones-2015/gallery/1_18047899977523128934.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/1_18047899977523128934.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/1_huf39a148ec550d94f2b7faf698513ef96_183967_3dedff23ee1dc1fd73328cd7809e6af2.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/1_huf39a148ec550d94f2b7faf698513ef96_183967_3dedff23ee1dc1fd73328cd7809e6af2.jpg new file mode 100644 index 0000000..6ad2530 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/1_huf39a148ec550d94f2b7faf698513ef96_183967_3dedff23ee1dc1fd73328cd7809e6af2.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/1_huf39a148ec550d94f2b7faf698513ef96_183967_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/1_huf39a148ec550d94f2b7faf698513ef96_183967_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..dfdc4e0 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/1_huf39a148ec550d94f2b7faf698513ef96_183967_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/20_6221170848009959606.json b/src/resources/_gen/images/posts/pycones-2015/gallery/20_6221170848009959606.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/20_6221170848009959606.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/20_hud09e4330b6011ff36912397babb8da84_154302_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/20_hud09e4330b6011ff36912397babb8da84_154302_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..2b95a82 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/20_hud09e4330b6011ff36912397babb8da84_154302_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/20_hud09e4330b6011ff36912397babb8da84_154302_81101ca3c3cf7f6d13409ef778201478.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/20_hud09e4330b6011ff36912397babb8da84_154302_81101ca3c3cf7f6d13409ef778201478.jpg new file mode 100644 index 0000000..ca6f4ad Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/20_hud09e4330b6011ff36912397babb8da84_154302_81101ca3c3cf7f6d13409ef778201478.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/21_13041390231487517140.json b/src/resources/_gen/images/posts/pycones-2015/gallery/21_13041390231487517140.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/21_13041390231487517140.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/21_hu75853befb4e36fb6a54cf5e462189939_192512_43278a2f1ff96932268fa46fc6a0b49e.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/21_hu75853befb4e36fb6a54cf5e462189939_192512_43278a2f1ff96932268fa46fc6a0b49e.jpg new file mode 100644 index 0000000..f90bf44 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/21_hu75853befb4e36fb6a54cf5e462189939_192512_43278a2f1ff96932268fa46fc6a0b49e.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/21_hu75853befb4e36fb6a54cf5e462189939_192512_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/21_hu75853befb4e36fb6a54cf5e462189939_192512_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..db8214c Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/21_hu75853befb4e36fb6a54cf5e462189939_192512_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/22_4921327575355694435.json b/src/resources/_gen/images/posts/pycones-2015/gallery/22_4921327575355694435.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/22_4921327575355694435.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/22_hubeb0bdf750bd9e96425d7a32d3f135c6_189612_24f7a2b3c385b0508849ce0beb0a0ebf.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/22_hubeb0bdf750bd9e96425d7a32d3f135c6_189612_24f7a2b3c385b0508849ce0beb0a0ebf.jpg new file mode 100644 index 0000000..a64d696 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/22_hubeb0bdf750bd9e96425d7a32d3f135c6_189612_24f7a2b3c385b0508849ce0beb0a0ebf.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/22_hubeb0bdf750bd9e96425d7a32d3f135c6_189612_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/22_hubeb0bdf750bd9e96425d7a32d3f135c6_189612_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..e46670c Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/22_hubeb0bdf750bd9e96425d7a32d3f135c6_189612_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/23_16229672396681330755.json b/src/resources/_gen/images/posts/pycones-2015/gallery/23_16229672396681330755.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/23_16229672396681330755.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/23_hue7382dc1a3db28fba982f0fd14f5e484_189147_08edad1047529f0eef7eb206bbe3c521.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/23_hue7382dc1a3db28fba982f0fd14f5e484_189147_08edad1047529f0eef7eb206bbe3c521.jpg new file mode 100644 index 0000000..0f9e339 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/23_hue7382dc1a3db28fba982f0fd14f5e484_189147_08edad1047529f0eef7eb206bbe3c521.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/23_hue7382dc1a3db28fba982f0fd14f5e484_189147_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/23_hue7382dc1a3db28fba982f0fd14f5e484_189147_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..a34b2b5 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/23_hue7382dc1a3db28fba982f0fd14f5e484_189147_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/24_8979705640331783875.json b/src/resources/_gen/images/posts/pycones-2015/gallery/24_8979705640331783875.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/24_8979705640331783875.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/24_hu1cb48989658a93674cfbf05aec16ebaf_202655_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/24_hu1cb48989658a93674cfbf05aec16ebaf_202655_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..16d2e0b Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/24_hu1cb48989658a93674cfbf05aec16ebaf_202655_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/24_hu1cb48989658a93674cfbf05aec16ebaf_202655_a6fbbd63195129d09dbc21b694371910.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/24_hu1cb48989658a93674cfbf05aec16ebaf_202655_a6fbbd63195129d09dbc21b694371910.jpg new file mode 100644 index 0000000..1ceca77 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/24_hu1cb48989658a93674cfbf05aec16ebaf_202655_a6fbbd63195129d09dbc21b694371910.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/25_8786137707558815101.json b/src/resources/_gen/images/posts/pycones-2015/gallery/25_8786137707558815101.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/25_8786137707558815101.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/25_hu3da679d7253b175798f7de78b580dfd5_207661_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/25_hu3da679d7253b175798f7de78b580dfd5_207661_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..c25d2dc Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/25_hu3da679d7253b175798f7de78b580dfd5_207661_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/25_hu3da679d7253b175798f7de78b580dfd5_207661_c9a46114aa87b35ab04fa33613329cb2.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/25_hu3da679d7253b175798f7de78b580dfd5_207661_c9a46114aa87b35ab04fa33613329cb2.jpg new file mode 100644 index 0000000..930f200 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/25_hu3da679d7253b175798f7de78b580dfd5_207661_c9a46114aa87b35ab04fa33613329cb2.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/26_13259433016475835956.json b/src/resources/_gen/images/posts/pycones-2015/gallery/26_13259433016475835956.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/26_13259433016475835956.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/26_hua724685a872a3aca4f7da86c21a0d699_228028_1f5921b4dd60a50bda57b8eea9fd521b.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/26_hua724685a872a3aca4f7da86c21a0d699_228028_1f5921b4dd60a50bda57b8eea9fd521b.jpg new file mode 100644 index 0000000..86b17a8 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/26_hua724685a872a3aca4f7da86c21a0d699_228028_1f5921b4dd60a50bda57b8eea9fd521b.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/26_hua724685a872a3aca4f7da86c21a0d699_228028_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/26_hua724685a872a3aca4f7da86c21a0d699_228028_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..c16edbf Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/26_hua724685a872a3aca4f7da86c21a0d699_228028_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/27_14400975570764889675.json b/src/resources/_gen/images/posts/pycones-2015/gallery/27_14400975570764889675.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/27_14400975570764889675.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/27_hub71bc4ac02e301d97692b6502fa76f38_251099_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/27_hub71bc4ac02e301d97692b6502fa76f38_251099_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..8b425ee Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/27_hub71bc4ac02e301d97692b6502fa76f38_251099_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/27_hub71bc4ac02e301d97692b6502fa76f38_251099_f025364ccf802071fb4d3eb47b80d931.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/27_hub71bc4ac02e301d97692b6502fa76f38_251099_f025364ccf802071fb4d3eb47b80d931.jpg new file mode 100644 index 0000000..d769c72 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/27_hub71bc4ac02e301d97692b6502fa76f38_251099_f025364ccf802071fb4d3eb47b80d931.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/28_3550607663515401766.json b/src/resources/_gen/images/posts/pycones-2015/gallery/28_3550607663515401766.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/28_3550607663515401766.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/28_hu7acf923c835f3e5676bd784b523876c3_258135_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/28_hu7acf923c835f3e5676bd784b523876c3_258135_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..12efdf2 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/28_hu7acf923c835f3e5676bd784b523876c3_258135_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/28_hu7acf923c835f3e5676bd784b523876c3_258135_ae2f37bd23699d70f1dcd29c4e9d8a70.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/28_hu7acf923c835f3e5676bd784b523876c3_258135_ae2f37bd23699d70f1dcd29c4e9d8a70.jpg new file mode 100644 index 0000000..87d47c0 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/28_hu7acf923c835f3e5676bd784b523876c3_258135_ae2f37bd23699d70f1dcd29c4e9d8a70.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/29_10689234258789239449.json b/src/resources/_gen/images/posts/pycones-2015/gallery/29_10689234258789239449.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/29_10689234258789239449.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/29_hu4d51364be17cbb2399fc63daca00fac6_206762_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/29_hu4d51364be17cbb2399fc63daca00fac6_206762_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..fa39ee3 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/29_hu4d51364be17cbb2399fc63daca00fac6_206762_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/29_hu4d51364be17cbb2399fc63daca00fac6_206762_bd7eea512ada37b817e3bba41bdfc138.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/29_hu4d51364be17cbb2399fc63daca00fac6_206762_bd7eea512ada37b817e3bba41bdfc138.jpg new file mode 100644 index 0000000..8dc6332 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/29_hu4d51364be17cbb2399fc63daca00fac6_206762_bd7eea512ada37b817e3bba41bdfc138.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/2_7414014571819818227.json b/src/resources/_gen/images/posts/pycones-2015/gallery/2_7414014571819818227.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/2_7414014571819818227.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/2_huf706a760ae9e877cf6f0a5f5434ad925_219297_31df8cb4793e1cb0c0dcab76d2cac059.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/2_huf706a760ae9e877cf6f0a5f5434ad925_219297_31df8cb4793e1cb0c0dcab76d2cac059.jpg new file mode 100644 index 0000000..c9887e5 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/2_huf706a760ae9e877cf6f0a5f5434ad925_219297_31df8cb4793e1cb0c0dcab76d2cac059.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/2_huf706a760ae9e877cf6f0a5f5434ad925_219297_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/2_huf706a760ae9e877cf6f0a5f5434ad925_219297_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..a86392e Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/2_huf706a760ae9e877cf6f0a5f5434ad925_219297_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/30_13693304747120391786.json b/src/resources/_gen/images/posts/pycones-2015/gallery/30_13693304747120391786.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/30_13693304747120391786.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/30_huc703f18f98914b82bd5e92cfffe12aef_164025_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/30_huc703f18f98914b82bd5e92cfffe12aef_164025_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..33a8962 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/30_huc703f18f98914b82bd5e92cfffe12aef_164025_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/30_huc703f18f98914b82bd5e92cfffe12aef_164025_60c8953e9e9195a17db1e3c51b65371f.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/30_huc703f18f98914b82bd5e92cfffe12aef_164025_60c8953e9e9195a17db1e3c51b65371f.jpg new file mode 100644 index 0000000..645776b Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/30_huc703f18f98914b82bd5e92cfffe12aef_164025_60c8953e9e9195a17db1e3c51b65371f.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/31_4382752384048828907.json b/src/resources/_gen/images/posts/pycones-2015/gallery/31_4382752384048828907.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/31_4382752384048828907.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/31_hu8119feecce8542ff3d99437938ac3ddc_178110_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/31_hu8119feecce8542ff3d99437938ac3ddc_178110_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..3aedb5f Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/31_hu8119feecce8542ff3d99437938ac3ddc_178110_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/31_hu8119feecce8542ff3d99437938ac3ddc_178110_6dce1c18f150f22179a3c123065bab63.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/31_hu8119feecce8542ff3d99437938ac3ddc_178110_6dce1c18f150f22179a3c123065bab63.jpg new file mode 100644 index 0000000..7bd86fa Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/31_hu8119feecce8542ff3d99437938ac3ddc_178110_6dce1c18f150f22179a3c123065bab63.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/32_16387516273204269383.json b/src/resources/_gen/images/posts/pycones-2015/gallery/32_16387516273204269383.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/32_16387516273204269383.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/32_huebe1a5d4bccbbca71db44f9af28ca0a4_157961_55b9c4c0acd8ecb0d542e01886481c9a.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/32_huebe1a5d4bccbbca71db44f9af28ca0a4_157961_55b9c4c0acd8ecb0d542e01886481c9a.jpg new file mode 100644 index 0000000..061edfc Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/32_huebe1a5d4bccbbca71db44f9af28ca0a4_157961_55b9c4c0acd8ecb0d542e01886481c9a.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/32_huebe1a5d4bccbbca71db44f9af28ca0a4_157961_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/32_huebe1a5d4bccbbca71db44f9af28ca0a4_157961_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..53ab083 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/32_huebe1a5d4bccbbca71db44f9af28ca0a4_157961_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/33_12238674276110719325.json b/src/resources/_gen/images/posts/pycones-2015/gallery/33_12238674276110719325.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/33_12238674276110719325.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/33_hu9a07fd34987189cccc4cff59581fd747_181088_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/33_hu9a07fd34987189cccc4cff59581fd747_181088_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..2cbeae6 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/33_hu9a07fd34987189cccc4cff59581fd747_181088_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/33_hu9a07fd34987189cccc4cff59581fd747_181088_a55f410aa3d2e958dde131c374890511.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/33_hu9a07fd34987189cccc4cff59581fd747_181088_a55f410aa3d2e958dde131c374890511.jpg new file mode 100644 index 0000000..4963f1d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/33_hu9a07fd34987189cccc4cff59581fd747_181088_a55f410aa3d2e958dde131c374890511.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/34_17252120482618166856.json b/src/resources/_gen/images/posts/pycones-2015/gallery/34_17252120482618166856.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/34_17252120482618166856.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/34_hu2257d63499eb4702228c3b24101a5de6_238920_4e4f3e21772b166eb15263446d4c87d6.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/34_hu2257d63499eb4702228c3b24101a5de6_238920_4e4f3e21772b166eb15263446d4c87d6.jpg new file mode 100644 index 0000000..226c5cf Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/34_hu2257d63499eb4702228c3b24101a5de6_238920_4e4f3e21772b166eb15263446d4c87d6.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/34_hu2257d63499eb4702228c3b24101a5de6_238920_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/34_hu2257d63499eb4702228c3b24101a5de6_238920_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..080465e Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/34_hu2257d63499eb4702228c3b24101a5de6_238920_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/35_14178591889087715946.json b/src/resources/_gen/images/posts/pycones-2015/gallery/35_14178591889087715946.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/35_14178591889087715946.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/35_hu1f84634bd1cefd1800ddb7ca49aff19d_236852_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/35_hu1f84634bd1cefd1800ddb7ca49aff19d_236852_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..9ae4fd3 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/35_hu1f84634bd1cefd1800ddb7ca49aff19d_236852_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/35_hu1f84634bd1cefd1800ddb7ca49aff19d_236852_f737766079fb7d91ed01b3804f867829.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/35_hu1f84634bd1cefd1800ddb7ca49aff19d_236852_f737766079fb7d91ed01b3804f867829.jpg new file mode 100644 index 0000000..11deb6d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/35_hu1f84634bd1cefd1800ddb7ca49aff19d_236852_f737766079fb7d91ed01b3804f867829.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/36_14067723302091151496.json b/src/resources/_gen/images/posts/pycones-2015/gallery/36_14067723302091151496.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/36_14067723302091151496.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/36_hu076e2b61601df6d5d73dc07e6398c461_318779_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/36_hu076e2b61601df6d5d73dc07e6398c461_318779_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..bbc2d9f Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/36_hu076e2b61601df6d5d73dc07e6398c461_318779_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/36_hu076e2b61601df6d5d73dc07e6398c461_318779_b3479001c96f7acb709fa5abb7a73f03.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/36_hu076e2b61601df6d5d73dc07e6398c461_318779_b3479001c96f7acb709fa5abb7a73f03.jpg new file mode 100644 index 0000000..b987f73 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/36_hu076e2b61601df6d5d73dc07e6398c461_318779_b3479001c96f7acb709fa5abb7a73f03.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/37_17254969010466178679.json b/src/resources/_gen/images/posts/pycones-2015/gallery/37_17254969010466178679.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/37_17254969010466178679.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/37_hud289ef424b548079d30f312283bef83a_169640_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/37_hud289ef424b548079d30f312283bef83a_169640_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..e1dbfac Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/37_hud289ef424b548079d30f312283bef83a_169640_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/37_hud289ef424b548079d30f312283bef83a_169640_ee1e8fd9cf9bc81a835777251bb446a1.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/37_hud289ef424b548079d30f312283bef83a_169640_ee1e8fd9cf9bc81a835777251bb446a1.jpg new file mode 100644 index 0000000..3f2790b Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/37_hud289ef424b548079d30f312283bef83a_169640_ee1e8fd9cf9bc81a835777251bb446a1.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/38_6333667266239365148.json b/src/resources/_gen/images/posts/pycones-2015/gallery/38_6333667266239365148.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/38_6333667266239365148.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/38_hubfa61c6d919032cc0af258940cb128a4_182377_03ca5f7a376cd2caa1da63fd886addff.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/38_hubfa61c6d919032cc0af258940cb128a4_182377_03ca5f7a376cd2caa1da63fd886addff.jpg new file mode 100644 index 0000000..844ffcd Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/38_hubfa61c6d919032cc0af258940cb128a4_182377_03ca5f7a376cd2caa1da63fd886addff.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/38_hubfa61c6d919032cc0af258940cb128a4_182377_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/38_hubfa61c6d919032cc0af258940cb128a4_182377_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..7a4385c Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/38_hubfa61c6d919032cc0af258940cb128a4_182377_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/39_4854147153456968256.json b/src/resources/_gen/images/posts/pycones-2015/gallery/39_4854147153456968256.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/39_4854147153456968256.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/39_hue2506af7140d5ff5c70db011b82396bf_172268_36ab51f94edbd21eebc889dd0c51a1ca.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/39_hue2506af7140d5ff5c70db011b82396bf_172268_36ab51f94edbd21eebc889dd0c51a1ca.jpg new file mode 100644 index 0000000..2dc2110 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/39_hue2506af7140d5ff5c70db011b82396bf_172268_36ab51f94edbd21eebc889dd0c51a1ca.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/39_hue2506af7140d5ff5c70db011b82396bf_172268_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/39_hue2506af7140d5ff5c70db011b82396bf_172268_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..250a10d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/39_hue2506af7140d5ff5c70db011b82396bf_172268_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/3_8695359682251765734.json b/src/resources/_gen/images/posts/pycones-2015/gallery/3_8695359682251765734.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/3_8695359682251765734.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/3_hu48cc40e6458ba03375fc071bcbf33965_211815_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/3_hu48cc40e6458ba03375fc071bcbf33965_211815_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..7cf9683 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/3_hu48cc40e6458ba03375fc071bcbf33965_211815_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/3_hu48cc40e6458ba03375fc071bcbf33965_211815_613d814b63ac3a54757102ed3e81a308.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/3_hu48cc40e6458ba03375fc071bcbf33965_211815_613d814b63ac3a54757102ed3e81a308.jpg new file mode 100644 index 0000000..4ad810a Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/3_hu48cc40e6458ba03375fc071bcbf33965_211815_613d814b63ac3a54757102ed3e81a308.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/40_13735976913620134418.json b/src/resources/_gen/images/posts/pycones-2015/gallery/40_13735976913620134418.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/40_13735976913620134418.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/40_huae58a3df987c14db11bd549d66be9dc0_210278_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/40_huae58a3df987c14db11bd549d66be9dc0_210278_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..a091703 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/40_huae58a3df987c14db11bd549d66be9dc0_210278_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/40_huae58a3df987c14db11bd549d66be9dc0_210278_d07097a22dea4e4e977f6207481cf9f9.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/40_huae58a3df987c14db11bd549d66be9dc0_210278_d07097a22dea4e4e977f6207481cf9f9.jpg new file mode 100644 index 0000000..e861f6c Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/40_huae58a3df987c14db11bd549d66be9dc0_210278_d07097a22dea4e4e977f6207481cf9f9.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/41_9394898954403790817.json b/src/resources/_gen/images/posts/pycones-2015/gallery/41_9394898954403790817.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/41_9394898954403790817.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/41_hu13112ef377fd4252654f387ed74a5911_182161_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/41_hu13112ef377fd4252654f387ed74a5911_182161_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..6d6c5c4 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/41_hu13112ef377fd4252654f387ed74a5911_182161_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/41_hu13112ef377fd4252654f387ed74a5911_182161_7bf06b7d792d9810e53e0f1720faa332.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/41_hu13112ef377fd4252654f387ed74a5911_182161_7bf06b7d792d9810e53e0f1720faa332.jpg new file mode 100644 index 0000000..6f12ed2 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/41_hu13112ef377fd4252654f387ed74a5911_182161_7bf06b7d792d9810e53e0f1720faa332.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/42_14310461835512467759.json b/src/resources/_gen/images/posts/pycones-2015/gallery/42_14310461835512467759.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/42_14310461835512467759.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/42_hu5ba0e7cb3255c03c984e5cac2f0ed14a_176521_0835e619b1608560e081aee9461c08c3.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/42_hu5ba0e7cb3255c03c984e5cac2f0ed14a_176521_0835e619b1608560e081aee9461c08c3.jpg new file mode 100644 index 0000000..4c1b25d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/42_hu5ba0e7cb3255c03c984e5cac2f0ed14a_176521_0835e619b1608560e081aee9461c08c3.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/42_hu5ba0e7cb3255c03c984e5cac2f0ed14a_176521_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/42_hu5ba0e7cb3255c03c984e5cac2f0ed14a_176521_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..d1e8b36 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/42_hu5ba0e7cb3255c03c984e5cac2f0ed14a_176521_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/43_14507512771970994069.json b/src/resources/_gen/images/posts/pycones-2015/gallery/43_14507512771970994069.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/43_14507512771970994069.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/43_hu6783989c41a7b55fcec31c5022ac8986_151678_2e34552ecc33c64b16e2e97683640ded.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/43_hu6783989c41a7b55fcec31c5022ac8986_151678_2e34552ecc33c64b16e2e97683640ded.jpg new file mode 100644 index 0000000..59724b6 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/43_hu6783989c41a7b55fcec31c5022ac8986_151678_2e34552ecc33c64b16e2e97683640ded.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/43_hu6783989c41a7b55fcec31c5022ac8986_151678_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/43_hu6783989c41a7b55fcec31c5022ac8986_151678_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..65b59b5 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/43_hu6783989c41a7b55fcec31c5022ac8986_151678_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/44_1143756573607559782.json b/src/resources/_gen/images/posts/pycones-2015/gallery/44_1143756573607559782.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/44_1143756573607559782.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/44_hu1f50f6007ec986bd4577e1a635ee1aee_206657_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/44_hu1f50f6007ec986bd4577e1a635ee1aee_206657_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..d6aa9d3 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/44_hu1f50f6007ec986bd4577e1a635ee1aee_206657_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/44_hu1f50f6007ec986bd4577e1a635ee1aee_206657_a2e857c23b1a465df028d9b5045a5290.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/44_hu1f50f6007ec986bd4577e1a635ee1aee_206657_a2e857c23b1a465df028d9b5045a5290.jpg new file mode 100644 index 0000000..4cd8c99 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/44_hu1f50f6007ec986bd4577e1a635ee1aee_206657_a2e857c23b1a465df028d9b5045a5290.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/45_15412893969025827921.json b/src/resources/_gen/images/posts/pycones-2015/gallery/45_15412893969025827921.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/45_15412893969025827921.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/45_hud0505680479f23448078a8fdbef2f0e5_295911_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/45_hud0505680479f23448078a8fdbef2f0e5_295911_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..396f566 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/45_hud0505680479f23448078a8fdbef2f0e5_295911_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/45_hud0505680479f23448078a8fdbef2f0e5_295911_d38782ab27c6faf333f5833da72fe9a0.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/45_hud0505680479f23448078a8fdbef2f0e5_295911_d38782ab27c6faf333f5833da72fe9a0.jpg new file mode 100644 index 0000000..6e7faad Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/45_hud0505680479f23448078a8fdbef2f0e5_295911_d38782ab27c6faf333f5833da72fe9a0.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/46_16468940319874691523.json b/src/resources/_gen/images/posts/pycones-2015/gallery/46_16468940319874691523.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/46_16468940319874691523.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/46_hu7db21a173454bd2bdc2e249a5b74b223_163414_40f651d5ef1f1fb7db83773202936d96.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/46_hu7db21a173454bd2bdc2e249a5b74b223_163414_40f651d5ef1f1fb7db83773202936d96.jpg new file mode 100644 index 0000000..ffc554b Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/46_hu7db21a173454bd2bdc2e249a5b74b223_163414_40f651d5ef1f1fb7db83773202936d96.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/46_hu7db21a173454bd2bdc2e249a5b74b223_163414_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/46_hu7db21a173454bd2bdc2e249a5b74b223_163414_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..e4af784 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/46_hu7db21a173454bd2bdc2e249a5b74b223_163414_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/47_2500016623543825018.json b/src/resources/_gen/images/posts/pycones-2015/gallery/47_2500016623543825018.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/47_2500016623543825018.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/47_hubf5e3a625591363190bced66306077f8_251835_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/47_hubf5e3a625591363190bced66306077f8_251835_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..7b7626d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/47_hubf5e3a625591363190bced66306077f8_251835_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/47_hubf5e3a625591363190bced66306077f8_251835_af2bdbfd5a3a52f533e72706e862ada8.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/47_hubf5e3a625591363190bced66306077f8_251835_af2bdbfd5a3a52f533e72706e862ada8.jpg new file mode 100644 index 0000000..bff82e4 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/47_hubf5e3a625591363190bced66306077f8_251835_af2bdbfd5a3a52f533e72706e862ada8.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/48_8492322184414310730.json b/src/resources/_gen/images/posts/pycones-2015/gallery/48_8492322184414310730.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/48_8492322184414310730.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/48_huec31704d33599a28758a8b583b76519a_139966_0c7201399beaa3bdc6ac55e5c32823cf.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/48_huec31704d33599a28758a8b583b76519a_139966_0c7201399beaa3bdc6ac55e5c32823cf.jpg new file mode 100644 index 0000000..97eb304 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/48_huec31704d33599a28758a8b583b76519a_139966_0c7201399beaa3bdc6ac55e5c32823cf.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/48_huec31704d33599a28758a8b583b76519a_139966_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/48_huec31704d33599a28758a8b583b76519a_139966_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..ea28915 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/48_huec31704d33599a28758a8b583b76519a_139966_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/49_1706238853956599331.json b/src/resources/_gen/images/posts/pycones-2015/gallery/49_1706238853956599331.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/49_1706238853956599331.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/49_hubdeb402ab8e33f07619765b3a761d5cf_193075_22ef42066a34cb3d697dcdcdf02b556c.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/49_hubdeb402ab8e33f07619765b3a761d5cf_193075_22ef42066a34cb3d697dcdcdf02b556c.jpg new file mode 100644 index 0000000..c1ee554 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/49_hubdeb402ab8e33f07619765b3a761d5cf_193075_22ef42066a34cb3d697dcdcdf02b556c.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/49_hubdeb402ab8e33f07619765b3a761d5cf_193075_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/49_hubdeb402ab8e33f07619765b3a761d5cf_193075_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..8f60a4f Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/49_hubdeb402ab8e33f07619765b3a761d5cf_193075_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/4_6550456347865530346.json b/src/resources/_gen/images/posts/pycones-2015/gallery/4_6550456347865530346.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/4_6550456347865530346.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/4_hu1f447bcf84bf7f0dba8a1ce2b7425c83_213742_15e70d00c8c51c9a4213e302e8a85641.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/4_hu1f447bcf84bf7f0dba8a1ce2b7425c83_213742_15e70d00c8c51c9a4213e302e8a85641.jpg new file mode 100644 index 0000000..60ea856 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/4_hu1f447bcf84bf7f0dba8a1ce2b7425c83_213742_15e70d00c8c51c9a4213e302e8a85641.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/4_hu1f447bcf84bf7f0dba8a1ce2b7425c83_213742_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/4_hu1f447bcf84bf7f0dba8a1ce2b7425c83_213742_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..109d702 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/4_hu1f447bcf84bf7f0dba8a1ce2b7425c83_213742_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/50_1475724790449116489.json b/src/resources/_gen/images/posts/pycones-2015/gallery/50_1475724790449116489.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/50_1475724790449116489.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/50_hueeae1ad56f7a151ef1327ec0d743700a_144725_5bea586a8b3d545110a48afdb714642d.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/50_hueeae1ad56f7a151ef1327ec0d743700a_144725_5bea586a8b3d545110a48afdb714642d.jpg new file mode 100644 index 0000000..4d087af Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/50_hueeae1ad56f7a151ef1327ec0d743700a_144725_5bea586a8b3d545110a48afdb714642d.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/50_hueeae1ad56f7a151ef1327ec0d743700a_144725_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/50_hueeae1ad56f7a151ef1327ec0d743700a_144725_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..778e803 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/50_hueeae1ad56f7a151ef1327ec0d743700a_144725_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/51_15561992274054091303.json b/src/resources/_gen/images/posts/pycones-2015/gallery/51_15561992274054091303.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/51_15561992274054091303.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/51_hu5396f1d285b1a6aa8ba2b4af9bb6f4ef_141599_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/51_hu5396f1d285b1a6aa8ba2b4af9bb6f4ef_141599_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..ec2fd2d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/51_hu5396f1d285b1a6aa8ba2b4af9bb6f4ef_141599_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/51_hu5396f1d285b1a6aa8ba2b4af9bb6f4ef_141599_65fb69e0f35d18e894668a980869bffd.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/51_hu5396f1d285b1a6aa8ba2b4af9bb6f4ef_141599_65fb69e0f35d18e894668a980869bffd.jpg new file mode 100644 index 0000000..27f3e93 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/51_hu5396f1d285b1a6aa8ba2b4af9bb6f4ef_141599_65fb69e0f35d18e894668a980869bffd.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/52_6458729227368638577.json b/src/resources/_gen/images/posts/pycones-2015/gallery/52_6458729227368638577.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/52_6458729227368638577.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/52_hue41609ad7825a1c4e3b1922b7735ea87_128953_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/52_hue41609ad7825a1c4e3b1922b7735ea87_128953_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..768de04 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/52_hue41609ad7825a1c4e3b1922b7735ea87_128953_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/52_hue41609ad7825a1c4e3b1922b7735ea87_128953_ccf25fda558bf08cab17beb1541428a7.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/52_hue41609ad7825a1c4e3b1922b7735ea87_128953_ccf25fda558bf08cab17beb1541428a7.jpg new file mode 100644 index 0000000..665f05d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/52_hue41609ad7825a1c4e3b1922b7735ea87_128953_ccf25fda558bf08cab17beb1541428a7.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/53_7177855990122430308.json b/src/resources/_gen/images/posts/pycones-2015/gallery/53_7177855990122430308.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/53_7177855990122430308.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/53_huf16f4f550dce4cdacb9eff61c3540953_140257_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/53_huf16f4f550dce4cdacb9eff61c3540953_140257_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..d9731ee Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/53_huf16f4f550dce4cdacb9eff61c3540953_140257_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/53_huf16f4f550dce4cdacb9eff61c3540953_140257_b588174f853969a74f83424050e02464.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/53_huf16f4f550dce4cdacb9eff61c3540953_140257_b588174f853969a74f83424050e02464.jpg new file mode 100644 index 0000000..31dfb08 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/53_huf16f4f550dce4cdacb9eff61c3540953_140257_b588174f853969a74f83424050e02464.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/54_16099272614103237767.json b/src/resources/_gen/images/posts/pycones-2015/gallery/54_16099272614103237767.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/54_16099272614103237767.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/54_hue813656148c4e82451af6a59fc1ffbc9_158440_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/54_hue813656148c4e82451af6a59fc1ffbc9_158440_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..17cdd2f Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/54_hue813656148c4e82451af6a59fc1ffbc9_158440_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/54_hue813656148c4e82451af6a59fc1ffbc9_158440_66199906dc271d32fb1666b2a273f4b6.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/54_hue813656148c4e82451af6a59fc1ffbc9_158440_66199906dc271d32fb1666b2a273f4b6.jpg new file mode 100644 index 0000000..c522b1d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/54_hue813656148c4e82451af6a59fc1ffbc9_158440_66199906dc271d32fb1666b2a273f4b6.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/55_17747350202341535494.json b/src/resources/_gen/images/posts/pycones-2015/gallery/55_17747350202341535494.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/55_17747350202341535494.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/55_hu7c7f2b1e4b7c7e9e0412c0871f31d1b7_200401_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/55_hu7c7f2b1e4b7c7e9e0412c0871f31d1b7_200401_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..fc46ae6 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/55_hu7c7f2b1e4b7c7e9e0412c0871f31d1b7_200401_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/55_hu7c7f2b1e4b7c7e9e0412c0871f31d1b7_200401_f83850847e28de1bcb0f430be88f35be.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/55_hu7c7f2b1e4b7c7e9e0412c0871f31d1b7_200401_f83850847e28de1bcb0f430be88f35be.jpg new file mode 100644 index 0000000..e511053 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/55_hu7c7f2b1e4b7c7e9e0412c0871f31d1b7_200401_f83850847e28de1bcb0f430be88f35be.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/56_6062971155082337889.json b/src/resources/_gen/images/posts/pycones-2015/gallery/56_6062971155082337889.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/56_6062971155082337889.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/56_hu851048af5bb78d799e73e30d050db74b_169941_224be4848e62308768d70e02bd131a44.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/56_hu851048af5bb78d799e73e30d050db74b_169941_224be4848e62308768d70e02bd131a44.jpg new file mode 100644 index 0000000..9b1b015 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/56_hu851048af5bb78d799e73e30d050db74b_169941_224be4848e62308768d70e02bd131a44.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/56_hu851048af5bb78d799e73e30d050db74b_169941_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/56_hu851048af5bb78d799e73e30d050db74b_169941_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..b3cb225 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/56_hu851048af5bb78d799e73e30d050db74b_169941_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/57_7424749452743690543.json b/src/resources/_gen/images/posts/pycones-2015/gallery/57_7424749452743690543.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/57_7424749452743690543.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/57_hu9cf1756015fd4abfe529a3a85f0067c3_214653_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/57_hu9cf1756015fd4abfe529a3a85f0067c3_214653_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..fbe5029 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/57_hu9cf1756015fd4abfe529a3a85f0067c3_214653_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/57_hu9cf1756015fd4abfe529a3a85f0067c3_214653_e65e13804cdf8753d4128670d115fb30.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/57_hu9cf1756015fd4abfe529a3a85f0067c3_214653_e65e13804cdf8753d4128670d115fb30.jpg new file mode 100644 index 0000000..ca0f36e Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/57_hu9cf1756015fd4abfe529a3a85f0067c3_214653_e65e13804cdf8753d4128670d115fb30.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/58_18404423652075577132.json b/src/resources/_gen/images/posts/pycones-2015/gallery/58_18404423652075577132.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/58_18404423652075577132.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/58_hufa861f6c5eee7c1e01746adb349f3447_191443_322ec4affb378ce5c2b5c671289057c9.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/58_hufa861f6c5eee7c1e01746adb349f3447_191443_322ec4affb378ce5c2b5c671289057c9.jpg new file mode 100644 index 0000000..84c583f Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/58_hufa861f6c5eee7c1e01746adb349f3447_191443_322ec4affb378ce5c2b5c671289057c9.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/58_hufa861f6c5eee7c1e01746adb349f3447_191443_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/58_hufa861f6c5eee7c1e01746adb349f3447_191443_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..58f779d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/58_hufa861f6c5eee7c1e01746adb349f3447_191443_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/59_16342781747432625733.json b/src/resources/_gen/images/posts/pycones-2015/gallery/59_16342781747432625733.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/59_16342781747432625733.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/59_hubbe336e42017d27858b198eaa317db5e_271593_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/59_hubbe336e42017d27858b198eaa317db5e_271593_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..4ef40ca Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/59_hubbe336e42017d27858b198eaa317db5e_271593_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/59_hubbe336e42017d27858b198eaa317db5e_271593_da68ebfbe232d4779de3c7cf56ae9e58.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/59_hubbe336e42017d27858b198eaa317db5e_271593_da68ebfbe232d4779de3c7cf56ae9e58.jpg new file mode 100644 index 0000000..df672c7 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/59_hubbe336e42017d27858b198eaa317db5e_271593_da68ebfbe232d4779de3c7cf56ae9e58.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/5_17884755482417775342.json b/src/resources/_gen/images/posts/pycones-2015/gallery/5_17884755482417775342.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/5_17884755482417775342.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/5_hu9bbf7c63dd21ed258749cb7eb14508da_223450_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/5_hu9bbf7c63dd21ed258749cb7eb14508da_223450_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..da4b717 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/5_hu9bbf7c63dd21ed258749cb7eb14508da_223450_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/5_hu9bbf7c63dd21ed258749cb7eb14508da_223450_f3754e34653eed279401fbf97db6fad0.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/5_hu9bbf7c63dd21ed258749cb7eb14508da_223450_f3754e34653eed279401fbf97db6fad0.jpg new file mode 100644 index 0000000..adb69c9 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/5_hu9bbf7c63dd21ed258749cb7eb14508da_223450_f3754e34653eed279401fbf97db6fad0.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/60_7048968434219691376.json b/src/resources/_gen/images/posts/pycones-2015/gallery/60_7048968434219691376.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/60_7048968434219691376.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/60_hucf1b0cc6e262ce05bda0b5a7937a6f98_186207_2224b099ec66296edd1b1918df5af5b2.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/60_hucf1b0cc6e262ce05bda0b5a7937a6f98_186207_2224b099ec66296edd1b1918df5af5b2.jpg new file mode 100644 index 0000000..1047002 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/60_hucf1b0cc6e262ce05bda0b5a7937a6f98_186207_2224b099ec66296edd1b1918df5af5b2.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/60_hucf1b0cc6e262ce05bda0b5a7937a6f98_186207_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/60_hucf1b0cc6e262ce05bda0b5a7937a6f98_186207_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..88104b7 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/60_hucf1b0cc6e262ce05bda0b5a7937a6f98_186207_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/61_15951380981058762918.json b/src/resources/_gen/images/posts/pycones-2015/gallery/61_15951380981058762918.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/61_15951380981058762918.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/61_hu475b5642c8b345a167a63a3c586af94a_225068_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/61_hu475b5642c8b345a167a63a3c586af94a_225068_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..39b7254 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/61_hu475b5642c8b345a167a63a3c586af94a_225068_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/61_hu475b5642c8b345a167a63a3c586af94a_225068_fe2f4443faa3523884dd7f2dcc3df6f9.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/61_hu475b5642c8b345a167a63a3c586af94a_225068_fe2f4443faa3523884dd7f2dcc3df6f9.jpg new file mode 100644 index 0000000..7defef2 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/61_hu475b5642c8b345a167a63a3c586af94a_225068_fe2f4443faa3523884dd7f2dcc3df6f9.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/6_15128560275184569586.json b/src/resources/_gen/images/posts/pycones-2015/gallery/6_15128560275184569586.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/6_15128560275184569586.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/6_hu8731a54c98e1cefd126a65e2ac24b75a_259904_3ce6c67547741b2192e274fed580540d.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/6_hu8731a54c98e1cefd126a65e2ac24b75a_259904_3ce6c67547741b2192e274fed580540d.jpg new file mode 100644 index 0000000..13cae2d Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/6_hu8731a54c98e1cefd126a65e2ac24b75a_259904_3ce6c67547741b2192e274fed580540d.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/6_hu8731a54c98e1cefd126a65e2ac24b75a_259904_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/6_hu8731a54c98e1cefd126a65e2ac24b75a_259904_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..73fcc54 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/6_hu8731a54c98e1cefd126a65e2ac24b75a_259904_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/7_13608000756820852244.json b/src/resources/_gen/images/posts/pycones-2015/gallery/7_13608000756820852244.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/7_13608000756820852244.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/7_hu400a26d094429d0d7261c20a0294dfcf_207384_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/7_hu400a26d094429d0d7261c20a0294dfcf_207384_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..8882f04 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/7_hu400a26d094429d0d7261c20a0294dfcf_207384_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/7_hu400a26d094429d0d7261c20a0294dfcf_207384_8cd3cbc2488f3bcd4b26787156ea116c.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/7_hu400a26d094429d0d7261c20a0294dfcf_207384_8cd3cbc2488f3bcd4b26787156ea116c.jpg new file mode 100644 index 0000000..e6eda32 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/7_hu400a26d094429d0d7261c20a0294dfcf_207384_8cd3cbc2488f3bcd4b26787156ea116c.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/8_11488320280975418321.json b/src/resources/_gen/images/posts/pycones-2015/gallery/8_11488320280975418321.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/8_11488320280975418321.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/8_hu9243cf5cd808e8393c8f9ed71e6a9ac8_232266_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/8_hu9243cf5cd808e8393c8f9ed71e6a9ac8_232266_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..a809b5e Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/8_hu9243cf5cd808e8393c8f9ed71e6a9ac8_232266_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/8_hu9243cf5cd808e8393c8f9ed71e6a9ac8_232266_b282b498d7c6066f74d4a502c2e412b9.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/8_hu9243cf5cd808e8393c8f9ed71e6a9ac8_232266_b282b498d7c6066f74d4a502c2e412b9.jpg new file mode 100644 index 0000000..89f2693 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/8_hu9243cf5cd808e8393c8f9ed71e6a9ac8_232266_b282b498d7c6066f74d4a502c2e412b9.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/9_5391519095604983842.json b/src/resources/_gen/images/posts/pycones-2015/gallery/9_5391519095604983842.json new file mode 100644 index 0000000..1d5b023 --- /dev/null +++ b/src/resources/_gen/images/posts/pycones-2015/gallery/9_5391519095604983842.json @@ -0,0 +1 @@ +{"Exif":null} diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/9_hu8c066ab596c9d1fd4ef0ebab4b7aa166_155825_600x600_fit_q90_lanczos.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/9_hu8c066ab596c9d1fd4ef0ebab4b7aa166_155825_600x600_fit_q90_lanczos.jpg new file mode 100644 index 0000000..39a3354 Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/9_hu8c066ab596c9d1fd4ef0ebab4b7aa166_155825_600x600_fit_q90_lanczos.jpg differ diff --git a/src/resources/_gen/images/posts/pycones-2015/gallery/9_hu8c066ab596c9d1fd4ef0ebab4b7aa166_155825_bb51a1c730b7158e8d6b5a89bcc59ec4.jpg b/src/resources/_gen/images/posts/pycones-2015/gallery/9_hu8c066ab596c9d1fd4ef0ebab4b7aa166_155825_bb51a1c730b7158e8d6b5a89bcc59ec4.jpg new file mode 100644 index 0000000..0eca11c Binary files /dev/null and b/src/resources/_gen/images/posts/pycones-2015/gallery/9_hu8c066ab596c9d1fd4ef0ebab4b7aa166_155825_bb51a1c730b7158e8d6b5a89bcc59ec4.jpg differ