Gorkula

Un par de locales de Chicago en los que he estado y aparecen en The Bear

Hace poco se estrenó la segunda temporada de The Bear, una serie sobre un local de comida en Chicago. Cuando se estrenó no me llamó la atención. La terminé viendo después de que algunos amigos me insistieran, ya que la serie ocurre en Chicago.

En el capítulo 3 de esta segunda temporada (que todavía no he terminado) Sydney sale a dar una vuelta por la ciudad para probar diferentes comidas e inspirarse. Visita un par de locales cerca de casa a los que he ido.

Margie's Candies es una heladería old school. Leo en Wikipedia que oficialmente está en el barrio de Bucktown. No me importa. Está a pocos minutos en línea recta desde mi casa. Hemos ido unas cuantas veces y cada vez me gusta más. Lleva ahí unos 90 años y sigue estando siempre lleno.

Hasta ahora desconocía su trascendencia. Me hizo gracia verla en el episodio 11 de la segunda temporada de F*ck, That's Delicious. Ahora soy consciente de lo que representa esta pequeña heladería para la ciudad de Chicago. Es historia.



Otro restaurante que aparece y por el que paso cada día es Pizza Lobo.

Ya hablé de Pizza Lobo en otro post. Me parece una pésima elección teniendo otros lugares como Dante's Pizzeria, Paulie Gee's o Bungalow by Middle Brow en el barrio.

Desconozco cuanto tiempo lleva abierto. Imagino que lo han elegido porque el edificio está curioso. Las pintadas que aparecen en la primera imagen son recientes. Hace un año la pared era completamente negra. No sé si antes de ser negra tenía otros dibujos.

Su localización es una de mis preferidas del barrio. El cruce entre W Fullerton Ave y N Humboldt Blvd. Muchas veces me quedo mirando el tren elevado pasar. Si llevo los auriculares puestos he de parar lo que esté escuchando porque el sonido es atronador.

Desde ese cruce se ve también el downtown. Al fondo se puede ver con total claridad la Sears Tower (desde 2009 se llama Willis Tower pero aquí todo el mundo la sigue llamando Sears Tower). En coche son unos 25 minutos.



Cerca de la pizzería está el Palmer Square Park. Un parque por el que me gusta ir a correr, pasear y sentarme en el césped a leer. Este parque no sale en la serie (o no me he dado cuenta) pero lo nombro aquí porque ayer, al abrir un contenedor para tirar basura, vi una caja de Pizza Lobo.



Cuando termine la temporada, si me doy cuenta de algún lugar más que conozca, lo añadiré a la lista.
#chicago #old.gorkula.com

El humo de los incendios de Canadá llega hasta Chicago

El clima en Chicago es extraño. En invierno hace frío y en verano calor. Como en todas partes. La diferencia es que en verano un día puede hacer 30° y al día siguiente menos de 10. Las tormentas y tornados son también habituales en la zona.

Esta semana el clima ha sido especialmente extraño. Por lo visto hay un montón de incendios en Canadá y los vientos están trayendo el humo y las cenizas. En el teléfono recibimos alertas avisando de la mala calidad del aire. Hay personas que usan las mascarillas que les sobraron de la Covid.

El martes salí a correr y sentí como que iba con un cigarro en la boca. Fue desagradable.

Ayer tuve que ir al centro de la ciudad y por el camino eché unas fotos con el teléfono. La niebla no se aprecia mucho. Se aprecia sin embargo la poca gente que hay en la calle. Es complicado respirar.

La sensación es extraña. De fin del mundo.

Hoy ha caído granizo y el gato ha saltado del sofá al escuchar los truenos.



Palmer Square es un parque que en estas fechas siempre está abarrotado de gente. Este fin de semana hicieron un festival de arte. Los más atrevidos vienen con sus barbacoas portátiles y echan el día entero. Yo suelo bajar con una silla de playa a leer.



Casi ni se ven las nubes de tanta contaminación.

#chicago #old.gorkula.com

Diario de películas, mi primera app para iOS

Descarga la app desde la App Store.

Conseguir un trabajo me está resultando mucho más difícil de lo que esperaba por diferentes motivos. Llevo un año sin trabajar (y esto los recruiters lo ven mal), estoy en otro mercado que no acabo de comprender, y ahora mismo las empresas están despidiendo masivamente.

No sé lo que durará todo esto pero entre ataques de ansiedad y echar CVs he decidido ponerme manos a la obra y desarrollar algo para iOS. Soy usuario de iPhone desde el 3G. Durante unos meses probé Android pero no me convenció.

Hace años intenté ponerme. Compré un libro de Objective-C y ni lo llegué a leer. Con Swift y UIKit lo volví a intentar durante una semana pero tenía el foco en otra parte. Compré el Apple Watch Series 4 porque le vi un montón de posibilidades y trasteé un poco pero nunca llegué a terminar nada.

Parece que he roto esta racha y por fin he publicado mi primera aplicación.

Mi primera app para iOS


Diario de películas es una aplicación muy simple que te permite llevar la cuenta de las películas que ves. Puedes valorarlas del 1 al 5 y dejar un comentario.

Por el momento hay dos características que creo que hacen de ésta una app especial:
  1. Toda la información se almacena en el dispositivo y cuenta iCloud del usuario. No se envía ningún tipo de información fuera de la app.
  2. No es una app social. No puedes seguir a nadie ni recibir recomendaciones.

Las películas vistas se pueden consultar sin conexión a internet pero para buscar películas hace falta conexión ya que los datos salen de TMDB.

Aquí tienes unas capturas de cómo luce la app en la actualidad. Las publico también como archivo, ya que tengo pensados cambios que quiero ir integrando poco a poco.


Dudas, sugerencias y errores


De momento puedes dejar un comentario en esta entrada. En algún momento planeo montar algo más serio para centralizar el mantenimiento de todas las apps que vaya desarrollando.

Espero que te sea útil. Yo vengo utilizando algo parecido desde 2015. Una web privada que monté mientras aprendía a programar. A ver si hago un importador para traer datos de otros servicios a esta app. Y un exportador para que puedas llevarte tu información cuando y a dónde quieras.
#iOS #apps #old.gorkula.com

Carteles I

En las películas americanas siempre me ha llamado la atención lo populares que son los carteles hechos a mano. Los flyers que reparten en los institutos para invitarte a fiestas (si eres popular) o a conciertos. También para los garage sales.

De camino a la tienda de cómics paso por una librería que me gusta mucho. Al lado hay un bajo que parece abandonado. En sus cristales siempre hay pósters hechos a mano.

No recuerdo cuando fue la primera vez que me fijé en estos pósters. Tampoco recuerdo cuando empecé a sacar fotos de ellos. Imagino que fue cuando descubrí que los carteles iban cambiando. He acabado con un montón de fotos en el teléfono.




Supongo que esto inicia una serie de posts sobre carteles que voy encontrando por Chicago. En especial en esta planta baja ubicada en el 2521 de N Kedzie Blvd.
#chicago #old.gorkula.com

Cómo desplegar una aplicación Rails con Postgresql y TLS usando Kamal

Este blog comenzó sus días alojado en un servidor con OpenBSD y usando relayd como reverse proxy. Intenté varias cosas para desplegar, como Capistrano o Mina. En líneas generales funcionaban bien pero siempre acababa entrando al servidor para arreglar cosas que no terminaban de funcionar. La culpa era mía por no entender 100% cómo funcionaba el sistema (plugins para todo). Cada vez aprendía un poco más y sin embargo este proceso hacía que no tuviese ganas de desplegar más cambios y un día dejé de desarrollar más funcionalidades.

Profesionalmente he usado Docker desde 2015. Para desarrollo viene muy bien pero para un producto tan pequeño como este blog no me apetecía montar todo en producción. Hasta que llegó MRSK Kamal.

Al final he conseguido tener un proceso de despliegue fácil y rápido. Para lograrlo he ido aprendiendo tanto de la documentación oficial como de unos cuantos artículos distribuidos por internet. Los iré enlazando a continuación.

Lo primero que hice fue ver el vídeo introductorio de DHH. En 5 minutos ya tenía desplegado el blog en un servidor nuevo. En otro post explicaré cómo migré la base de datos.

En el vídeo se sigue un ejemplo de nivel medio, más avanzado de lo que necesito para este blog. Éste post me ayudó a configurarlo todo en el mismo servidor. Básicamente hay que poner la misma IP tanto en el servidor como en los accessories.

El Dockerfile lo saqué del generador que vendrá en la versión 7.1. Este blog todavía está en la versión 7.0.4 a día de hoy.

# config/deploy.yml

service: blog
image: usuario/blog

servers:
  web:
    hosts:
      - ip-del-host

registry:
  username: usuario
  password:
    - KAMAL_REGISTRY_PASSWORD
env:
  clear:
    RAILS_SERVE_STATIC_FILES: true
    DB_HOST: ip-del-host
  secret:
    - RAILS_MASTER_KEY
    - POSTGRES_USER
    - POSTGRES_DB
    - POSTGRES_PASSWORD

accessories:
  db:
    image: postgres
    host: ip-del-host
    port: 5432
    env:
      secret:
        - POSTGRES_USER
        - POSTGRES_DB
        - POSTGRES_PASSWORD
    directories:
      - data:/var/lib/postgresql/data

Todas las variables de entorno definidas en secret se leen desde un fichero .env en la raíz del proyecto.

Kamal necesita que la app principal tenga un endpoint para hacer healthcheck. Es decir, necesita comprobar que la aplicación está funcionando antes de dar por finalizado el despliegue. En Rails 7.1 ya viene una ruta configurada para este propósito. En mi caso he tenido que añadir manualmente en config/routes.rb.

get "/up", to: proc { [200, {}, ["success"]] }

El siguiente paso es configurar el reverse proxy para usar TLS y permitir el acceso a la web mediante https. Por defecto Kamal usa traefik. Otra herramienta más para aprender. Pasé horas leyendo la documentación y entendí cómo funcionaba pero no conseguía hacerlo funcionar con Kamal. Por suerte encontré esta conversación en GitHub en la que se explica claramente cómo configurarlo.

Antes de desplegar has de crear el fichero de configuración en cada server (no en los accessories). Para comprobar si todo ha ido bien, una vez desplegado puedes consultar el contenido del fichero. No debería estar vacío.
Es muy importante darle el permiso correcto, sino no va a funcionar.

mkdir -p /letsencrypt && touch /letsencrypt/acme.json && chmod 600 /letsencrypt/acme.json


# config/deploy.yml

service: blog
image: usuario/blog

servers:
  web:
    hosts:
      - ip-del-host
    labels:
      traefik.http.routers.blog-web.rule: Host(`tu-dominio.com`)
      traefik.http.routers.blog-web.tls: true
      traefik.http.routers.blog-web.tls.certresolver: letsencrypt

traefik:
  options:
    publish:
      - "443:443"
    volume:
      - "/letsencrypt/acme.json:/letsencrypt/acme.json"
  args:
    entryPoints.web.address: ":80"
    entryPoints.websecure.address: ":443"
    entryPoints.web.http.redirections.entryPoint.to: websecure
    entryPoints.web.http.redirections.entryPoint.scheme: https
    entryPoints.web.http.redirections.entrypoint.permanent: true
    certificatesResolvers.letsencrypt.acme.email: "[email protected]"
    certificatesResolvers.letsencrypt.acme.storage: "/letsencrypt/acme.json"
    certificatesResolvers.letsencrypt.acme.httpchallenge: true
    certificatesResolvers.letsencrypt.acme.httpchallenge.entrypoint: web

registry:
  username: usuario
  password:
    - KAMAL_REGISTRY_PASSWORD
env:
  clear:
    RAILS_SERVE_STATIC_FILES: true
    DB_HOST: ip-del-host
  secret:
    - RAILS_MASTER_KEY
    - POSTGRES_USER
    - POSTGRES_DB
    - POSTGRES_PASSWORD

accessories:
  db:
    image: postgres
    host: ip-del-host
    port: 5432
    env:
      secret:
        - POSTGRES_USER
        - POSTGRES_DB
        - POSTGRES_PASSWORD
    directories:
      - data:/var/lib/postgresql/data

No estoy 100% seguro pero creo que las siguientes opciones las has de configurar una vez ya tengas el certificado la primera vez. Yo lo hice así pero no sé si es necesario.
Lo que hacen estas opciones es forzar a que todas las peticiones vayan por https.

entryPoints.web.http.redirections.entryPoint.to: websecure
entryPoints.web.http.redirections.entryPoint.scheme: https
entryPoints.web.http.redirections.entrypoint.permanent: true

Con esto la aplicación de Rails con Postgresql debería funcionar correctamente y la base de datos debería permanecer tras cada despliegue. Si se borra cada vez, consulta que el path especificado en directores sea correcto.

* Después de actualizar las reglas de Traefik no hace falta hacer deploy completo, solo:
$ bin/kamal traefik reboot

En otro artículo explicaré cómo he añadido Redis y Sidekiq. Es muy fácil pero hay un par de cosillas que me gustaría dejar por escrito para no olvida.

Actualización (12 sept 2023): MRSK ahora se llama Kamal. He cambiado algunas líneas del deploy.yml que copié tal cual de la documentación.
#blog #ruby on rails #old.gorkula.com