<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Mr Dias</title>
 <link href="https://mrdias.com/atom.xml" rel="self"/>
 <link href="https://mrdias.com/"/>
 <updated>2023-11-05T20:51:14-04:00</updated>
 <id>https://mrdias.com/</id>
 <author>
   <name>Jorge Dias</name>
 </author>

 
 <entry>
   <title>Las victorias de los demás</title>
   <link href="https://mrdias.com/2023/11/05/las-victorias-de-los-demas.html"/>
   <updated>2023-11-05T00:00:00-04:00</updated>
   <id>https://mrdias.com/2023/11/05/las-victorias-de-los-demas</id>
   <content type="html">&lt;p&gt;He pasado un par de semanas de conferencia y vacaciones por lo que no he
participado en el último sprint del equipo.&lt;/p&gt;

&lt;p&gt;Cuando he vuelto, he tenido una gran satisfacción al ver que el equipo había
completado casi todos los issues que se habían planificado y no habían cosas
bloqueadas por mi ausencia.&lt;/p&gt;

&lt;p&gt;A la vez he tenido algunas dudas. Si el equipo trabaja bien cuando no estoy ¿es
mi rol necesario? Es una pregunta interesante ya que me ha hecho reflexionar
sobre mi papel en la empresa.&lt;/p&gt;

&lt;p&gt;Una de mis principales responsabilidades es que los ingenieros a mi cargo
generen valor para el negocio. Por lo tanto la organización del trabajo es un
factor clave y sobre el que quiero enfocarme el día de hoy en esta reflexión.&lt;/p&gt;

&lt;p&gt;Qué hacer y el por qué son claves para un buen sprint. A mi me gusta que el
equipo entienda la razón de las tareas, sobretodo cuando son difíciles y aún más
cuando son aburridas. Si son difíciles para persistir en el esfuerzo durante el
tiempo ya que sabemos a dónde queremos llegar. Y si son aburridas (temas
regulatorios o reportes por ejemplo) cuál es su importancia y cómo benefician al
negocio y también las oportunidades para automatizarlas y con ello
transformarlas en tareas más creativas.&lt;/p&gt;

&lt;p&gt;El balance de tipo de trabajo es muy importante para mí. Tenemos tareas
inmediatas debido a fechas de entrega acordadas o imprevistos que hay que
resolver. Hay metas que queremos lograr y aunque sean a largo plazo hay que
trabajar en ellas poco a poco. Hay tareas de desarrollo personal que aunque no
tengan un objetivo inmediato debemos crear espacios para que nuestros ingenieros
mejoren sus habilidades y aprendan cosas nuevas y prueben nuevas
tecnologías. Cada sprint es distinto a veces los fuegos nos pueden consumir por
completo, afortunadamente no es el caso siempre y las proporciones variarán pero
para mí es importante que haya una buena mezcla de tipos de trabajo.&lt;/p&gt;

&lt;p&gt;A veces también me doy cuenta que alguien lleva mucho tiempo con un proyecto
largo y se le ve cansado, pues aunque tardemos más en llegar a la meta, un
sprint de “refrescamiento” suele venir bien y trabajar en otras cosas les da la
oportunidad de coger fuerza y tomar un poco de perspectiva sobre dónde estamos y
cómo seguir avanzando.&lt;/p&gt;

&lt;p&gt;Por último, siendo los ingenieros que están inmersos en los detalles de la
implementación intento que sean ellos que definan las tareas y próximos pasos a
seguir y yo cada vez más limitarme más a desbloquearlos y que estos se alineen
con los objetivos y definir los límites y consideraciones. Reconozco que esto me
cuesta mucho, el no estar siempre en “modo de solución” es un reto personal.&lt;/p&gt;

&lt;p&gt;Son los ingenieros con su esfuerzo que consiguen los objetivos y su ética de
trabajo y motivación propia lo que les impulsa. Pero por el otro que tengan
claro lo que hay que hacer es responsabilidad de los líderes, así que bien,
punto para mi 😁.&lt;/p&gt;

&lt;p&gt;Si has leído hasta aquí gracias por tu tiempo,&lt;/p&gt;

&lt;p&gt;Saludos&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Gratificación Aplazada</title>
   <link href="https://mrdias.com/2023/09/27/gratificacion-aplazada.html"/>
   <updated>2023-09-27T00:00:00-04:00</updated>
   <id>https://mrdias.com/2023/09/27/gratificacion-aplazada</id>
   <content type="html">&lt;p&gt;Una de las mayores difícultades que he tenido después del cambio a una posición de gestión es la diferencia en la escala de gratificación con respecto a la que tenía por mi contribución individual (Individual Contributor).&lt;/p&gt;

&lt;p&gt;Como ingenieros tenemos múltiples oportunidades de realizar pequeñas contribuciones en el día a día. Mezclar una rama y hacer un despliegue nos da la oportunidad de ver los resultados de nuestras acciones y su impacto durante ciclos bastante cortos. En empresas ágiles esto puede ser de días a pocas semanas.
Es una generalización, ya hay mucho proyectos que pueden llevar largo tiempo para poner en producción pero suele haber oportunidades de ver el progreso que vamos consiguiendo. Ese momento que resuelves un problema y hace click! “&lt;!-- -**-END-**- --&gt;”&lt;/p&gt;

&lt;p&gt;En una posición de gestión podemos ver el  progreso que realizan nuestros equipos pero la escala de los objetivos es mayor y los resultados se pueden ver en semanas o meses cuando pronto.&lt;/p&gt;

&lt;p&gt;Por poner un ejemplo, recientemente mi equipo ha finalizado una importante migración de bases de datos que gestionábamos a un nuevo proveedor. Han sido en total unos 7 meses para conseguirlo. Empezó durante un proceso de auditoría interna. Nos dimos cuenta que había varias deficiencias a solucionar en el sistema para obtener una certificación de seguridad.
Desde ese momento empieza la creación de un caso de negocio, evaluación del proveedor, obtener el presupuesto y pasar las evaluaciones de seguridad. Ya que tenemos que gestionar información privada de nuestros clientes esto ha añadido la necesidad de procesos adicionales para usar un nuevo sub-processor, los cuales no estaban definidos siendo este el primero.
Así pues, una vez definidos estos se establece algunos requisitos legales adicionales para nuestro proveedor y plazos de notificación de clientes de los cambios.
Todo esto ha requerido muchos emails e involucrar gran parte del negocio: Ingeniería, Producto, Finanzas, Legal y Gestión de cuentas.
Finalmente esto ha llevado unos 5 meses hasta que hemos tenido el visto bueno y los contratos firmados. En este momento, ya podíamos empezar a trabajar en la migración aunque no podíamos usar los datos de producción hasta pasados 30 días.&lt;/p&gt;

&lt;p&gt;Hicimos pruebas en otros entornos y fue todo bastante sencillo.
Cuando empezamos a probar con  producción surgieron varios retos, como siempre, esta vez debido a la gran cantidad de datos y su distribución así como alguna limitación del proveedor. Afortunadamente la buena comunicación entre desarrollado y sistemas consiguió solucionarlos en poco tiempo.
Finalmente la migración se ha realizado tras dos meses de pruebas y ha sido completada con éxito.
Ese día si que he estado contento! después de ver el nuevo sistema atendiendo peticiones y con el sistema anterior apagado. Y todo sin incidentes y con un mínimo downtime. Qué más se puede pedir?&lt;/p&gt;

&lt;p&gt;Este ha sido realmente el primer proyecto donde mi contribución en código ha sido mínima, y mi participación ha sido realmente en la gestión del proyecto y las personas por completo.&lt;/p&gt;

&lt;p&gt;Todos esos emails y obstáculos que iba sorteando fueron pasos importantes sin embargo no me dieron mucha satisfacción la verdad 😂.&lt;/p&gt;

&lt;p&gt;Todo esto para decir que algo me “picaba” en Febrero y he conseguido rascarme en Septiembre.&lt;/p&gt;

&lt;p&gt;Si has leído hasta aquí gracias.&lt;/p&gt;

&lt;p&gt;Saludos&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>63 pensamientos y lecciones que he aprendido en 2 años como manager</title>
   <link href="https://mrdias.com/2023/08/20/63-pensamientos-y-lecciones-que-he-aprendido-en-2-an-os-como-manager.html"/>
   <updated>2023-08-20T00:00:00-04:00</updated>
   <id>https://mrdias.com/2023/08/20/63-pensamientos-y-lecciones-que-he-aprendido-en-2-años-como-manager</id>
   <content type="html">&lt;p&gt;He tenido este post en draft durante demasiado tiempo. Empezó como una lista de 6 meses, no me gustaba y al año otro cambio y realmente como me suele pasar lo he dejado de lado por no ser ¨perfecto¨, también escribir en Castellano se me hace raro pero podría ser un cambio interesante para este blog.&lt;/p&gt;

&lt;p&gt;Hoy está siendo un día lluvioso y tranquilo, no hay mucho que hacer, todos duermen en casa. El momento ideal vamos, así que allí va.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;El equipo es lo más importante. Debe primar el interés grupal sobre el individual.&lt;/li&gt;
  &lt;li&gt;El trato debe ser justo e igualitario, pero no todos necesitan el mismo trato.&lt;/li&gt;
  &lt;li&gt;Hay que entender las necesidades de cada uno de los miembros del equipo.&lt;/li&gt;
  &lt;li&gt;Hay que ser claro con nuestras expectativas y nuestro modo de comunicarnos.&lt;/li&gt;
  &lt;li&gt;En un ambiente multicultural es mejor ser directo y explícito.&lt;/li&gt;
  &lt;li&gt;Cada cultura lee entre líneas cosas distintas. Hagamos visibles esas líneas.&lt;/li&gt;
  &lt;li&gt;Aclarar nuestra posición desde el principio ayudará a evitar malos entendidos.&lt;/li&gt;
  &lt;li&gt;Ser directo, pero bondadoso. Siempre desde el respeto.&lt;/li&gt;
  &lt;li&gt;Si crees que te has equivocado, pide disculpas sinceramente.&lt;/li&gt;
  &lt;li&gt;Es mejor tener una conversación difícil un momento, que pasar mil momentos difíciles.”&lt;!-- -**-END-**- --&gt;”&lt;/li&gt;
  &lt;li&gt;Es realmente importante demostrar el aprecio por el trabajo y las cosas bien hechas, aunque sea lo que esperamos de ellas.&lt;/li&gt;
  &lt;li&gt;Hay que dar buenas y malas noticias y feedback, mejor no mezclarlo.&lt;/li&gt;
  &lt;li&gt;Si hay algo que mejorar, seamos claros y no intentemos suavizarlo con lo bueno.&lt;/li&gt;
  &lt;li&gt;Si hay algo que felicitar, no pongamos peros, ya habrá otro momento.&lt;/li&gt;
  &lt;li&gt;Si somos generosos con el feedback, este es continuo y preciso, el equipo apreciará lo bueno sinceramente y aceptará mejor cuando este sea crítico.&lt;/li&gt;
  &lt;li&gt;Los 1-1 son las reuniones más influyentes en la relación con cada individuo.&lt;/li&gt;
  &lt;li&gt;Hay que aprender a escuchar y poner interés en la otra persona.&lt;/li&gt;
  &lt;li&gt;La empatía es una habilidad y puede trabajarse y mejorar.&lt;/li&gt;
  &lt;li&gt;Es importante tomar notas de las reuniones y hacerles seguimiento.&lt;/li&gt;
  &lt;li&gt;Mientras más débil la relación, más importante es tomar notas.&lt;/li&gt;
  &lt;li&gt;Los errores de hiring son los más caros.&lt;/li&gt;
  &lt;li&gt;No te apures en contratar.&lt;/li&gt;
  &lt;li&gt;Es malo tener prisa por contratar, es peor tener prisa por despedir.&lt;/li&gt;
  &lt;li&gt;Ante la duda, ¡No hire!&lt;/li&gt;
  &lt;li&gt;Primero la actitud, segundo los skills, aunque se necesitan los dos.&lt;/li&gt;
  &lt;li&gt;Mejor junior con buena actitud que sénior con acritud.&lt;/li&gt;
  &lt;li&gt;Si es sénior y tiene buena actitud, da gracias a la vida.&lt;/li&gt;
  &lt;li&gt;Es más fácil enseñar la técnica, que enseñar a pensar.&lt;/li&gt;
  &lt;li&gt;Todos en el equipo deben estar para ayudarse. Busca gente que pueda y quiera sumar.&lt;/li&gt;
  &lt;li&gt;Marrón que te comes tú, marrón que evita el equipo.&lt;/li&gt;
  &lt;li&gt;Hay que saber repartir los marrones.&lt;/li&gt;
  &lt;li&gt;Si eres justo, lo aceptarán sin mucho problema.&lt;/li&gt;
  &lt;li&gt;El manager debe llevar al equipo, no al contrario.&lt;/li&gt;
  &lt;li&gt;Es importante mantenerse optimista y motivador.&lt;/li&gt;
  &lt;li&gt;Es muy duro hacerlo consistentemente.&lt;/li&gt;
  &lt;li&gt;Si tienes problemas habla de ello con tu propio manager. No cargues al equipo.&lt;/li&gt;
  &lt;li&gt;Intenta ser el manager que te hubiera gustado tener.&lt;/li&gt;
  &lt;li&gt;Trabajando en remoto la confianza lo es todo.&lt;/li&gt;
  &lt;li&gt;Resultados == Confianza.&lt;/li&gt;
  &lt;li&gt;Resultados == Flexibilidad.&lt;/li&gt;
  &lt;li&gt;Como manager, se explícito en la frecuencia con que esperas recibir información.&lt;/li&gt;
  &lt;li&gt;No pierdas de vista tus metas por el día a día.&lt;/li&gt;
  &lt;li&gt;Las metas pueden cambiar y debemos revisarlas y ajustarlas durante el año.&lt;/li&gt;
  &lt;li&gt;Las metas nos indican una dirección a seguir, no un camino fijo.&lt;/li&gt;
  &lt;li&gt;Si alcanzas todas tus metas es porque no eran ambiciosas.&lt;/li&gt;
  &lt;li&gt;Si no alcanzas ninguna es porque no eres realista.&lt;/li&gt;
  &lt;li&gt;Mejor completar la mitad de las metas, que la mitad de cada meta.&lt;/li&gt;
  &lt;li&gt;Tan importante como lograr las metas es el esfuerzo que ponemos en tirar en esa dirección aunque no lo logremos.&lt;/li&gt;
  &lt;li&gt;No hay tiempo suficiente para hacer todo lo que queremos.&lt;/li&gt;
  &lt;li&gt;Prioriza las tareas que te ayudan a lograr tus metas.&lt;/li&gt;
  &lt;li&gt;Si trabajas mucho en tareas que no están alineadas con tus metas, piensa en cuál es la meta oculta y dale visibilidad.&lt;/li&gt;
  &lt;li&gt;Todo el equipo debe ser partícipe de las metas y cada miembro debe ser responsable de algunas de ellas.&lt;/li&gt;
  &lt;li&gt;Es normal tener dudas al cambiar a gestionar desde un rol individual.&lt;/li&gt;
  &lt;li&gt;Es normal querer e intentar hacer los dos trabajos al principio, pero no es sostenible.&lt;/li&gt;
  &lt;li&gt;Lo más difícil es aprender a no hacer el trabajo individual.&lt;/li&gt;
  &lt;li&gt;Delega el trabajo pero no la responsabilidad. Debemos acompañar y supervisar al equipo.&lt;/li&gt;
  &lt;li&gt;Cuando hagas trabajo de IC, enfócate en lo importante pero no urgente. No seas cuello de botella para los demás.&lt;/li&gt;
  &lt;li&gt;Nunca harán el trabajo igual que lo harías tú. Enfócate en los resultados y los aspectos fundamentales.&lt;/li&gt;
  &lt;li&gt;Si te molesta algún pequeño detalle insignificante, entonces no le des importancia y aprende a ignorarlo.&lt;/li&gt;
  &lt;li&gt;No siempre hace falta tener que decir algo.&lt;/li&gt;
  &lt;li&gt;La sensación de obtener un logro cambia de escala. Pasan meses o años para que se puedan observar los resultados de los esfuerzos.&lt;/li&gt;
  &lt;li&gt;Tengo más aprecio por mis anteriores manager. Buenos y malos.&lt;/li&gt;
  &lt;li&gt;Entiendo ahora que algunos tenían demasiada gente a cargo, muchos no querían estar en ese rol y los menos serían personas egoístas o ineptos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Escribiendo este post he pensado en retrospectiva sobre algunas situaciones e interacciones con managers del pasado y veo que mi forma de actuar no fue correcta y ahora entiendo que estaba equivocado.&lt;/p&gt;

&lt;p&gt;Ser manager es un rol que puede no ser apropiado según el momento de cada uno, teniendo tal influencia en la vida de la gente bajo su cargo y los resultados de la empresa quienes ejerzan ese rol deben hacerlo con vocación y convicción.&lt;/p&gt;

&lt;p&gt;Ser manager es un reto, hay que estudiar y aprender mucho sobre los demás y sobre nosotros mismos. Después de dos años ya no tengo dudas sobre haber elegido el camino correcto para mi en el momento en que me encuentro.&lt;/p&gt;

&lt;p&gt;Me considero muy afortunado por el equipo que tengo, y que me acompaña en este aprendizaje y que sinceramente espero no dejar muy traumatizado ;)&lt;/p&gt;

&lt;p&gt;Si has llegado hasta aquí muchas gracias por leerme y espero que de algo te haya servido o te haya hecho reflexionar.&lt;/p&gt;

&lt;p&gt;Suerte!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Creating jenkins users and tokens programatically</title>
   <link href="https://mrdias.com/2020/06/03/creating-jenkins-users-and-tokens-programmatically.html"/>
   <updated>2020-06-03T00:00:00-04:00</updated>
   <id>https://mrdias.com/2020/06/03/creating-jenkins-users-and-tokens-programmatically</id>
   <content type="html">&lt;p&gt;At work we manage a jenkins setup and rely on Google for
authentication. One drawback is managing service users that do not
have an email. We use those for interacting with the jenkins API in
scripts.&lt;/p&gt;

&lt;p&gt;When you use the Google Login plugin you no longer see the option to
manage users in the UI, fortunately we can leverage the Jenkins
Console and provision those users and generate the API tokens we need.&lt;/p&gt;

&lt;p&gt;Let’s create some jenkins users and give them a username and password.&lt;/p&gt;

&lt;!-- -**-END-**- --&gt;

&lt;p&gt;Go to the jenkins console on &lt;code&gt;JEKINS_URL/script&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To create a user you can execute:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-groovy&quot; data-lang=&quot;groovy&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hudson&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;security&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;HudsonPrivateSecurityRealm&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HudsonPrivateSecurityRealm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;securityRealm&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HudsonPrivateSecurityRealm&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;securityRealm&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;createAccount&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;USERNAME&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;PASSWORD&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;To generate an API Token for the user:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-groovy&quot; data-lang=&quot;groovy&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;hudson.model.*&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;jenkins.model.*&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;jenkins.security.*&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;jenkins.security.apitoken.*&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// script parameters&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;USERNAME&amp;#39;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tokenName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;kb-token&amp;#39;&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;User&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;apiTokenProperty&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getProperty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ApiTokenProperty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;apiTokenProperty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;generateNewToken&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tokenName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;plainValue&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;This last script can be used to (re)generate API tokens for any user.&lt;/p&gt;

&lt;p&gt;Remember to use the API token to authenticate instead of the password.&lt;/p&gt;

&lt;p&gt;To verify it works, run:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;curl&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-u&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;USERNAME:API_TOKEN&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;https://jenkins.example.com&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</content>
 </entry>
 
 <entry>
   <title>Get to know your editor</title>
   <link href="https://mrdias.com/2018/04/23/get-to-know-your-editor.html"/>
   <updated>2018-04-23T00:00:00-04:00</updated>
   <id>https://mrdias.com/2018/04/23/get-to-know-your-editor</id>
   <content type="html">&lt;p&gt;As programmers we spend most of our time (apart from meetings :p)
editing text. I’m a very avid user of emacs. I’ve been using the
editor since 2007 after a friend took the time to explain it to me. I
had tried to use it at university but couldn’t understand how to use
it, I tried also vim and it was even worse, so I ended up using
something a bit friendlier like gedit back then. Anyway, this is not
about which editor is better or worse but about sticking to
something.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;After I started learning emacs and &lt;strong&gt;really&lt;/strong&gt; trying to use it for a
while it started to click. I was starting to work with Ruby around the
time and the support for it was quite good, Matz uses emacs so it’s
not a coincidence. I’ve then used emacs for many other programming
languages, javascript, python, golang, etc. Every time I try a new
programming language I improve my emacs to support it, I’ll configure
plugins or write some functions and then I can work with this language
using the same workflows and tricks I’ve learned through the years.&lt;/p&gt;

&lt;p&gt;I’m not trying to advocate using emacs, that is just a choice, but
after more than 10 years using it I can be very productive. So you can
do it too! When I started I didn’t know all the things I could do with
my editor but I’ve definitely dedicated time to learn it and I’ve only
scratched the surface of what it can do. Knowing your editor takes
time and effort but it totally pays off.&lt;/p&gt;

&lt;p&gt;There are many great editors out there, we’re way past the vim vs
emacs debate. Those editors though great are not for everyone, try
different editors for a while until you find the one that feels right
to you. You won’t know it immediately but after a couple of weeks or a
month you will and then you can choose whether or not to continue
using it.&lt;/p&gt;

&lt;p&gt;I recommend also watching how other advanced users do things with
different editors, you get many good ideas that you can “steal” for
your use without having to necessarily change your tools.&lt;/p&gt;

&lt;p&gt;My recommendation is if you’re struggling with your editor just try
something different, try a change that will help you in the long term,
once you master your basic tools you can then move on and tackle
higher level issues about how you work. If you’ve been using the same
editor for a while and are comfortable with it try to push your
boundaries. Look for tutorials or demos, investigate the menus, read
the documentation, there’ll be tips and tricks that you can slowly add
to your bag. Don’t try to learn everything in one day, do it
regularly, a little bit (5 minutes?) every day and you’ll see how you
master your editor sooner than you may think.&lt;/p&gt;

&lt;p&gt;Here are a few links that could be of interest.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.masteringemacs.org&quot;&gt;Mastering emacs&lt;/a&gt;
&lt;a href=&quot;http://emacs.sexy&quot;&gt;Emacs is sexy&lt;/a&gt;
&lt;a href=&quot;https://medium.com/actualize-network/how-to-learn-vim-a-four-week-plan-cd8b376a9b85&quot;&gt;How to learn vim a four week plan&lt;/a&gt;
&lt;a href=&quot;http://www.openvim.com&quot;&gt;Openvim&lt;/a&gt;
&lt;a href=&quot;https://code.visualstudio.com/docs/getstarted/tips-and-tricks&quot;&gt;Visual Studio Code tricks&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Pair programming Dos and Don'ts</title>
   <link href="https://mrdias.com/2018/04/02/pair-programming-dos-and-donts.html"/>
   <updated>2018-04-02T00:00:00-04:00</updated>
   <id>https://mrdias.com/2018/04/02/pair-programming-dos-and-donts</id>
   <content type="html">&lt;p&gt;There are several things that will make your pair programming sessions
work better. Things you can actively do and others best to avoid.&lt;/p&gt;

&lt;p&gt;First of all, you need to give it an honest shot, especially if you’re
not experienced in pairing. Pair programming is a skill and needs to
be learned. Like learning any other thing the process can be tough, it
can take you out of your comfort zone and get your mind resisting and
wanting to do things as usual. So it’s important to be open about the
experience and try to make the best of it.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;Communication is crucial, you need to talk to your partner and learn
to listen. There is a quote by
&lt;a href=&quot;https://en.wikipedia.org/wiki/Donald_Knuth&quot;&gt;Donald Knuth&lt;/a&gt; which I
really like that says: &lt;em&gt;“Programming is the art of telling another
human being what one wants the computer to do”&lt;/em&gt;. This has always stuck
with me since I first read it and when you’re pairing it applies even
more. That’s the essence of it.&lt;/p&gt;

&lt;p&gt;Effective listening is necessary, listening to others is by no means
easy! Try to open to their suggestions and be aware of the interaction
you have with your partner. Don’t rush through the task, take the time
so both understand clearly the goal.&lt;/p&gt;

&lt;p&gt;You need to be patient, you may have a very clear idea but your
partner may not understand so try to explain things and help them
understand. Use a notebook or a drawing board, don’t get frustrated if
you need to repeat things many times. At the same time sometimes you
just need to trust your partner. You may not understand clearly
despite their best intentions or may not exactly agree on how to do
things but let them show you their way. If after all the idea doesn’t
work out you’ll both get something out of it, and the next attempt
will work out much better as you won’t have to make the same mistakes.&lt;/p&gt;

&lt;p&gt;Code written by a pair is a construction of the best ideas by two
people and coming up with them, things need to be challenged. You’ll
need to convince your partner and in some occasions you’ll need to
convince yourself, so it’s important to leave the old ego at home!
It’s not a competition nor is it about being right or wrong so
questioning and discussing are vital and need not be taken
personally. Remember the deliberation is all about the ideas not the
people.&lt;/p&gt;

&lt;p&gt;Be respectful when talking, try to avoid using bad words and
expressions, try to keep the session positive even when faced with
challenges (bugs, bad documentation, some third party failing,
etc). Stay positive! A good mood will help the sessions be lighter and less
stressful for both. And it’s ok to keep your partner in check, if they
are being cranky or moody let them know and help them cheer up.&lt;/p&gt;

&lt;p&gt;Taking regular breaks is also advisable. When you’re pairing a lot of
the little distractions that plague us will vanish. Writing emails,
checking slack, reading blogs, twitter, news sites, etc is not
something you can do with someone next to you so the increased focus
will be draining after a while. When you feel tired go for a coffee or
go for a walk, try to change the environment so that you can recharge
and get back into action feeling fresh.&lt;/p&gt;

&lt;p&gt;Last but not least, you’ll be working shoulder to shoulder with
someone so consider your personal hygiene and avoid using too much
perfume or after shave as some people may be sensitive to it.&lt;/p&gt;

&lt;p&gt;This is not an exhaustive list but by using these points you’ll see
how your pair programming sessions become more enjoyable and after
practicing some time you’ll get acquainted and see how working in this
way is worth it.&lt;/p&gt;

&lt;script src=&quot;https://f.convertkit.com/ckjs/ck.5.js&quot;&gt;&lt;/script&gt;

&lt;div class=&quot;light-mode&quot; style=&quot;display: none;&quot;&gt;
  &lt;form action=&quot;https://app.convertkit.com/forms/5805240/subscriptions&quot; style=&quot;background-color: rgb(238, 232, 213); border-radius: 4px;&quot; class=&quot;seva-form formkit-form&quot; method=&quot;post&quot; data-sv-form=&quot;5805240&quot; data-uid=&quot;cc7bf1c6b3&quot; data-format=&quot;inline&quot; data-version=&quot;5&quot; data-options=&quot;{&amp;quot;settings&amp;quot;:{&amp;quot;after_subscribe&amp;quot;:{&amp;quot;action&amp;quot;:&amp;quot;message&amp;quot;,&amp;quot;success_message&amp;quot;:&amp;quot;Success! Now check your email to confirm your subscription.&amp;quot;,&amp;quot;redirect_url&amp;quot;:&amp;quot;&amp;quot;},&amp;quot;analytics&amp;quot;:{&amp;quot;google&amp;quot;:null,&amp;quot;fathom&amp;quot;:null,&amp;quot;facebook&amp;quot;:null,&amp;quot;segment&amp;quot;:null,&amp;quot;pinterest&amp;quot;:null,&amp;quot;sparkloop&amp;quot;:null,&amp;quot;googletagmanager&amp;quot;:null},&amp;quot;modal&amp;quot;:{&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15},&amp;quot;powered_by&amp;quot;:{&amp;quot;show&amp;quot;:true,&amp;quot;url&amp;quot;:&amp;quot;https://convertkit.com/features/forms?utm_campaign=poweredby&amp;amp;utm_content=form&amp;amp;utm_medium=referral&amp;amp;utm_source=dynamic&amp;quot;},&amp;quot;recaptcha&amp;quot;:{&amp;quot;enabled&amp;quot;:false},&amp;quot;return_visitor&amp;quot;:{&amp;quot;action&amp;quot;:&amp;quot;show&amp;quot;,&amp;quot;custom_content&amp;quot;:&amp;quot;&amp;quot;},&amp;quot;slide_in&amp;quot;:{&amp;quot;display_in&amp;quot;:&amp;quot;bottom_right&amp;quot;,&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15},&amp;quot;sticky_bar&amp;quot;:{&amp;quot;display_in&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15}},&amp;quot;version&amp;quot;:&amp;quot;5&amp;quot;}&quot; min-width=&quot;400 500 600 700 800&quot;&gt;&lt;div style=&quot;opacity: 0.2;&quot; class=&quot;formkit-background&quot;&gt;&lt;/div&gt;&lt;div data-style=&quot;minimal&quot;&gt;&lt;div class=&quot;formkit-header&quot; style=&quot;color: rgb(89, 89, 88); font-size: 27px; font-weight: 700;&quot; data-element=&quot;header&quot;&gt;&lt;h2&gt;Join the Newsletter&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;formkit-subheader&quot; style=&quot;color: rgb(89, 89, 88); font-size: 18px;&quot; data-element=&quot;subheader&quot;&gt;Subscribe to get our latest content by email.&lt;/div&gt;&lt;ul class=&quot;formkit-alert formkit-alert-error&quot; data-element=&quot;errors&quot; data-group=&quot;alert&quot;&gt;&lt;/ul&gt;&lt;div data-element=&quot;fields&quot; data-stacked=&quot;false&quot; class=&quot;seva-fields formkit-fields&quot;&gt;&lt;div class=&quot;formkit-field&quot;&gt;&lt;input class=&quot;formkit-input&quot; name=&quot;email_address&quot; style=&quot;border-color: rgb(89, 89, 88); color: rgb(0, 0, 0); border-radius: 4px; font-weight: 400;&quot; aria-label=&quot;Email Address&quot; placeholder=&quot;Email Address&quot; required=&quot;&quot; type=&quot;email&quot; /&gt;&lt;/div&gt;&lt;button data-element=&quot;submit&quot; class=&quot;formkit-submit formkit-submit&quot; style=&quot;background-color: rgb(182, 142, 9); color: rgb(255, 255, 255); border-radius: 4px; font-weight: 400;&quot;&gt;&lt;div class=&quot;formkit-spinner&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;&quot;&gt;Subscribe&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;formkit-guarantee&quot; style=&quot;color: rgb(89, 89, 88); font-size: 13px; font-weight: 400;&quot; data-element=&quot;guarantee&quot;&gt;We won't send you spam. Unsubscribe at any time.&lt;/div&gt;&lt;div class=&quot;formkit-powered-by-convertkit-container&quot;&gt;&lt;a href=&quot;https://convertkit.com/features/forms?utm_campaign=poweredby&amp;amp;utm_content=form&amp;amp;utm_medium=referral&amp;amp;utm_source=dynamic&quot; data-element=&quot;powered-by&quot; class=&quot;formkit-powered-by-convertkit&quot; data-variant=&quot;dark&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Built with ConvertKit&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] *{box-sizing:border-box;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] legend{border:none;font-size:inherit;margin-bottom:10px;padding:0;position:relative;display:table;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] fieldset{border:0;padding:0.01em 0 0 0;margin:0;min-width:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] body:not(:-moz-handler-blocked) fieldset{display:table-cell;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h1,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h2,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h3,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h4,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h5,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h6{color:inherit;font-size:inherit;font-weight:inherit;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h2{font-size:1.5em;margin:1em 0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h3{font-size:1.17em;margin:1em 0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] p{color:inherit;font-size:inherit;font-weight:inherit;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] ol:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] ul:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] blockquote:not([template-default]){text-align:left;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] p:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] hr:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] blockquote:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] ol:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] ul:not([template-default]){color:inherit;font-style:initial;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .ordered-list,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .unordered-list{list-style-position:outside !important;padding-left:1em;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .list-item{padding-left:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][data-format=&quot;modal&quot;]{display:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][data-format=&quot;slide in&quot;]{display:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][data-format=&quot;sticky bar&quot;]{display:none;}.formkit-sticky-bar .formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][data-format=&quot;sticky bar&quot;]{display:block;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-select,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-checkboxes{width:100%;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit{border:0;border-radius:5px;color:#ffffff;cursor:pointer;display:inline-block;text-align:center;font-size:15px;font-weight:500;cursor:pointer;margin-bottom:15px;overflow:hidden;padding:0;position:relative;vertical-align:middle;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button:hover,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit:hover,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button:focus,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit:focus{outline:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button:hover &gt; span,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit:hover &gt; span,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button:focus &gt; span,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit:focus &gt; span{background-color:rgba(0,0,0,0.1);}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button &gt; span,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit &gt; span{display:block;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;padding:12px 24px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input{background:#ffffff;font-size:15px;padding:12px;border:1px solid #e3e3e3;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;line-height:1.4;margin:0;-webkit-transition:border-color ease-out 300ms;transition:border-color ease-out 300ms;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input:focus{outline:none;border-color:#1677be;-webkit-transition:border-color ease 300ms;transition:border-color ease 300ms;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input::-webkit-input-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input::-moz-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input:-ms-input-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input::placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;dropdown&quot;]{position:relative;display:inline-block;width:100%;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;dropdown&quot;]::before{content:&quot;&quot;;top:calc(50% - 2.5px);right:10px;position:absolute;pointer-events:none;border-color:#4f4f4f transparent transparent transparent;border-style:solid;border-width:6px 6px 0 6px;height:0;width:0;z-index:999;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;dropdown&quot;] select{height:auto;width:100%;cursor:pointer;color:#333333;line-height:1.4;margin-bottom:0;padding:0 6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:15px;padding:12px;padding-right:25px;border:1px solid #e3e3e3;background:#ffffff;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;dropdown&quot;] select:focus{outline:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;]{text-align:left;margin:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;]{margin-bottom:10px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] *{cursor:pointer;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;]:last-of-type{margin-bottom:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]{display:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;] + label::after{content:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]:checked + label::after{border-color:#ffffff;content:&quot;&quot;;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]:checked + label::before{background:#10bf7a;border-color:#10bf7a;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label{position:relative;display:inline-block;padding-left:28px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::before,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::after{position:absolute;content:&quot;&quot;;display:inline-block;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::before{height:16px;width:16px;border:1px solid #e3e3e3;background:#ffffff;left:0px;top:3px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::after{height:4px;width:8px;border-left:2px solid #4d4d4d;border-bottom:2px solid #4d4d4d;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);left:4px;top:8px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-alert{background:#f9fafb;border:1px solid #e3e3e3;border-radius:5px;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;list-style:none;margin:25px auto;padding:12px;text-align:center;width:100%;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-alert:empty{display:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-alert-success{background:#d3fbeb;border-color:#10bf7a;color:#0c905c;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-alert-error{background:#fde8e2;border-color:#f2643b;color:#ea4110;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-spinner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:0px;width:0px;margin:0 auto;position:absolute;top:0;left:0;right:0;width:0px;overflow:hidden;text-align:center;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-spinner &gt; div{margin:auto;width:12px;height:12px;background-color:#fff;opacity:0.3;border-radius:100%;display:inline-block;-webkit-animation:formkit-bouncedelay-formkit-form-data-uid-cc7bf1c6b3- 1.4s infinite ease-in-out both;animation:formkit-bouncedelay-formkit-form-data-uid-cc7bf1c6b3- 1.4s infinite ease-in-out both;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-spinner &gt; div:nth-child(1){-webkit-animation-delay:-0.32s;animation-delay:-0.32s;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-spinner &gt; div:nth-child(2){-webkit-animation-delay:-0.16s;animation-delay:-0.16s;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit[data-active] .formkit-spinner{opacity:1;height:100%;width:50px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit[data-active] .formkit-spinner ~ span{opacity:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by[data-active=&quot;false&quot;]{opacity:0.35;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;z-index:5;margin:10px 0;position:relative;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit-container[data-active=&quot;false&quot;]{opacity:0.35;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#ffffff;border:1px solid #dde2e7;border-radius:4px;color:#373f45;cursor:pointer;display:block;height:36px;margin:0 auto;opacity:0.95;padding:0;-webkit-text-decoration:none;text-decoration:none;text-indent:100%;-webkit-transition:ease-in-out all 200ms;transition:ease-in-out all 200ms;white-space:nowrap;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:190px;background-repeat:no-repeat;background-position:center;background-image:url(&quot;data:image/svg+xml;charset=utf8,%3Csvg width='162' height='20' viewBox='0 0 162 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M83.0561 15.2457C86.675 15.2457 89.4722 12.5154 89.4722 9.14749C89.4722 5.99211 86.8443 4.06563 85.1038 4.06563C82.6801 4.06563 80.7373 5.76407 80.4605 8.28551C80.4092 8.75244 80.0387 9.14403 79.5686 9.14069C78.7871 9.13509 77.6507 9.12841 76.9314 9.13092C76.6217 9.13199 76.3658 8.88106 76.381 8.57196C76.4895 6.38513 77.2218 4.3404 78.618 2.76974C80.1695 1.02445 82.4289 0 85.1038 0C89.5979 0 93.8406 4.07791 93.8406 9.14749C93.8406 14.7608 89.1832 19.3113 83.1517 19.3113C78.8502 19.3113 74.5179 16.5041 73.0053 12.5795C72.9999 12.565 72.9986 12.5492 73.0015 12.534C73.0218 12.4179 73.0617 12.3118 73.1011 12.2074C73.1583 12.0555 73.2143 11.907 73.2062 11.7359L73.18 11.1892C73.174 11.0569 73.2075 10.9258 73.2764 10.8127C73.3452 10.6995 73.4463 10.6094 73.5666 10.554L73.7852 10.4523C73.9077 10.3957 74.0148 10.3105 74.0976 10.204C74.1803 10.0974 74.2363 9.97252 74.2608 9.83983C74.3341 9.43894 74.6865 9.14749 75.0979 9.14749C75.7404 9.14749 76.299 9.57412 76.5088 10.1806C77.5188 13.1 79.1245 15.2457 83.0561 15.2457Z' fill='%23373F45'/%3E%3Cpath d='M155.758 6.91365C155.028 6.91365 154.804 6.47916 154.804 5.98857C154.804 5.46997 154.986 5.06348 155.758 5.06348C156.53 5.06348 156.712 5.46997 156.712 5.98857C156.712 6.47905 156.516 6.91365 155.758 6.91365ZM142.441 12.9304V9.32833L141.415 9.32323V8.90392C141.415 8.44719 141.786 8.07758 142.244 8.07986L142.441 8.08095V6.55306L144.082 6.09057V8.08073H145.569V8.50416C145.569 8.61242 145.548 8.71961 145.506 8.81961C145.465 8.91961 145.404 9.01047 145.328 9.08699C145.251 9.16351 145.16 9.2242 145.06 9.26559C144.96 9.30698 144.853 9.32826 144.745 9.32822H144.082V12.7201C144.082 13.2423 144.378 13.4256 144.76 13.4887C145.209 13.5629 145.583 13.888 145.583 14.343V14.9626C144.029 14.9626 142.441 14.8942 142.441 12.9304Z' fill='%23373F45'/%3E%3Cpath d='M110.058 7.92554C108.417 7.88344 106.396 8.92062 106.396 11.5137C106.396 14.0646 108.417 15.0738 110.058 15.0318C111.742 15.0738 113.748 14.0646 113.748 11.5137C113.748 8.92062 111.742 7.88344 110.058 7.92554ZM110.07 13.7586C108.878 13.7586 108.032 12.8905 108.032 11.461C108.032 10.1013 108.878 9.20569 110.071 9.20569C111.263 9.20569 112.101 10.0995 112.101 11.459C112.101 12.8887 111.263 13.7586 110.07 13.7586Z' fill='%23373F45'/%3E%3Cpath d='M118.06 7.94098C119.491 7.94098 120.978 8.33337 120.978 11.1366V14.893H120.063C119.608 14.893 119.238 14.524 119.238 14.0689V10.9965C119.238 9.66506 118.747 9.16047 117.891 9.16047C117.414 9.16047 116.797 9.52486 116.502 9.81915V14.069C116.502 14.1773 116.481 14.2845 116.44 14.3845C116.398 14.4845 116.337 14.5753 116.261 14.6519C116.184 14.7284 116.093 14.7891 115.993 14.8305C115.893 14.8719 115.786 14.8931 115.678 14.8931H114.847V8.10918H115.773C115.932 8.10914 116.087 8.16315 116.212 8.26242C116.337 8.36168 116.424 8.50033 116.46 8.65577C116.881 8.19328 117.428 7.94098 118.06 7.94098ZM122.854 8.09713C123.024 8.09708 123.19 8.1496 123.329 8.2475C123.468 8.34541 123.574 8.48391 123.631 8.64405L125.133 12.8486L126.635 8.64415C126.692 8.48402 126.798 8.34551 126.937 8.2476C127.076 8.1497 127.242 8.09718 127.412 8.09724H128.598L126.152 14.3567C126.091 14.5112 125.986 14.6439 125.849 14.7374C125.711 14.831 125.549 14.881 125.383 14.8809H124.333L121.668 8.09713H122.854Z' fill='%23373F45'/%3E%3Cpath d='M135.085 14.5514C134.566 14.7616 133.513 15.0416 132.418 15.0416C130.496 15.0416 129.024 13.9345 129.024 11.4396C129.024 9.19701 130.451 7.99792 132.191 7.99792C134.338 7.99792 135.254 9.4378 135.158 11.3979C135.139 11.8029 134.786 12.0983 134.38 12.0983H130.679C130.763 13.1916 131.562 13.7662 132.615 13.7662C133.028 13.7662 133.462 13.7452 133.983 13.6481C134.535 13.545 135.085 13.9375 135.085 14.4985V14.5514ZM133.673 10.949C133.785 9.87621 133.061 9.28752 132.191 9.28752C131.321 9.28752 130.734 9.93979 130.679 10.9489L133.673 10.949Z' fill='%23373F45'/%3E%3Cpath d='M137.345 8.11122C137.497 8.11118 137.645 8.16229 137.765 8.25635C137.884 8.35041 137.969 8.48197 138.005 8.62993C138.566 8.20932 139.268 7.94303 139.759 7.94303C139.801 7.94303 140.068 7.94303 140.489 7.99913V8.7265C140.489 9.11748 140.15 9.4147 139.759 9.4147C139.31 9.4147 138.651 9.5829 138.131 9.8773V14.8951H136.462V8.11112L137.345 8.11122ZM156.6 14.0508V8.09104H155.769C155.314 8.09104 154.944 8.45999 154.944 8.9151V14.8748H155.775C156.23 14.8748 156.6 14.5058 156.6 14.0508ZM158.857 12.9447V9.34254H157.749V8.91912C157.749 8.46401 158.118 8.09506 158.574 8.09506H158.857V6.56739L160.499 6.10479V8.09506H161.986V8.51848C161.986 8.97359 161.617 9.34254 161.161 9.34254H160.499V12.7345C160.499 13.2566 160.795 13.44 161.177 13.503C161.626 13.5774 162 13.9024 162 14.3574V14.977C160.446 14.977 158.857 14.9086 158.857 12.9447ZM98.1929 10.1124C98.2033 6.94046 100.598 5.16809 102.895 5.16809C104.171 5.16809 105.342 5.44285 106.304 6.12953L105.914 6.6631C105.654 7.02011 105.16 7.16194 104.749 6.99949C104.169 6.7702 103.622 6.7218 103.215 6.7218C101.335 6.7218 99.9169 7.92849 99.9068 10.1123C99.9169 12.2959 101.335 13.5201 103.215 13.5201C103.622 13.5201 104.169 13.4717 104.749 13.2424C105.16 13.0799 105.654 13.2046 105.914 13.5615L106.304 14.0952C105.342 14.7819 104.171 15.0566 102.895 15.0566C100.598 15.0566 98.2033 13.2842 98.1929 10.1124ZM147.619 5.21768C148.074 5.21768 148.444 5.58663 148.444 6.04174V9.81968L151.82 5.58131C151.897 5.47733 151.997 5.39282 152.112 5.3346C152.227 5.27638 152.355 5.24607 152.484 5.24611H153.984L150.166 10.0615L153.984 14.8749H152.484C152.355 14.8749 152.227 14.8446 152.112 14.7864C151.997 14.7281 151.897 14.6436 151.82 14.5397L148.444 10.3025V14.0508C148.444 14.5059 148.074 14.8749 147.619 14.8749H146.746V5.21768H147.619Z' fill='%23373F45'/%3E%3Cpath d='M0.773438 6.5752H2.68066C3.56543 6.5752 4.2041 6.7041 4.59668 6.96191C4.99219 7.21973 5.18994 7.62695 5.18994 8.18359C5.18994 8.55859 5.09326 8.87061 4.8999 9.11963C4.70654 9.36865 4.42822 9.52539 4.06494 9.58984V9.63379C4.51611 9.71875 4.84717 9.88721 5.05811 10.1392C5.27197 10.3882 5.37891 10.7266 5.37891 11.1543C5.37891 11.7314 5.17676 12.1841 4.77246 12.5122C4.37109 12.8374 3.81152 13 3.09375 13H0.773438V6.5752ZM1.82373 9.22949H2.83447C3.27393 9.22949 3.59473 9.16064 3.79688 9.02295C3.99902 8.88232 4.1001 8.64502 4.1001 8.31104C4.1001 8.00928 3.99023 7.79102 3.77051 7.65625C3.55371 7.52148 3.20801 7.4541 2.7334 7.4541H1.82373V9.22949ZM1.82373 10.082V12.1167H2.93994C3.37939 12.1167 3.71045 12.0332 3.93311 11.8662C4.15869 11.6963 4.27148 11.4297 4.27148 11.0664C4.27148 10.7324 4.15723 10.4849 3.92871 10.3237C3.7002 10.1626 3.35303 10.082 2.88721 10.082H1.82373Z' fill='%23373F45'/%3E%3Cpath d='M13.011 6.5752V10.7324C13.011 11.207 12.9084 11.623 12.7034 11.9805C12.5012 12.335 12.2068 12.6089 11.8201 12.8022C11.4363 12.9927 10.9763 13.0879 10.4402 13.0879C9.6433 13.0879 9.02368 12.877 8.5813 12.4551C8.13892 12.0332 7.91772 11.4531 7.91772 10.7148V6.5752H8.9724V10.6401C8.9724 11.1704 9.09546 11.5615 9.34155 11.8135C9.58765 12.0654 9.96557 12.1914 10.4753 12.1914C11.4656 12.1914 11.9607 11.6714 11.9607 10.6313V6.5752H13.011Z' fill='%23373F45'/%3E%3Cpath d='M15.9146 13V6.5752H16.9649V13H15.9146Z' fill='%23373F45'/%3E%3Cpath d='M19.9255 13V6.5752H20.9758V12.0991H23.696V13H19.9255Z' fill='%23373F45'/%3E%3Cpath d='M28.2828 13H27.2325V7.47607H25.3428V6.5752H30.1724V7.47607H28.2828V13Z' fill='%23373F45'/%3E%3Cpath d='M41.9472 13H40.8046L39.7148 9.16796C39.6679 9.00097 39.6093 8.76074 39.539 8.44727C39.4687 8.13086 39.4262 7.91113 39.4116 7.78809C39.3823 7.97559 39.3339 8.21875 39.2665 8.51758C39.2021 8.81641 39.1479 9.03905 39.1039 9.18554L38.0405 13H36.8979L36.0673 9.7832L35.2236 6.5752H36.2958L37.2143 10.3193C37.3578 10.9199 37.4604 11.4502 37.5219 11.9102C37.5541 11.6611 37.6025 11.3828 37.6669 11.0752C37.7314 10.7676 37.79 10.5186 37.8427 10.3281L38.8886 6.5752H39.9301L41.0024 10.3457C41.1049 10.6943 41.2133 11.2158 41.3276 11.9102C41.3715 11.4912 41.477 10.958 41.644 10.3105L42.558 6.5752H43.6215L41.9472 13Z' fill='%23373F45'/%3E%3Cpath d='M45.7957 13V6.5752H46.846V13H45.7957Z' fill='%23373F45'/%3E%3Cpath d='M52.0258 13H50.9755V7.47607H49.0859V6.5752H53.9155V7.47607H52.0258V13Z' fill='%23373F45'/%3E%3Cpath d='M61.2312 13H60.1765V10.104H57.2146V13H56.1643V6.5752H57.2146V9.20312H60.1765V6.5752H61.2312V13Z' fill='%23373F45'/%3E%3C/svg%3E&quot;);}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit:hover,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit:focus{background-color:#ffffff;-webkit-transform:scale(1.025) perspective(1px);-ms-transform:scale(1.025) perspective(1px);transform:scale(1.025) perspective(1px);opacity:1;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit[data-variant=&quot;dark&quot;],.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit[data-variant=&quot;light&quot;]{background-color:transparent;border-color:transparent;width:166px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit[data-variant=&quot;light&quot;]{color:#ffffff;background-image:url(&quot;data:image/svg+xml;charset=utf8,%3Csvg width='162' height='20' viewBox='0 0 162 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M83.0561 15.2457C86.675 15.2457 89.4722 12.5154 89.4722 9.14749C89.4722 5.99211 86.8443 4.06563 85.1038 4.06563C82.6801 4.06563 80.7373 5.76407 80.4605 8.28551C80.4092 8.75244 80.0387 9.14403 79.5686 9.14069C78.7871 9.13509 77.6507 9.12841 76.9314 9.13092C76.6217 9.13199 76.3658 8.88106 76.381 8.57196C76.4895 6.38513 77.2218 4.3404 78.618 2.76974C80.1695 1.02445 82.4289 0 85.1038 0C89.5979 0 93.8406 4.07791 93.8406 9.14749C93.8406 14.7608 89.1832 19.3113 83.1517 19.3113C78.8502 19.3113 74.5179 16.5041 73.0053 12.5795C72.9999 12.565 72.9986 12.5492 73.0015 12.534C73.0218 12.4179 73.0617 12.3118 73.1011 12.2074C73.1583 12.0555 73.2143 11.907 73.2062 11.7359L73.18 11.1892C73.174 11.0569 73.2075 10.9258 73.2764 10.8127C73.3452 10.6995 73.4463 10.6094 73.5666 10.554L73.7852 10.4523C73.9077 10.3957 74.0148 10.3105 74.0976 10.204C74.1803 10.0974 74.2363 9.97252 74.2608 9.83983C74.3341 9.43894 74.6865 9.14749 75.0979 9.14749C75.7404 9.14749 76.299 9.57412 76.5088 10.1806C77.5188 13.1 79.1245 15.2457 83.0561 15.2457Z' fill='white'/%3E%3Cpath d='M155.758 6.91365C155.028 6.91365 154.804 6.47916 154.804 5.98857C154.804 5.46997 154.986 5.06348 155.758 5.06348C156.53 5.06348 156.712 5.46997 156.712 5.98857C156.712 6.47905 156.516 6.91365 155.758 6.91365ZM142.441 12.9304V9.32833L141.415 9.32323V8.90392C141.415 8.44719 141.786 8.07758 142.244 8.07986L142.441 8.08095V6.55306L144.082 6.09057V8.08073H145.569V8.50416C145.569 8.61242 145.548 8.71961 145.506 8.81961C145.465 8.91961 145.404 9.01047 145.328 9.08699C145.251 9.16351 145.16 9.2242 145.06 9.26559C144.96 9.30698 144.853 9.32826 144.745 9.32822H144.082V12.7201C144.082 13.2423 144.378 13.4256 144.76 13.4887C145.209 13.5629 145.583 13.888 145.583 14.343V14.9626C144.029 14.9626 142.441 14.8942 142.441 12.9304Z' fill='white'/%3E%3Cpath d='M110.058 7.92554C108.417 7.88344 106.396 8.92062 106.396 11.5137C106.396 14.0646 108.417 15.0738 110.058 15.0318C111.742 15.0738 113.748 14.0646 113.748 11.5137C113.748 8.92062 111.742 7.88344 110.058 7.92554ZM110.07 13.7586C108.878 13.7586 108.032 12.8905 108.032 11.461C108.032 10.1013 108.878 9.20569 110.071 9.20569C111.263 9.20569 112.101 10.0995 112.101 11.459C112.101 12.8887 111.263 13.7586 110.07 13.7586Z' fill='white'/%3E%3Cpath d='M118.06 7.94098C119.491 7.94098 120.978 8.33337 120.978 11.1366V14.893H120.063C119.608 14.893 119.238 14.524 119.238 14.0689V10.9965C119.238 9.66506 118.747 9.16047 117.891 9.16047C117.414 9.16047 116.797 9.52486 116.502 9.81915V14.069C116.502 14.1773 116.481 14.2845 116.44 14.3845C116.398 14.4845 116.337 14.5753 116.261 14.6519C116.184 14.7284 116.093 14.7891 115.993 14.8305C115.893 14.8719 115.786 14.8931 115.678 14.8931H114.847V8.10918H115.773C115.932 8.10914 116.087 8.16315 116.212 8.26242C116.337 8.36168 116.424 8.50033 116.46 8.65577C116.881 8.19328 117.428 7.94098 118.06 7.94098ZM122.854 8.09713C123.024 8.09708 123.19 8.1496 123.329 8.2475C123.468 8.34541 123.574 8.48391 123.631 8.64405L125.133 12.8486L126.635 8.64415C126.692 8.48402 126.798 8.34551 126.937 8.2476C127.076 8.1497 127.242 8.09718 127.412 8.09724H128.598L126.152 14.3567C126.091 14.5112 125.986 14.6439 125.849 14.7374C125.711 14.831 125.549 14.881 125.383 14.8809H124.333L121.668 8.09713H122.854Z' fill='white'/%3E%3Cpath d='M135.085 14.5514C134.566 14.7616 133.513 15.0416 132.418 15.0416C130.496 15.0416 129.024 13.9345 129.024 11.4396C129.024 9.19701 130.451 7.99792 132.191 7.99792C134.338 7.99792 135.254 9.4378 135.158 11.3979C135.139 11.8029 134.786 12.0983 134.38 12.0983H130.679C130.763 13.1916 131.562 13.7662 132.615 13.7662C133.028 13.7662 133.462 13.7452 133.983 13.6481C134.535 13.545 135.085 13.9375 135.085 14.4985V14.5514ZM133.673 10.949C133.785 9.87621 133.061 9.28752 132.191 9.28752C131.321 9.28752 130.734 9.93979 130.679 10.9489L133.673 10.949Z' fill='white'/%3E%3Cpath d='M137.345 8.11122C137.497 8.11118 137.645 8.16229 137.765 8.25635C137.884 8.35041 137.969 8.48197 138.005 8.62993C138.566 8.20932 139.268 7.94303 139.759 7.94303C139.801 7.94303 140.068 7.94303 140.489 7.99913V8.7265C140.489 9.11748 140.15 9.4147 139.759 9.4147C139.31 9.4147 138.651 9.5829 138.131 9.8773V14.8951H136.462V8.11112L137.345 8.11122ZM156.6 14.0508V8.09104H155.769C155.314 8.09104 154.944 8.45999 154.944 8.9151V14.8748H155.775C156.23 14.8748 156.6 14.5058 156.6 14.0508ZM158.857 12.9447V9.34254H157.749V8.91912C157.749 8.46401 158.118 8.09506 158.574 8.09506H158.857V6.56739L160.499 6.10479V8.09506H161.986V8.51848C161.986 8.97359 161.617 9.34254 161.161 9.34254H160.499V12.7345C160.499 13.2566 160.795 13.44 161.177 13.503C161.626 13.5774 162 13.9024 162 14.3574V14.977C160.446 14.977 158.857 14.9086 158.857 12.9447ZM98.1929 10.1124C98.2033 6.94046 100.598 5.16809 102.895 5.16809C104.171 5.16809 105.342 5.44285 106.304 6.12953L105.914 6.6631C105.654 7.02011 105.16 7.16194 104.749 6.99949C104.169 6.7702 103.622 6.7218 103.215 6.7218C101.335 6.7218 99.9169 7.92849 99.9068 10.1123C99.9169 12.2959 101.335 13.5201 103.215 13.5201C103.622 13.5201 104.169 13.4717 104.749 13.2424C105.16 13.0799 105.654 13.2046 105.914 13.5615L106.304 14.0952C105.342 14.7819 104.171 15.0566 102.895 15.0566C100.598 15.0566 98.2033 13.2842 98.1929 10.1124ZM147.619 5.21768C148.074 5.21768 148.444 5.58663 148.444 6.04174V9.81968L151.82 5.58131C151.897 5.47733 151.997 5.39282 152.112 5.3346C152.227 5.27638 152.355 5.24607 152.484 5.24611H153.984L150.166 10.0615L153.984 14.8749H152.484C152.355 14.8749 152.227 14.8446 152.112 14.7864C151.997 14.7281 151.897 14.6436 151.82 14.5397L148.444 10.3025V14.0508C148.444 14.5059 148.074 14.8749 147.619 14.8749H146.746V5.21768H147.619Z' fill='white'/%3E%3Cpath d='M0.773438 6.5752H2.68066C3.56543 6.5752 4.2041 6.7041 4.59668 6.96191C4.99219 7.21973 5.18994 7.62695 5.18994 8.18359C5.18994 8.55859 5.09326 8.87061 4.8999 9.11963C4.70654 9.36865 4.42822 9.52539 4.06494 9.58984V9.63379C4.51611 9.71875 4.84717 9.88721 5.05811 10.1392C5.27197 10.3882 5.37891 10.7266 5.37891 11.1543C5.37891 11.7314 5.17676 12.1841 4.77246 12.5122C4.37109 12.8374 3.81152 13 3.09375 13H0.773438V6.5752ZM1.82373 9.22949H2.83447C3.27393 9.22949 3.59473 9.16064 3.79688 9.02295C3.99902 8.88232 4.1001 8.64502 4.1001 8.31104C4.1001 8.00928 3.99023 7.79102 3.77051 7.65625C3.55371 7.52148 3.20801 7.4541 2.7334 7.4541H1.82373V9.22949ZM1.82373 10.082V12.1167H2.93994C3.37939 12.1167 3.71045 12.0332 3.93311 11.8662C4.15869 11.6963 4.27148 11.4297 4.27148 11.0664C4.27148 10.7324 4.15723 10.4849 3.92871 10.3237C3.7002 10.1626 3.35303 10.082 2.88721 10.082H1.82373Z' fill='white'/%3E%3Cpath d='M13.011 6.5752V10.7324C13.011 11.207 12.9084 11.623 12.7034 11.9805C12.5012 12.335 12.2068 12.6089 11.8201 12.8022C11.4363 12.9927 10.9763 13.0879 10.4402 13.0879C9.6433 13.0879 9.02368 12.877 8.5813 12.4551C8.13892 12.0332 7.91772 11.4531 7.91772 10.7148V6.5752H8.9724V10.6401C8.9724 11.1704 9.09546 11.5615 9.34155 11.8135C9.58765 12.0654 9.96557 12.1914 10.4753 12.1914C11.4656 12.1914 11.9607 11.6714 11.9607 10.6313V6.5752H13.011Z' fill='white'/%3E%3Cpath d='M15.9146 13V6.5752H16.9649V13H15.9146Z' fill='white'/%3E%3Cpath d='M19.9255 13V6.5752H20.9758V12.0991H23.696V13H19.9255Z' fill='white'/%3E%3Cpath d='M28.2828 13H27.2325V7.47607H25.3428V6.5752H30.1724V7.47607H28.2828V13Z' fill='white'/%3E%3Cpath d='M41.9472 13H40.8046L39.7148 9.16796C39.6679 9.00097 39.6093 8.76074 39.539 8.44727C39.4687 8.13086 39.4262 7.91113 39.4116 7.78809C39.3823 7.97559 39.3339 8.21875 39.2665 8.51758C39.2021 8.81641 39.1479 9.03905 39.1039 9.18554L38.0405 13H36.8979L36.0673 9.7832L35.2236 6.5752H36.2958L37.2143 10.3193C37.3578 10.9199 37.4604 11.4502 37.5219 11.9102C37.5541 11.6611 37.6025 11.3828 37.6669 11.0752C37.7314 10.7676 37.79 10.5186 37.8427 10.3281L38.8886 6.5752H39.9301L41.0024 10.3457C41.1049 10.6943 41.2133 11.2158 41.3276 11.9102C41.3715 11.4912 41.477 10.958 41.644 10.3105L42.558 6.5752H43.6215L41.9472 13Z' fill='white'/%3E%3Cpath d='M45.7957 13V6.5752H46.846V13H45.7957Z' fill='white'/%3E%3Cpath d='M52.0258 13H50.9755V7.47607H49.0859V6.5752H53.9155V7.47607H52.0258V13Z' fill='white'/%3E%3Cpath d='M61.2312 13H60.1765V10.104H57.2146V13H56.1643V6.5752H57.2146V9.20312H60.1765V6.5752H61.2312V13Z' fill='white'/%3E%3C/svg%3E&quot;);}@-webkit-keyframes formkit-bouncedelay-formkit-form-data-uid-cc7bf1c6b3-{0%,80%,100%{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}}@keyframes formkit-bouncedelay-formkit-form-data-uid-cc7bf1c6b3-{0%,80%,100%{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #e1e1e1;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .seva-custom-content{padding:15px;font-size:16px;color:#fff;mix-blend-mode:difference;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-modal.guard{max-width:420px;width:100%;} .formkit-form[data-uid=&quot;cc7bf1c6b3&quot;]{border:1px solid #e3e3e3;max-width:700px;position:relative;overflow:hidden;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-background{width:100%;height:100%;position:absolute;top:0;left:0;background-size:cover;background-position:center;opacity:0.3;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-style=&quot;minimal&quot;]{padding:20px;width:100%;position:relative;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-header{margin:0 0 27px 0;text-align:center;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-subheader{margin:18px 0;text-align:center;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-guarantee{font-size:13px;margin:10px 0 15px 0;text-align:center;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-guarantee &gt; p{margin:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit-container{margin-bottom:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-fields{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:25px auto 0 auto;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-field{min-width:220px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-field,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit{margin:0 0 15px 0;-webkit-flex:1 0 100%;-ms-flex:1 0 100%;flex:1 0 100%;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] [data-style=&quot;minimal&quot;]{padding:40px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;]{margin-left:-5px;margin-right:-5px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-field,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-submit{margin:0 5px 15px 5px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-field{-webkit-flex:100 1 auto;-ms-flex:100 1 auto;flex:100 1 auto;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-submit{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;} &lt;/style&gt;&lt;/form&gt;
&lt;/div&gt;
&lt;div class=&quot;dark-mode&quot; style=&quot;display: none;&quot;&gt;
  &lt;form action=&quot;https://app.convertkit.com/forms/5805241/subscriptions&quot; style=&quot;background-color: rgb(7, 54, 66); border-radius: 4px;&quot; class=&quot;seva-form formkit-form&quot; method=&quot;post&quot; data-sv-form=&quot;5805241&quot; data-uid=&quot;49ba79c2cb&quot; data-format=&quot;inline&quot; data-version=&quot;5&quot; data-options=&quot;{&amp;quot;settings&amp;quot;:{&amp;quot;after_subscribe&amp;quot;:{&amp;quot;action&amp;quot;:&amp;quot;message&amp;quot;,&amp;quot;success_message&amp;quot;:&amp;quot;Success! Now check your email to confirm your subscription.&amp;quot;,&amp;quot;redirect_url&amp;quot;:&amp;quot;&amp;quot;},&amp;quot;analytics&amp;quot;:{&amp;quot;google&amp;quot;:null,&amp;quot;fathom&amp;quot;:null,&amp;quot;facebook&amp;quot;:null,&amp;quot;segment&amp;quot;:null,&amp;quot;pinterest&amp;quot;:null,&amp;quot;sparkloop&amp;quot;:null,&amp;quot;googletagmanager&amp;quot;:null},&amp;quot;modal&amp;quot;:{&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15},&amp;quot;powered_by&amp;quot;:{&amp;quot;show&amp;quot;:true,&amp;quot;url&amp;quot;:&amp;quot;https://convertkit.com/features/forms?utm_campaign=poweredby&amp;amp;utm_content=form&amp;amp;utm_medium=referral&amp;amp;utm_source=dynamic&amp;quot;},&amp;quot;recaptcha&amp;quot;:{&amp;quot;enabled&amp;quot;:false},&amp;quot;return_visitor&amp;quot;:{&amp;quot;action&amp;quot;:&amp;quot;show&amp;quot;,&amp;quot;custom_content&amp;quot;:&amp;quot;&amp;quot;},&amp;quot;slide_in&amp;quot;:{&amp;quot;display_in&amp;quot;:&amp;quot;bottom_right&amp;quot;,&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15},&amp;quot;sticky_bar&amp;quot;:{&amp;quot;display_in&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15}},&amp;quot;version&amp;quot;:&amp;quot;5&amp;quot;}&quot; min-width=&quot;400 500 600 700 800&quot;&gt;&lt;div style=&quot;opacity: 0.2;&quot; class=&quot;formkit-background&quot;&gt;&lt;/div&gt;&lt;div data-style=&quot;minimal&quot;&gt;&lt;div class=&quot;formkit-header&quot; style=&quot;color: rgb(161, 208, 193); font-size: 27px; font-weight: 700;&quot; data-element=&quot;header&quot;&gt;&lt;h2&gt;Join the Newsletter&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;formkit-subheader&quot; style=&quot;color: rgb(161, 208, 193); font-size: 18px;&quot; data-element=&quot;subheader&quot;&gt;Subscribe to get our latest content by email.&lt;/div&gt;&lt;ul class=&quot;formkit-alert formkit-alert-error&quot; data-element=&quot;errors&quot; data-group=&quot;alert&quot;&gt;&lt;/ul&gt;&lt;div data-element=&quot;fields&quot; data-stacked=&quot;false&quot; class=&quot;seva-fields formkit-fields&quot;&gt;&lt;div class=&quot;formkit-field&quot;&gt;&lt;input class=&quot;formkit-input&quot; name=&quot;email_address&quot; style=&quot;border-color: rgb(89, 89, 88); color: rgb(0, 0, 0); border-radius: 4px; font-weight: 400;&quot; aria-label=&quot;Email Address&quot; placeholder=&quot;Email Address&quot; required=&quot;&quot; type=&quot;email&quot; /&gt;&lt;/div&gt;&lt;button data-element=&quot;submit&quot; class=&quot;formkit-submit formkit-submit&quot; style=&quot;background-color: rgb(130, 130, 128); color: rgb(255, 255, 255); border-radius: 4px; font-weight: 400;&quot;&gt;&lt;div class=&quot;formkit-spinner&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;&quot;&gt;Subscribe&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;formkit-guarantee&quot; style=&quot;color: rgb(161, 208, 193); font-size: 13px; font-weight: 400;&quot; data-element=&quot;guarantee&quot;&gt;We won't send you spam. Unsubscribe at any time.&lt;/div&gt;&lt;div class=&quot;formkit-powered-by-convertkit-container&quot;&gt;&lt;a href=&quot;https://convertkit.com/features/forms?utm_campaign=poweredby&amp;amp;utm_content=form&amp;amp;utm_medium=referral&amp;amp;utm_source=dynamic&quot; data-element=&quot;powered-by&quot; class=&quot;formkit-powered-by-convertkit&quot; data-variant=&quot;light&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Built with ConvertKit&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;.formkit-form[data-uid=&quot;49ba79c2cb&quot;] *{box-sizing:border-box;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] legend{border:none;font-size:inherit;margin-bottom:10px;padding:0;position:relative;display:table;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] fieldset{border:0;padding:0.01em 0 0 0;margin:0;min-width:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] body:not(:-moz-handler-blocked) fieldset{display:table-cell;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h1,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h2,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h3,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h4,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h5,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h6{color:inherit;font-size:inherit;font-weight:inherit;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h2{font-size:1.5em;margin:1em 0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h3{font-size:1.17em;margin:1em 0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] p{color:inherit;font-size:inherit;font-weight:inherit;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] ol:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] ul:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] blockquote:not([template-default]){text-align:left;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] p:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] hr:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] blockquote:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] ol:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] ul:not([template-default]){color:inherit;font-style:initial;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .ordered-list,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .unordered-list{list-style-position:outside !important;padding-left:1em;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .list-item{padding-left:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][data-format=&quot;modal&quot;]{display:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][data-format=&quot;slide in&quot;]{display:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][data-format=&quot;sticky bar&quot;]{display:none;}.formkit-sticky-bar .formkit-form[data-uid=&quot;49ba79c2cb&quot;][data-format=&quot;sticky bar&quot;]{display:block;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-select,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-checkboxes{width:100%;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit{border:0;border-radius:5px;color:#ffffff;cursor:pointer;display:inline-block;text-align:center;font-size:15px;font-weight:500;cursor:pointer;margin-bottom:15px;overflow:hidden;padding:0;position:relative;vertical-align:middle;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button:hover,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit:hover,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button:focus,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit:focus{outline:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button:hover &gt; span,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit:hover &gt; span,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button:focus &gt; span,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit:focus &gt; span{background-color:rgba(0,0,0,0.1);}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button &gt; span,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit &gt; span{display:block;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;padding:12px 24px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input{background:#ffffff;font-size:15px;padding:12px;border:1px solid #e3e3e3;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;line-height:1.4;margin:0;-webkit-transition:border-color ease-out 300ms;transition:border-color ease-out 300ms;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input:focus{outline:none;border-color:#1677be;-webkit-transition:border-color ease 300ms;transition:border-color ease 300ms;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input::-webkit-input-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input::-moz-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input:-ms-input-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input::placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;dropdown&quot;]{position:relative;display:inline-block;width:100%;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;dropdown&quot;]::before{content:&quot;&quot;;top:calc(50% - 2.5px);right:10px;position:absolute;pointer-events:none;border-color:#4f4f4f transparent transparent transparent;border-style:solid;border-width:6px 6px 0 6px;height:0;width:0;z-index:999;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;dropdown&quot;] select{height:auto;width:100%;cursor:pointer;color:#333333;line-height:1.4;margin-bottom:0;padding:0 6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:15px;padding:12px;padding-right:25px;border:1px solid #e3e3e3;background:#ffffff;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;dropdown&quot;] select:focus{outline:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;]{text-align:left;margin:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;]{margin-bottom:10px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] *{cursor:pointer;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;]:last-of-type{margin-bottom:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]{display:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;] + label::after{content:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]:checked + label::after{border-color:#ffffff;content:&quot;&quot;;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]:checked + label::before{background:#10bf7a;border-color:#10bf7a;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label{position:relative;display:inline-block;padding-left:28px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::before,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::after{position:absolute;content:&quot;&quot;;display:inline-block;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::before{height:16px;width:16px;border:1px solid #e3e3e3;background:#ffffff;left:0px;top:3px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::after{height:4px;width:8px;border-left:2px solid #4d4d4d;border-bottom:2px solid #4d4d4d;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);left:4px;top:8px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-alert{background:#f9fafb;border:1px solid #e3e3e3;border-radius:5px;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;list-style:none;margin:25px auto;padding:12px;text-align:center;width:100%;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-alert:empty{display:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-alert-success{background:#d3fbeb;border-color:#10bf7a;color:#0c905c;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-alert-error{background:#fde8e2;border-color:#f2643b;color:#ea4110;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-spinner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:0px;width:0px;margin:0 auto;position:absolute;top:0;left:0;right:0;width:0px;overflow:hidden;text-align:center;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-spinner &gt; div{margin:auto;width:12px;height:12px;background-color:#fff;opacity:0.3;border-radius:100%;display:inline-block;-webkit-animation:formkit-bouncedelay-formkit-form-data-uid-49ba79c2cb- 1.4s infinite ease-in-out both;animation:formkit-bouncedelay-formkit-form-data-uid-49ba79c2cb- 1.4s infinite ease-in-out both;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-spinner &gt; div:nth-child(1){-webkit-animation-delay:-0.32s;animation-delay:-0.32s;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-spinner &gt; div:nth-child(2){-webkit-animation-delay:-0.16s;animation-delay:-0.16s;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit[data-active] .formkit-spinner{opacity:1;height:100%;width:50px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit[data-active] .formkit-spinner ~ span{opacity:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by[data-active=&quot;false&quot;]{opacity:0.35;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;z-index:5;margin:10px 0;position:relative;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit-container[data-active=&quot;false&quot;]{opacity:0.35;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#ffffff;border:1px solid #dde2e7;border-radius:4px;color:#373f45;cursor:pointer;display:block;height:36px;margin:0 auto;opacity:0.95;padding:0;-webkit-text-decoration:none;text-decoration:none;text-indent:100%;-webkit-transition:ease-in-out all 200ms;transition:ease-in-out all 200ms;white-space:nowrap;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:190px;background-repeat:no-repeat;background-position:center;background-image:url(&quot;data:image/svg+xml;charset=utf8,%3Csvg width='162' height='20' viewBox='0 0 162 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M83.0561 15.2457C86.675 15.2457 89.4722 12.5154 89.4722 9.14749C89.4722 5.99211 86.8443 4.06563 85.1038 4.06563C82.6801 4.06563 80.7373 5.76407 80.4605 8.28551C80.4092 8.75244 80.0387 9.14403 79.5686 9.14069C78.7871 9.13509 77.6507 9.12841 76.9314 9.13092C76.6217 9.13199 76.3658 8.88106 76.381 8.57196C76.4895 6.38513 77.2218 4.3404 78.618 2.76974C80.1695 1.02445 82.4289 0 85.1038 0C89.5979 0 93.8406 4.07791 93.8406 9.14749C93.8406 14.7608 89.1832 19.3113 83.1517 19.3113C78.8502 19.3113 74.5179 16.5041 73.0053 12.5795C72.9999 12.565 72.9986 12.5492 73.0015 12.534C73.0218 12.4179 73.0617 12.3118 73.1011 12.2074C73.1583 12.0555 73.2143 11.907 73.2062 11.7359L73.18 11.1892C73.174 11.0569 73.2075 10.9258 73.2764 10.8127C73.3452 10.6995 73.4463 10.6094 73.5666 10.554L73.7852 10.4523C73.9077 10.3957 74.0148 10.3105 74.0976 10.204C74.1803 10.0974 74.2363 9.97252 74.2608 9.83983C74.3341 9.43894 74.6865 9.14749 75.0979 9.14749C75.7404 9.14749 76.299 9.57412 76.5088 10.1806C77.5188 13.1 79.1245 15.2457 83.0561 15.2457Z' fill='%23373F45'/%3E%3Cpath d='M155.758 6.91365C155.028 6.91365 154.804 6.47916 154.804 5.98857C154.804 5.46997 154.986 5.06348 155.758 5.06348C156.53 5.06348 156.712 5.46997 156.712 5.98857C156.712 6.47905 156.516 6.91365 155.758 6.91365ZM142.441 12.9304V9.32833L141.415 9.32323V8.90392C141.415 8.44719 141.786 8.07758 142.244 8.07986L142.441 8.08095V6.55306L144.082 6.09057V8.08073H145.569V8.50416C145.569 8.61242 145.548 8.71961 145.506 8.81961C145.465 8.91961 145.404 9.01047 145.328 9.08699C145.251 9.16351 145.16 9.2242 145.06 9.26559C144.96 9.30698 144.853 9.32826 144.745 9.32822H144.082V12.7201C144.082 13.2423 144.378 13.4256 144.76 13.4887C145.209 13.5629 145.583 13.888 145.583 14.343V14.9626C144.029 14.9626 142.441 14.8942 142.441 12.9304Z' fill='%23373F45'/%3E%3Cpath d='M110.058 7.92554C108.417 7.88344 106.396 8.92062 106.396 11.5137C106.396 14.0646 108.417 15.0738 110.058 15.0318C111.742 15.0738 113.748 14.0646 113.748 11.5137C113.748 8.92062 111.742 7.88344 110.058 7.92554ZM110.07 13.7586C108.878 13.7586 108.032 12.8905 108.032 11.461C108.032 10.1013 108.878 9.20569 110.071 9.20569C111.263 9.20569 112.101 10.0995 112.101 11.459C112.101 12.8887 111.263 13.7586 110.07 13.7586Z' fill='%23373F45'/%3E%3Cpath d='M118.06 7.94098C119.491 7.94098 120.978 8.33337 120.978 11.1366V14.893H120.063C119.608 14.893 119.238 14.524 119.238 14.0689V10.9965C119.238 9.66506 118.747 9.16047 117.891 9.16047C117.414 9.16047 116.797 9.52486 116.502 9.81915V14.069C116.502 14.1773 116.481 14.2845 116.44 14.3845C116.398 14.4845 116.337 14.5753 116.261 14.6519C116.184 14.7284 116.093 14.7891 115.993 14.8305C115.893 14.8719 115.786 14.8931 115.678 14.8931H114.847V8.10918H115.773C115.932 8.10914 116.087 8.16315 116.212 8.26242C116.337 8.36168 116.424 8.50033 116.46 8.65577C116.881 8.19328 117.428 7.94098 118.06 7.94098ZM122.854 8.09713C123.024 8.09708 123.19 8.1496 123.329 8.2475C123.468 8.34541 123.574 8.48391 123.631 8.64405L125.133 12.8486L126.635 8.64415C126.692 8.48402 126.798 8.34551 126.937 8.2476C127.076 8.1497 127.242 8.09718 127.412 8.09724H128.598L126.152 14.3567C126.091 14.5112 125.986 14.6439 125.849 14.7374C125.711 14.831 125.549 14.881 125.383 14.8809H124.333L121.668 8.09713H122.854Z' fill='%23373F45'/%3E%3Cpath d='M135.085 14.5514C134.566 14.7616 133.513 15.0416 132.418 15.0416C130.496 15.0416 129.024 13.9345 129.024 11.4396C129.024 9.19701 130.451 7.99792 132.191 7.99792C134.338 7.99792 135.254 9.4378 135.158 11.3979C135.139 11.8029 134.786 12.0983 134.38 12.0983H130.679C130.763 13.1916 131.562 13.7662 132.615 13.7662C133.028 13.7662 133.462 13.7452 133.983 13.6481C134.535 13.545 135.085 13.9375 135.085 14.4985V14.5514ZM133.673 10.949C133.785 9.87621 133.061 9.28752 132.191 9.28752C131.321 9.28752 130.734 9.93979 130.679 10.9489L133.673 10.949Z' fill='%23373F45'/%3E%3Cpath d='M137.345 8.11122C137.497 8.11118 137.645 8.16229 137.765 8.25635C137.884 8.35041 137.969 8.48197 138.005 8.62993C138.566 8.20932 139.268 7.94303 139.759 7.94303C139.801 7.94303 140.068 7.94303 140.489 7.99913V8.7265C140.489 9.11748 140.15 9.4147 139.759 9.4147C139.31 9.4147 138.651 9.5829 138.131 9.8773V14.8951H136.462V8.11112L137.345 8.11122ZM156.6 14.0508V8.09104H155.769C155.314 8.09104 154.944 8.45999 154.944 8.9151V14.8748H155.775C156.23 14.8748 156.6 14.5058 156.6 14.0508ZM158.857 12.9447V9.34254H157.749V8.91912C157.749 8.46401 158.118 8.09506 158.574 8.09506H158.857V6.56739L160.499 6.10479V8.09506H161.986V8.51848C161.986 8.97359 161.617 9.34254 161.161 9.34254H160.499V12.7345C160.499 13.2566 160.795 13.44 161.177 13.503C161.626 13.5774 162 13.9024 162 14.3574V14.977C160.446 14.977 158.857 14.9086 158.857 12.9447ZM98.1929 10.1124C98.2033 6.94046 100.598 5.16809 102.895 5.16809C104.171 5.16809 105.342 5.44285 106.304 6.12953L105.914 6.6631C105.654 7.02011 105.16 7.16194 104.749 6.99949C104.169 6.7702 103.622 6.7218 103.215 6.7218C101.335 6.7218 99.9169 7.92849 99.9068 10.1123C99.9169 12.2959 101.335 13.5201 103.215 13.5201C103.622 13.5201 104.169 13.4717 104.749 13.2424C105.16 13.0799 105.654 13.2046 105.914 13.5615L106.304 14.0952C105.342 14.7819 104.171 15.0566 102.895 15.0566C100.598 15.0566 98.2033 13.2842 98.1929 10.1124ZM147.619 5.21768C148.074 5.21768 148.444 5.58663 148.444 6.04174V9.81968L151.82 5.58131C151.897 5.47733 151.997 5.39282 152.112 5.3346C152.227 5.27638 152.355 5.24607 152.484 5.24611H153.984L150.166 10.0615L153.984 14.8749H152.484C152.355 14.8749 152.227 14.8446 152.112 14.7864C151.997 14.7281 151.897 14.6436 151.82 14.5397L148.444 10.3025V14.0508C148.444 14.5059 148.074 14.8749 147.619 14.8749H146.746V5.21768H147.619Z' fill='%23373F45'/%3E%3Cpath d='M0.773438 6.5752H2.68066C3.56543 6.5752 4.2041 6.7041 4.59668 6.96191C4.99219 7.21973 5.18994 7.62695 5.18994 8.18359C5.18994 8.55859 5.09326 8.87061 4.8999 9.11963C4.70654 9.36865 4.42822 9.52539 4.06494 9.58984V9.63379C4.51611 9.71875 4.84717 9.88721 5.05811 10.1392C5.27197 10.3882 5.37891 10.7266 5.37891 11.1543C5.37891 11.7314 5.17676 12.1841 4.77246 12.5122C4.37109 12.8374 3.81152 13 3.09375 13H0.773438V6.5752ZM1.82373 9.22949H2.83447C3.27393 9.22949 3.59473 9.16064 3.79688 9.02295C3.99902 8.88232 4.1001 8.64502 4.1001 8.31104C4.1001 8.00928 3.99023 7.79102 3.77051 7.65625C3.55371 7.52148 3.20801 7.4541 2.7334 7.4541H1.82373V9.22949ZM1.82373 10.082V12.1167H2.93994C3.37939 12.1167 3.71045 12.0332 3.93311 11.8662C4.15869 11.6963 4.27148 11.4297 4.27148 11.0664C4.27148 10.7324 4.15723 10.4849 3.92871 10.3237C3.7002 10.1626 3.35303 10.082 2.88721 10.082H1.82373Z' fill='%23373F45'/%3E%3Cpath d='M13.011 6.5752V10.7324C13.011 11.207 12.9084 11.623 12.7034 11.9805C12.5012 12.335 12.2068 12.6089 11.8201 12.8022C11.4363 12.9927 10.9763 13.0879 10.4402 13.0879C9.6433 13.0879 9.02368 12.877 8.5813 12.4551C8.13892 12.0332 7.91772 11.4531 7.91772 10.7148V6.5752H8.9724V10.6401C8.9724 11.1704 9.09546 11.5615 9.34155 11.8135C9.58765 12.0654 9.96557 12.1914 10.4753 12.1914C11.4656 12.1914 11.9607 11.6714 11.9607 10.6313V6.5752H13.011Z' fill='%23373F45'/%3E%3Cpath d='M15.9146 13V6.5752H16.9649V13H15.9146Z' fill='%23373F45'/%3E%3Cpath d='M19.9255 13V6.5752H20.9758V12.0991H23.696V13H19.9255Z' fill='%23373F45'/%3E%3Cpath d='M28.2828 13H27.2325V7.47607H25.3428V6.5752H30.1724V7.47607H28.2828V13Z' fill='%23373F45'/%3E%3Cpath d='M41.9472 13H40.8046L39.7148 9.16796C39.6679 9.00097 39.6093 8.76074 39.539 8.44727C39.4687 8.13086 39.4262 7.91113 39.4116 7.78809C39.3823 7.97559 39.3339 8.21875 39.2665 8.51758C39.2021 8.81641 39.1479 9.03905 39.1039 9.18554L38.0405 13H36.8979L36.0673 9.7832L35.2236 6.5752H36.2958L37.2143 10.3193C37.3578 10.9199 37.4604 11.4502 37.5219 11.9102C37.5541 11.6611 37.6025 11.3828 37.6669 11.0752C37.7314 10.7676 37.79 10.5186 37.8427 10.3281L38.8886 6.5752H39.9301L41.0024 10.3457C41.1049 10.6943 41.2133 11.2158 41.3276 11.9102C41.3715 11.4912 41.477 10.958 41.644 10.3105L42.558 6.5752H43.6215L41.9472 13Z' fill='%23373F45'/%3E%3Cpath d='M45.7957 13V6.5752H46.846V13H45.7957Z' fill='%23373F45'/%3E%3Cpath d='M52.0258 13H50.9755V7.47607H49.0859V6.5752H53.9155V7.47607H52.0258V13Z' fill='%23373F45'/%3E%3Cpath d='M61.2312 13H60.1765V10.104H57.2146V13H56.1643V6.5752H57.2146V9.20312H60.1765V6.5752H61.2312V13Z' fill='%23373F45'/%3E%3C/svg%3E&quot;);}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit:hover,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit:focus{background-color:#ffffff;-webkit-transform:scale(1.025) perspective(1px);-ms-transform:scale(1.025) perspective(1px);transform:scale(1.025) perspective(1px);opacity:1;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit[data-variant=&quot;dark&quot;],.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit[data-variant=&quot;light&quot;]{background-color:transparent;border-color:transparent;width:166px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit[data-variant=&quot;light&quot;]{color:#ffffff;background-image:url(&quot;data:image/svg+xml;charset=utf8,%3Csvg width='162' height='20' viewBox='0 0 162 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M83.0561 15.2457C86.675 15.2457 89.4722 12.5154 89.4722 9.14749C89.4722 5.99211 86.8443 4.06563 85.1038 4.06563C82.6801 4.06563 80.7373 5.76407 80.4605 8.28551C80.4092 8.75244 80.0387 9.14403 79.5686 9.14069C78.7871 9.13509 77.6507 9.12841 76.9314 9.13092C76.6217 9.13199 76.3658 8.88106 76.381 8.57196C76.4895 6.38513 77.2218 4.3404 78.618 2.76974C80.1695 1.02445 82.4289 0 85.1038 0C89.5979 0 93.8406 4.07791 93.8406 9.14749C93.8406 14.7608 89.1832 19.3113 83.1517 19.3113C78.8502 19.3113 74.5179 16.5041 73.0053 12.5795C72.9999 12.565 72.9986 12.5492 73.0015 12.534C73.0218 12.4179 73.0617 12.3118 73.1011 12.2074C73.1583 12.0555 73.2143 11.907 73.2062 11.7359L73.18 11.1892C73.174 11.0569 73.2075 10.9258 73.2764 10.8127C73.3452 10.6995 73.4463 10.6094 73.5666 10.554L73.7852 10.4523C73.9077 10.3957 74.0148 10.3105 74.0976 10.204C74.1803 10.0974 74.2363 9.97252 74.2608 9.83983C74.3341 9.43894 74.6865 9.14749 75.0979 9.14749C75.7404 9.14749 76.299 9.57412 76.5088 10.1806C77.5188 13.1 79.1245 15.2457 83.0561 15.2457Z' fill='white'/%3E%3Cpath d='M155.758 6.91365C155.028 6.91365 154.804 6.47916 154.804 5.98857C154.804 5.46997 154.986 5.06348 155.758 5.06348C156.53 5.06348 156.712 5.46997 156.712 5.98857C156.712 6.47905 156.516 6.91365 155.758 6.91365ZM142.441 12.9304V9.32833L141.415 9.32323V8.90392C141.415 8.44719 141.786 8.07758 142.244 8.07986L142.441 8.08095V6.55306L144.082 6.09057V8.08073H145.569V8.50416C145.569 8.61242 145.548 8.71961 145.506 8.81961C145.465 8.91961 145.404 9.01047 145.328 9.08699C145.251 9.16351 145.16 9.2242 145.06 9.26559C144.96 9.30698 144.853 9.32826 144.745 9.32822H144.082V12.7201C144.082 13.2423 144.378 13.4256 144.76 13.4887C145.209 13.5629 145.583 13.888 145.583 14.343V14.9626C144.029 14.9626 142.441 14.8942 142.441 12.9304Z' fill='white'/%3E%3Cpath d='M110.058 7.92554C108.417 7.88344 106.396 8.92062 106.396 11.5137C106.396 14.0646 108.417 15.0738 110.058 15.0318C111.742 15.0738 113.748 14.0646 113.748 11.5137C113.748 8.92062 111.742 7.88344 110.058 7.92554ZM110.07 13.7586C108.878 13.7586 108.032 12.8905 108.032 11.461C108.032 10.1013 108.878 9.20569 110.071 9.20569C111.263 9.20569 112.101 10.0995 112.101 11.459C112.101 12.8887 111.263 13.7586 110.07 13.7586Z' fill='white'/%3E%3Cpath d='M118.06 7.94098C119.491 7.94098 120.978 8.33337 120.978 11.1366V14.893H120.063C119.608 14.893 119.238 14.524 119.238 14.0689V10.9965C119.238 9.66506 118.747 9.16047 117.891 9.16047C117.414 9.16047 116.797 9.52486 116.502 9.81915V14.069C116.502 14.1773 116.481 14.2845 116.44 14.3845C116.398 14.4845 116.337 14.5753 116.261 14.6519C116.184 14.7284 116.093 14.7891 115.993 14.8305C115.893 14.8719 115.786 14.8931 115.678 14.8931H114.847V8.10918H115.773C115.932 8.10914 116.087 8.16315 116.212 8.26242C116.337 8.36168 116.424 8.50033 116.46 8.65577C116.881 8.19328 117.428 7.94098 118.06 7.94098ZM122.854 8.09713C123.024 8.09708 123.19 8.1496 123.329 8.2475C123.468 8.34541 123.574 8.48391 123.631 8.64405L125.133 12.8486L126.635 8.64415C126.692 8.48402 126.798 8.34551 126.937 8.2476C127.076 8.1497 127.242 8.09718 127.412 8.09724H128.598L126.152 14.3567C126.091 14.5112 125.986 14.6439 125.849 14.7374C125.711 14.831 125.549 14.881 125.383 14.8809H124.333L121.668 8.09713H122.854Z' fill='white'/%3E%3Cpath d='M135.085 14.5514C134.566 14.7616 133.513 15.0416 132.418 15.0416C130.496 15.0416 129.024 13.9345 129.024 11.4396C129.024 9.19701 130.451 7.99792 132.191 7.99792C134.338 7.99792 135.254 9.4378 135.158 11.3979C135.139 11.8029 134.786 12.0983 134.38 12.0983H130.679C130.763 13.1916 131.562 13.7662 132.615 13.7662C133.028 13.7662 133.462 13.7452 133.983 13.6481C134.535 13.545 135.085 13.9375 135.085 14.4985V14.5514ZM133.673 10.949C133.785 9.87621 133.061 9.28752 132.191 9.28752C131.321 9.28752 130.734 9.93979 130.679 10.9489L133.673 10.949Z' fill='white'/%3E%3Cpath d='M137.345 8.11122C137.497 8.11118 137.645 8.16229 137.765 8.25635C137.884 8.35041 137.969 8.48197 138.005 8.62993C138.566 8.20932 139.268 7.94303 139.759 7.94303C139.801 7.94303 140.068 7.94303 140.489 7.99913V8.7265C140.489 9.11748 140.15 9.4147 139.759 9.4147C139.31 9.4147 138.651 9.5829 138.131 9.8773V14.8951H136.462V8.11112L137.345 8.11122ZM156.6 14.0508V8.09104H155.769C155.314 8.09104 154.944 8.45999 154.944 8.9151V14.8748H155.775C156.23 14.8748 156.6 14.5058 156.6 14.0508ZM158.857 12.9447V9.34254H157.749V8.91912C157.749 8.46401 158.118 8.09506 158.574 8.09506H158.857V6.56739L160.499 6.10479V8.09506H161.986V8.51848C161.986 8.97359 161.617 9.34254 161.161 9.34254H160.499V12.7345C160.499 13.2566 160.795 13.44 161.177 13.503C161.626 13.5774 162 13.9024 162 14.3574V14.977C160.446 14.977 158.857 14.9086 158.857 12.9447ZM98.1929 10.1124C98.2033 6.94046 100.598 5.16809 102.895 5.16809C104.171 5.16809 105.342 5.44285 106.304 6.12953L105.914 6.6631C105.654 7.02011 105.16 7.16194 104.749 6.99949C104.169 6.7702 103.622 6.7218 103.215 6.7218C101.335 6.7218 99.9169 7.92849 99.9068 10.1123C99.9169 12.2959 101.335 13.5201 103.215 13.5201C103.622 13.5201 104.169 13.4717 104.749 13.2424C105.16 13.0799 105.654 13.2046 105.914 13.5615L106.304 14.0952C105.342 14.7819 104.171 15.0566 102.895 15.0566C100.598 15.0566 98.2033 13.2842 98.1929 10.1124ZM147.619 5.21768C148.074 5.21768 148.444 5.58663 148.444 6.04174V9.81968L151.82 5.58131C151.897 5.47733 151.997 5.39282 152.112 5.3346C152.227 5.27638 152.355 5.24607 152.484 5.24611H153.984L150.166 10.0615L153.984 14.8749H152.484C152.355 14.8749 152.227 14.8446 152.112 14.7864C151.997 14.7281 151.897 14.6436 151.82 14.5397L148.444 10.3025V14.0508C148.444 14.5059 148.074 14.8749 147.619 14.8749H146.746V5.21768H147.619Z' fill='white'/%3E%3Cpath d='M0.773438 6.5752H2.68066C3.56543 6.5752 4.2041 6.7041 4.59668 6.96191C4.99219 7.21973 5.18994 7.62695 5.18994 8.18359C5.18994 8.55859 5.09326 8.87061 4.8999 9.11963C4.70654 9.36865 4.42822 9.52539 4.06494 9.58984V9.63379C4.51611 9.71875 4.84717 9.88721 5.05811 10.1392C5.27197 10.3882 5.37891 10.7266 5.37891 11.1543C5.37891 11.7314 5.17676 12.1841 4.77246 12.5122C4.37109 12.8374 3.81152 13 3.09375 13H0.773438V6.5752ZM1.82373 9.22949H2.83447C3.27393 9.22949 3.59473 9.16064 3.79688 9.02295C3.99902 8.88232 4.1001 8.64502 4.1001 8.31104C4.1001 8.00928 3.99023 7.79102 3.77051 7.65625C3.55371 7.52148 3.20801 7.4541 2.7334 7.4541H1.82373V9.22949ZM1.82373 10.082V12.1167H2.93994C3.37939 12.1167 3.71045 12.0332 3.93311 11.8662C4.15869 11.6963 4.27148 11.4297 4.27148 11.0664C4.27148 10.7324 4.15723 10.4849 3.92871 10.3237C3.7002 10.1626 3.35303 10.082 2.88721 10.082H1.82373Z' fill='white'/%3E%3Cpath d='M13.011 6.5752V10.7324C13.011 11.207 12.9084 11.623 12.7034 11.9805C12.5012 12.335 12.2068 12.6089 11.8201 12.8022C11.4363 12.9927 10.9763 13.0879 10.4402 13.0879C9.6433 13.0879 9.02368 12.877 8.5813 12.4551C8.13892 12.0332 7.91772 11.4531 7.91772 10.7148V6.5752H8.9724V10.6401C8.9724 11.1704 9.09546 11.5615 9.34155 11.8135C9.58765 12.0654 9.96557 12.1914 10.4753 12.1914C11.4656 12.1914 11.9607 11.6714 11.9607 10.6313V6.5752H13.011Z' fill='white'/%3E%3Cpath d='M15.9146 13V6.5752H16.9649V13H15.9146Z' fill='white'/%3E%3Cpath d='M19.9255 13V6.5752H20.9758V12.0991H23.696V13H19.9255Z' fill='white'/%3E%3Cpath d='M28.2828 13H27.2325V7.47607H25.3428V6.5752H30.1724V7.47607H28.2828V13Z' fill='white'/%3E%3Cpath d='M41.9472 13H40.8046L39.7148 9.16796C39.6679 9.00097 39.6093 8.76074 39.539 8.44727C39.4687 8.13086 39.4262 7.91113 39.4116 7.78809C39.3823 7.97559 39.3339 8.21875 39.2665 8.51758C39.2021 8.81641 39.1479 9.03905 39.1039 9.18554L38.0405 13H36.8979L36.0673 9.7832L35.2236 6.5752H36.2958L37.2143 10.3193C37.3578 10.9199 37.4604 11.4502 37.5219 11.9102C37.5541 11.6611 37.6025 11.3828 37.6669 11.0752C37.7314 10.7676 37.79 10.5186 37.8427 10.3281L38.8886 6.5752H39.9301L41.0024 10.3457C41.1049 10.6943 41.2133 11.2158 41.3276 11.9102C41.3715 11.4912 41.477 10.958 41.644 10.3105L42.558 6.5752H43.6215L41.9472 13Z' fill='white'/%3E%3Cpath d='M45.7957 13V6.5752H46.846V13H45.7957Z' fill='white'/%3E%3Cpath d='M52.0258 13H50.9755V7.47607H49.0859V6.5752H53.9155V7.47607H52.0258V13Z' fill='white'/%3E%3Cpath d='M61.2312 13H60.1765V10.104H57.2146V13H56.1643V6.5752H57.2146V9.20312H60.1765V6.5752H61.2312V13Z' fill='white'/%3E%3C/svg%3E&quot;);}@-webkit-keyframes formkit-bouncedelay-formkit-form-data-uid-49ba79c2cb-{0%,80%,100%{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}}@keyframes formkit-bouncedelay-formkit-form-data-uid-49ba79c2cb-{0%,80%,100%{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #e1e1e1;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .seva-custom-content{padding:15px;font-size:16px;color:#fff;mix-blend-mode:difference;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-modal.guard{max-width:420px;width:100%;} .formkit-form[data-uid=&quot;49ba79c2cb&quot;]{border:1px solid #e3e3e3;max-width:700px;position:relative;overflow:hidden;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-background{width:100%;height:100%;position:absolute;top:0;left:0;background-size:cover;background-position:center;opacity:0.3;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-style=&quot;minimal&quot;]{padding:20px;width:100%;position:relative;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-header{margin:0 0 27px 0;text-align:center;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-subheader{margin:18px 0;text-align:center;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-guarantee{font-size:13px;margin:10px 0 15px 0;text-align:center;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-guarantee &gt; p{margin:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit-container{margin-bottom:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-fields{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:25px auto 0 auto;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-field{min-width:220px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-field,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit{margin:0 0 15px 0;-webkit-flex:1 0 100%;-ms-flex:1 0 100%;flex:1 0 100%;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] [data-style=&quot;minimal&quot;]{padding:40px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;]{margin-left:-5px;margin-right:-5px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-field,.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-submit{margin:0 5px 15px 5px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-field{-webkit-flex:100 1 auto;-ms-flex:100 1 auto;flex:100 1 auto;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-submit{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;} &lt;/style&gt;&lt;/form&gt;
&lt;/div&gt;

</content>
 </entry>
 
 <entry>
   <title>Using magit with Github Enterprise</title>
   <link href="https://mrdias.com/2018/04/01/using-magit-with-github-enterprise.html"/>
   <updated>2018-04-01T00:00:00-04:00</updated>
   <id>https://mrdias.com/2018/04/01/using-magit-with-github-enterprise</id>
   <content type="html">&lt;p&gt;I’m a big fan of &lt;a href=&quot;https://magit.vc&quot;&gt;magit&lt;/a&gt; and I’ve been using it for
many years and I found some time ago the
&lt;a href=&quot;https://github.com/vermiculus/magithub&quot;&gt;magithub extension&lt;/a&gt;, which is
great and allows you to integrate with github, see your pull requests,
open the browser for the current project, create PRs, etc.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;The main difficulties I had were getting it to work with GHE, I had to
do some hacks to get it working like a year ago but it was good and I
moved on.&lt;/p&gt;

&lt;p&gt;Now I recently had to setup a new computer and the newest version of
magithub has changed and my previous configuration didn’t work.&lt;/p&gt;

&lt;p&gt;After reading the documentation for magithub, ghub and ghub+ I was
still having some problems so after some debugging and reading the
source code I found how to make it work which I’ll document here for
future reference.&lt;/p&gt;

&lt;p&gt;From the
&lt;a href=&quot;https://github.com/vermiculus/magithub/blob/master/magithub.org#faq&quot;&gt;magithub FAQ&lt;/a&gt;
the first thing you need is to setup the correct value of
&lt;code&gt;magithub-github-hosts&lt;/code&gt;. I tried to customize it but there seems
to be a problem and emacs (25.2.1) doesn’t let me use a list so in my
.emacs config I added.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(setq magithub-github-hosts '(&quot;github.com&quot; &quot;ghe.example.com&quot;)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Following the
&lt;a href=&quot;https://magit.vc/manual/ghub/Getting-Started.html#Getting-Started&quot;&gt;ghub manual&lt;/a&gt;
the first thing you need to do is setup your username:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git config --global github.user USERNAME

# For GHE
git config --global github.ghe.example.com/api/v3.user EMPLOYEE
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then for each corporate repository you should do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /path/to/repo
git config github.host ghe.example.com/api/v3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now in my case I added a conditional include in my &lt;code&gt;~/.gitconfig&lt;/code&gt;
to set this globally for all the work repos (which I have under the same root folder).&lt;/p&gt;

&lt;p&gt;So my &lt;code&gt;~/.gitconfig&lt;/code&gt; would include:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[github]
	user = diasjorge

[includeIf &quot;gitdir:~/development/work/&quot;]
        path = ~/.gitconfig.work
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And in &lt;code&gt;~/.gitconfig.work&lt;/code&gt; I’ll have:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[user]
        email = jorge.dias@example.com
[github &quot;ghe.example.com/api/v3&quot;] # Magithub uses this to make the API requests
	user = jorge-dias
[github] # Make ghub always use this user and host
	user = jorge-dias
	host = ghe.example.com/api/v3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now with this setup I have seamless integration and I don’t have to
remember to configure the &lt;code&gt;github.host&lt;/code&gt; for all my repos.&lt;/p&gt;

&lt;p&gt;Then you need to configure your &lt;code&gt;~/.authinfo&lt;/code&gt; file. Following the
&lt;a href=&quot;https://magit.vc/manual/ghub/How-Ghub-uses-Auth_002dSource.html#How-Ghub-uses-Auth_002dSource&quot;&gt;manual&lt;/a&gt;
I added:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;machine api.github.com login user^ghub password TOKEN
machine api.github.com login user^magithub password TOKEN

machine ghe.example.com/api/v3 login ghe-user^ghub password GHE_TOKEN
machine ghe.example.com/api/v3 login ghe-user^magithub password GHE_TOKEN
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Notice I add different entries for ghub and magithub packages. This is
so you can give different packages that use ghub different permissions.&lt;/p&gt;

&lt;p&gt;For magithub the variable &lt;code&gt;magithub-github-token-scopes&lt;/code&gt;
mentions the required scopes &lt;code&gt;'(repo user notifications)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It took me a while to figure it all out so I hope you find this
summary useful and you can enjoy working with magit and Github
enterprise using magithub.&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Pair programming revisited</title>
   <link href="https://mrdias.com/2017/12/22/pair-programming-revisited.html"/>
   <updated>2017-12-22T00:00:00-04:00</updated>
   <id>https://mrdias.com/2017/12/22/pair-programming-revisited</id>
   <content type="html">&lt;p&gt;I’ve always liked pair programming, since my college times. I
remember doing coding exercises spending late nights at the computer
lab and we were always working with your partners. And you would talk
to everyone in the room trying to figure out how to solve things,
you’d sit with people from other teams and share code. I didn’t know
you’d call this pairing then.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;And then I started doing an internship to get my degree, and I was
assigned a project with someone from my same university. And we would
work together a lot, we’d sit together solve problems we had with
Enterprise Java Beans (OMG!!) the Oracle web server and related
technologies of the time for hours. And we’d code together on the same
things, sometimes at my computer or his and I still didn’t know it was
called pair programming.&lt;/p&gt;

&lt;p&gt;And as I started working after I moved to Spain I was working as a
consultant and I didn’t do much of that. Yes I’d talk to colleagues
and solve some things together but it was not well seen to work
together. How can you have two people working on the same thing? It
would take double to get things done they’d say.&lt;/p&gt;

&lt;p&gt;And then I had my first Rails job, a totally different environment,
and we worked together a lot, sit with someone for many hours solving
some problems, debugging, creating things and having fun. It was at
this moment when I started to learn about pair programming.&lt;/p&gt;

&lt;p&gt;It was a thing, doing that which always seemed to me like the best way
to work actually had a name. And there was a lot of people that talked
about this subject, a consultancy like Hash rocket would do it and
talk about it, what worked well for them and it was good to realise
there was a movement of people promoting this work.&lt;/p&gt;

&lt;p&gt;And so since then I’ve had a few jobs and I’ve always been bit of a
proponent of it and I’ve always tried pairing whenever possible since
I enjoy working with others this way.&lt;/p&gt;

&lt;p&gt;The software we’re building is getting more and more complex with
time, the demands of our users become ever increasing and we’re
required to handle many different parts. With micro services and the
cloud this is only getting harder. And for me it’s becoming more clear
that in order to solve this things what we need is more collaboration
and that pairing is a more effective way of getting work done.&lt;/p&gt;

&lt;p&gt;There is only so much information one can keep in their
heads when you are pairing you have much more capacity. When you have
a good partner and you’re driving you can feel more relaxed since
someone else is spotting many little mistakes that help things flow
better instead of hitting them and having to fix them.&lt;/p&gt;

&lt;p&gt;When tackling a problem and there’s a need to discuss things and you’re
pairing you have immediate access to a smart person sitting next to
you to help you discuss alternatives and make a decision.&lt;/p&gt;

&lt;p&gt;Writing tests for a feature and having a partner is very useful going
through edge cases, suggesting possibilities that you haven’t
considered making sure things are more robust from the beginning.&lt;/p&gt;

&lt;p&gt;All the features done with a partner get an automatic +1. Features
developed pairing are better designed and more robust and other team
members will feel usually more inclined to accept them.&lt;/p&gt;

&lt;p&gt;Pairing is a social skill that needs to be developed, it’s not the
most natural way to work for people, you need to learn how to work
with your partner when you’re writing the code and when you’re the
“co-pilot”. It takes time to break old habits too, getting rid of the
constant distractions and focusing on the task with your partner can
be challenging.&lt;/p&gt;

&lt;script src=&quot;https://f.convertkit.com/ckjs/ck.5.js&quot;&gt;&lt;/script&gt;

&lt;div class=&quot;light-mode&quot; style=&quot;display: none;&quot;&gt;
  &lt;form action=&quot;https://app.convertkit.com/forms/5805240/subscriptions&quot; style=&quot;background-color: rgb(238, 232, 213); border-radius: 4px;&quot; class=&quot;seva-form formkit-form&quot; method=&quot;post&quot; data-sv-form=&quot;5805240&quot; data-uid=&quot;cc7bf1c6b3&quot; data-format=&quot;inline&quot; data-version=&quot;5&quot; data-options=&quot;{&amp;quot;settings&amp;quot;:{&amp;quot;after_subscribe&amp;quot;:{&amp;quot;action&amp;quot;:&amp;quot;message&amp;quot;,&amp;quot;success_message&amp;quot;:&amp;quot;Success! Now check your email to confirm your subscription.&amp;quot;,&amp;quot;redirect_url&amp;quot;:&amp;quot;&amp;quot;},&amp;quot;analytics&amp;quot;:{&amp;quot;google&amp;quot;:null,&amp;quot;fathom&amp;quot;:null,&amp;quot;facebook&amp;quot;:null,&amp;quot;segment&amp;quot;:null,&amp;quot;pinterest&amp;quot;:null,&amp;quot;sparkloop&amp;quot;:null,&amp;quot;googletagmanager&amp;quot;:null},&amp;quot;modal&amp;quot;:{&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15},&amp;quot;powered_by&amp;quot;:{&amp;quot;show&amp;quot;:true,&amp;quot;url&amp;quot;:&amp;quot;https://convertkit.com/features/forms?utm_campaign=poweredby&amp;amp;utm_content=form&amp;amp;utm_medium=referral&amp;amp;utm_source=dynamic&amp;quot;},&amp;quot;recaptcha&amp;quot;:{&amp;quot;enabled&amp;quot;:false},&amp;quot;return_visitor&amp;quot;:{&amp;quot;action&amp;quot;:&amp;quot;show&amp;quot;,&amp;quot;custom_content&amp;quot;:&amp;quot;&amp;quot;},&amp;quot;slide_in&amp;quot;:{&amp;quot;display_in&amp;quot;:&amp;quot;bottom_right&amp;quot;,&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15},&amp;quot;sticky_bar&amp;quot;:{&amp;quot;display_in&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15}},&amp;quot;version&amp;quot;:&amp;quot;5&amp;quot;}&quot; min-width=&quot;400 500 600 700 800&quot;&gt;&lt;div style=&quot;opacity: 0.2;&quot; class=&quot;formkit-background&quot;&gt;&lt;/div&gt;&lt;div data-style=&quot;minimal&quot;&gt;&lt;div class=&quot;formkit-header&quot; style=&quot;color: rgb(89, 89, 88); font-size: 27px; font-weight: 700;&quot; data-element=&quot;header&quot;&gt;&lt;h2&gt;Join the Newsletter&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;formkit-subheader&quot; style=&quot;color: rgb(89, 89, 88); font-size: 18px;&quot; data-element=&quot;subheader&quot;&gt;Subscribe to get our latest content by email.&lt;/div&gt;&lt;ul class=&quot;formkit-alert formkit-alert-error&quot; data-element=&quot;errors&quot; data-group=&quot;alert&quot;&gt;&lt;/ul&gt;&lt;div data-element=&quot;fields&quot; data-stacked=&quot;false&quot; class=&quot;seva-fields formkit-fields&quot;&gt;&lt;div class=&quot;formkit-field&quot;&gt;&lt;input class=&quot;formkit-input&quot; name=&quot;email_address&quot; style=&quot;border-color: rgb(89, 89, 88); color: rgb(0, 0, 0); border-radius: 4px; font-weight: 400;&quot; aria-label=&quot;Email Address&quot; placeholder=&quot;Email Address&quot; required=&quot;&quot; type=&quot;email&quot; /&gt;&lt;/div&gt;&lt;button data-element=&quot;submit&quot; class=&quot;formkit-submit formkit-submit&quot; style=&quot;background-color: rgb(182, 142, 9); color: rgb(255, 255, 255); border-radius: 4px; font-weight: 400;&quot;&gt;&lt;div class=&quot;formkit-spinner&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;&quot;&gt;Subscribe&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;formkit-guarantee&quot; style=&quot;color: rgb(89, 89, 88); font-size: 13px; font-weight: 400;&quot; data-element=&quot;guarantee&quot;&gt;We won't send you spam. Unsubscribe at any time.&lt;/div&gt;&lt;div class=&quot;formkit-powered-by-convertkit-container&quot;&gt;&lt;a href=&quot;https://convertkit.com/features/forms?utm_campaign=poweredby&amp;amp;utm_content=form&amp;amp;utm_medium=referral&amp;amp;utm_source=dynamic&quot; data-element=&quot;powered-by&quot; class=&quot;formkit-powered-by-convertkit&quot; data-variant=&quot;dark&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Built with ConvertKit&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] *{box-sizing:border-box;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] legend{border:none;font-size:inherit;margin-bottom:10px;padding:0;position:relative;display:table;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] fieldset{border:0;padding:0.01em 0 0 0;margin:0;min-width:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] body:not(:-moz-handler-blocked) fieldset{display:table-cell;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h1,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h2,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h3,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h4,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h5,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h6{color:inherit;font-size:inherit;font-weight:inherit;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h2{font-size:1.5em;margin:1em 0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] h3{font-size:1.17em;margin:1em 0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] p{color:inherit;font-size:inherit;font-weight:inherit;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] ol:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] ul:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] blockquote:not([template-default]){text-align:left;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] p:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] hr:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] blockquote:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] ol:not([template-default]),.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] ul:not([template-default]){color:inherit;font-style:initial;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .ordered-list,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .unordered-list{list-style-position:outside !important;padding-left:1em;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .list-item{padding-left:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][data-format=&quot;modal&quot;]{display:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][data-format=&quot;slide in&quot;]{display:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][data-format=&quot;sticky bar&quot;]{display:none;}.formkit-sticky-bar .formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][data-format=&quot;sticky bar&quot;]{display:block;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-select,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-checkboxes{width:100%;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit{border:0;border-radius:5px;color:#ffffff;cursor:pointer;display:inline-block;text-align:center;font-size:15px;font-weight:500;cursor:pointer;margin-bottom:15px;overflow:hidden;padding:0;position:relative;vertical-align:middle;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button:hover,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit:hover,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button:focus,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit:focus{outline:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button:hover &gt; span,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit:hover &gt; span,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button:focus &gt; span,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit:focus &gt; span{background-color:rgba(0,0,0,0.1);}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-button &gt; span,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit &gt; span{display:block;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;padding:12px 24px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input{background:#ffffff;font-size:15px;padding:12px;border:1px solid #e3e3e3;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;line-height:1.4;margin:0;-webkit-transition:border-color ease-out 300ms;transition:border-color ease-out 300ms;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input:focus{outline:none;border-color:#1677be;-webkit-transition:border-color ease 300ms;transition:border-color ease 300ms;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input::-webkit-input-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input::-moz-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input:-ms-input-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-input::placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;dropdown&quot;]{position:relative;display:inline-block;width:100%;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;dropdown&quot;]::before{content:&quot;&quot;;top:calc(50% - 2.5px);right:10px;position:absolute;pointer-events:none;border-color:#4f4f4f transparent transparent transparent;border-style:solid;border-width:6px 6px 0 6px;height:0;width:0;z-index:999;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;dropdown&quot;] select{height:auto;width:100%;cursor:pointer;color:#333333;line-height:1.4;margin-bottom:0;padding:0 6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:15px;padding:12px;padding-right:25px;border:1px solid #e3e3e3;background:#ffffff;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;dropdown&quot;] select:focus{outline:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;]{text-align:left;margin:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;]{margin-bottom:10px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] *{cursor:pointer;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;]:last-of-type{margin-bottom:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]{display:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;] + label::after{content:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]:checked + label::after{border-color:#ffffff;content:&quot;&quot;;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]:checked + label::before{background:#10bf7a;border-color:#10bf7a;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label{position:relative;display:inline-block;padding-left:28px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::before,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::after{position:absolute;content:&quot;&quot;;display:inline-block;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::before{height:16px;width:16px;border:1px solid #e3e3e3;background:#ffffff;left:0px;top:3px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::after{height:4px;width:8px;border-left:2px solid #4d4d4d;border-bottom:2px solid #4d4d4d;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);left:4px;top:8px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-alert{background:#f9fafb;border:1px solid #e3e3e3;border-radius:5px;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;list-style:none;margin:25px auto;padding:12px;text-align:center;width:100%;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-alert:empty{display:none;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-alert-success{background:#d3fbeb;border-color:#10bf7a;color:#0c905c;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-alert-error{background:#fde8e2;border-color:#f2643b;color:#ea4110;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-spinner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:0px;width:0px;margin:0 auto;position:absolute;top:0;left:0;right:0;width:0px;overflow:hidden;text-align:center;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-spinner &gt; div{margin:auto;width:12px;height:12px;background-color:#fff;opacity:0.3;border-radius:100%;display:inline-block;-webkit-animation:formkit-bouncedelay-formkit-form-data-uid-cc7bf1c6b3- 1.4s infinite ease-in-out both;animation:formkit-bouncedelay-formkit-form-data-uid-cc7bf1c6b3- 1.4s infinite ease-in-out both;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-spinner &gt; div:nth-child(1){-webkit-animation-delay:-0.32s;animation-delay:-0.32s;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-spinner &gt; div:nth-child(2){-webkit-animation-delay:-0.16s;animation-delay:-0.16s;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit[data-active] .formkit-spinner{opacity:1;height:100%;width:50px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit[data-active] .formkit-spinner ~ span{opacity:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by[data-active=&quot;false&quot;]{opacity:0.35;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;z-index:5;margin:10px 0;position:relative;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit-container[data-active=&quot;false&quot;]{opacity:0.35;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#ffffff;border:1px solid #dde2e7;border-radius:4px;color:#373f45;cursor:pointer;display:block;height:36px;margin:0 auto;opacity:0.95;padding:0;-webkit-text-decoration:none;text-decoration:none;text-indent:100%;-webkit-transition:ease-in-out all 200ms;transition:ease-in-out all 200ms;white-space:nowrap;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:190px;background-repeat:no-repeat;background-position:center;background-image:url(&quot;data:image/svg+xml;charset=utf8,%3Csvg width='162' height='20' viewBox='0 0 162 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M83.0561 15.2457C86.675 15.2457 89.4722 12.5154 89.4722 9.14749C89.4722 5.99211 86.8443 4.06563 85.1038 4.06563C82.6801 4.06563 80.7373 5.76407 80.4605 8.28551C80.4092 8.75244 80.0387 9.14403 79.5686 9.14069C78.7871 9.13509 77.6507 9.12841 76.9314 9.13092C76.6217 9.13199 76.3658 8.88106 76.381 8.57196C76.4895 6.38513 77.2218 4.3404 78.618 2.76974C80.1695 1.02445 82.4289 0 85.1038 0C89.5979 0 93.8406 4.07791 93.8406 9.14749C93.8406 14.7608 89.1832 19.3113 83.1517 19.3113C78.8502 19.3113 74.5179 16.5041 73.0053 12.5795C72.9999 12.565 72.9986 12.5492 73.0015 12.534C73.0218 12.4179 73.0617 12.3118 73.1011 12.2074C73.1583 12.0555 73.2143 11.907 73.2062 11.7359L73.18 11.1892C73.174 11.0569 73.2075 10.9258 73.2764 10.8127C73.3452 10.6995 73.4463 10.6094 73.5666 10.554L73.7852 10.4523C73.9077 10.3957 74.0148 10.3105 74.0976 10.204C74.1803 10.0974 74.2363 9.97252 74.2608 9.83983C74.3341 9.43894 74.6865 9.14749 75.0979 9.14749C75.7404 9.14749 76.299 9.57412 76.5088 10.1806C77.5188 13.1 79.1245 15.2457 83.0561 15.2457Z' fill='%23373F45'/%3E%3Cpath d='M155.758 6.91365C155.028 6.91365 154.804 6.47916 154.804 5.98857C154.804 5.46997 154.986 5.06348 155.758 5.06348C156.53 5.06348 156.712 5.46997 156.712 5.98857C156.712 6.47905 156.516 6.91365 155.758 6.91365ZM142.441 12.9304V9.32833L141.415 9.32323V8.90392C141.415 8.44719 141.786 8.07758 142.244 8.07986L142.441 8.08095V6.55306L144.082 6.09057V8.08073H145.569V8.50416C145.569 8.61242 145.548 8.71961 145.506 8.81961C145.465 8.91961 145.404 9.01047 145.328 9.08699C145.251 9.16351 145.16 9.2242 145.06 9.26559C144.96 9.30698 144.853 9.32826 144.745 9.32822H144.082V12.7201C144.082 13.2423 144.378 13.4256 144.76 13.4887C145.209 13.5629 145.583 13.888 145.583 14.343V14.9626C144.029 14.9626 142.441 14.8942 142.441 12.9304Z' fill='%23373F45'/%3E%3Cpath d='M110.058 7.92554C108.417 7.88344 106.396 8.92062 106.396 11.5137C106.396 14.0646 108.417 15.0738 110.058 15.0318C111.742 15.0738 113.748 14.0646 113.748 11.5137C113.748 8.92062 111.742 7.88344 110.058 7.92554ZM110.07 13.7586C108.878 13.7586 108.032 12.8905 108.032 11.461C108.032 10.1013 108.878 9.20569 110.071 9.20569C111.263 9.20569 112.101 10.0995 112.101 11.459C112.101 12.8887 111.263 13.7586 110.07 13.7586Z' fill='%23373F45'/%3E%3Cpath d='M118.06 7.94098C119.491 7.94098 120.978 8.33337 120.978 11.1366V14.893H120.063C119.608 14.893 119.238 14.524 119.238 14.0689V10.9965C119.238 9.66506 118.747 9.16047 117.891 9.16047C117.414 9.16047 116.797 9.52486 116.502 9.81915V14.069C116.502 14.1773 116.481 14.2845 116.44 14.3845C116.398 14.4845 116.337 14.5753 116.261 14.6519C116.184 14.7284 116.093 14.7891 115.993 14.8305C115.893 14.8719 115.786 14.8931 115.678 14.8931H114.847V8.10918H115.773C115.932 8.10914 116.087 8.16315 116.212 8.26242C116.337 8.36168 116.424 8.50033 116.46 8.65577C116.881 8.19328 117.428 7.94098 118.06 7.94098ZM122.854 8.09713C123.024 8.09708 123.19 8.1496 123.329 8.2475C123.468 8.34541 123.574 8.48391 123.631 8.64405L125.133 12.8486L126.635 8.64415C126.692 8.48402 126.798 8.34551 126.937 8.2476C127.076 8.1497 127.242 8.09718 127.412 8.09724H128.598L126.152 14.3567C126.091 14.5112 125.986 14.6439 125.849 14.7374C125.711 14.831 125.549 14.881 125.383 14.8809H124.333L121.668 8.09713H122.854Z' fill='%23373F45'/%3E%3Cpath d='M135.085 14.5514C134.566 14.7616 133.513 15.0416 132.418 15.0416C130.496 15.0416 129.024 13.9345 129.024 11.4396C129.024 9.19701 130.451 7.99792 132.191 7.99792C134.338 7.99792 135.254 9.4378 135.158 11.3979C135.139 11.8029 134.786 12.0983 134.38 12.0983H130.679C130.763 13.1916 131.562 13.7662 132.615 13.7662C133.028 13.7662 133.462 13.7452 133.983 13.6481C134.535 13.545 135.085 13.9375 135.085 14.4985V14.5514ZM133.673 10.949C133.785 9.87621 133.061 9.28752 132.191 9.28752C131.321 9.28752 130.734 9.93979 130.679 10.9489L133.673 10.949Z' fill='%23373F45'/%3E%3Cpath d='M137.345 8.11122C137.497 8.11118 137.645 8.16229 137.765 8.25635C137.884 8.35041 137.969 8.48197 138.005 8.62993C138.566 8.20932 139.268 7.94303 139.759 7.94303C139.801 7.94303 140.068 7.94303 140.489 7.99913V8.7265C140.489 9.11748 140.15 9.4147 139.759 9.4147C139.31 9.4147 138.651 9.5829 138.131 9.8773V14.8951H136.462V8.11112L137.345 8.11122ZM156.6 14.0508V8.09104H155.769C155.314 8.09104 154.944 8.45999 154.944 8.9151V14.8748H155.775C156.23 14.8748 156.6 14.5058 156.6 14.0508ZM158.857 12.9447V9.34254H157.749V8.91912C157.749 8.46401 158.118 8.09506 158.574 8.09506H158.857V6.56739L160.499 6.10479V8.09506H161.986V8.51848C161.986 8.97359 161.617 9.34254 161.161 9.34254H160.499V12.7345C160.499 13.2566 160.795 13.44 161.177 13.503C161.626 13.5774 162 13.9024 162 14.3574V14.977C160.446 14.977 158.857 14.9086 158.857 12.9447ZM98.1929 10.1124C98.2033 6.94046 100.598 5.16809 102.895 5.16809C104.171 5.16809 105.342 5.44285 106.304 6.12953L105.914 6.6631C105.654 7.02011 105.16 7.16194 104.749 6.99949C104.169 6.7702 103.622 6.7218 103.215 6.7218C101.335 6.7218 99.9169 7.92849 99.9068 10.1123C99.9169 12.2959 101.335 13.5201 103.215 13.5201C103.622 13.5201 104.169 13.4717 104.749 13.2424C105.16 13.0799 105.654 13.2046 105.914 13.5615L106.304 14.0952C105.342 14.7819 104.171 15.0566 102.895 15.0566C100.598 15.0566 98.2033 13.2842 98.1929 10.1124ZM147.619 5.21768C148.074 5.21768 148.444 5.58663 148.444 6.04174V9.81968L151.82 5.58131C151.897 5.47733 151.997 5.39282 152.112 5.3346C152.227 5.27638 152.355 5.24607 152.484 5.24611H153.984L150.166 10.0615L153.984 14.8749H152.484C152.355 14.8749 152.227 14.8446 152.112 14.7864C151.997 14.7281 151.897 14.6436 151.82 14.5397L148.444 10.3025V14.0508C148.444 14.5059 148.074 14.8749 147.619 14.8749H146.746V5.21768H147.619Z' fill='%23373F45'/%3E%3Cpath d='M0.773438 6.5752H2.68066C3.56543 6.5752 4.2041 6.7041 4.59668 6.96191C4.99219 7.21973 5.18994 7.62695 5.18994 8.18359C5.18994 8.55859 5.09326 8.87061 4.8999 9.11963C4.70654 9.36865 4.42822 9.52539 4.06494 9.58984V9.63379C4.51611 9.71875 4.84717 9.88721 5.05811 10.1392C5.27197 10.3882 5.37891 10.7266 5.37891 11.1543C5.37891 11.7314 5.17676 12.1841 4.77246 12.5122C4.37109 12.8374 3.81152 13 3.09375 13H0.773438V6.5752ZM1.82373 9.22949H2.83447C3.27393 9.22949 3.59473 9.16064 3.79688 9.02295C3.99902 8.88232 4.1001 8.64502 4.1001 8.31104C4.1001 8.00928 3.99023 7.79102 3.77051 7.65625C3.55371 7.52148 3.20801 7.4541 2.7334 7.4541H1.82373V9.22949ZM1.82373 10.082V12.1167H2.93994C3.37939 12.1167 3.71045 12.0332 3.93311 11.8662C4.15869 11.6963 4.27148 11.4297 4.27148 11.0664C4.27148 10.7324 4.15723 10.4849 3.92871 10.3237C3.7002 10.1626 3.35303 10.082 2.88721 10.082H1.82373Z' fill='%23373F45'/%3E%3Cpath d='M13.011 6.5752V10.7324C13.011 11.207 12.9084 11.623 12.7034 11.9805C12.5012 12.335 12.2068 12.6089 11.8201 12.8022C11.4363 12.9927 10.9763 13.0879 10.4402 13.0879C9.6433 13.0879 9.02368 12.877 8.5813 12.4551C8.13892 12.0332 7.91772 11.4531 7.91772 10.7148V6.5752H8.9724V10.6401C8.9724 11.1704 9.09546 11.5615 9.34155 11.8135C9.58765 12.0654 9.96557 12.1914 10.4753 12.1914C11.4656 12.1914 11.9607 11.6714 11.9607 10.6313V6.5752H13.011Z' fill='%23373F45'/%3E%3Cpath d='M15.9146 13V6.5752H16.9649V13H15.9146Z' fill='%23373F45'/%3E%3Cpath d='M19.9255 13V6.5752H20.9758V12.0991H23.696V13H19.9255Z' fill='%23373F45'/%3E%3Cpath d='M28.2828 13H27.2325V7.47607H25.3428V6.5752H30.1724V7.47607H28.2828V13Z' fill='%23373F45'/%3E%3Cpath d='M41.9472 13H40.8046L39.7148 9.16796C39.6679 9.00097 39.6093 8.76074 39.539 8.44727C39.4687 8.13086 39.4262 7.91113 39.4116 7.78809C39.3823 7.97559 39.3339 8.21875 39.2665 8.51758C39.2021 8.81641 39.1479 9.03905 39.1039 9.18554L38.0405 13H36.8979L36.0673 9.7832L35.2236 6.5752H36.2958L37.2143 10.3193C37.3578 10.9199 37.4604 11.4502 37.5219 11.9102C37.5541 11.6611 37.6025 11.3828 37.6669 11.0752C37.7314 10.7676 37.79 10.5186 37.8427 10.3281L38.8886 6.5752H39.9301L41.0024 10.3457C41.1049 10.6943 41.2133 11.2158 41.3276 11.9102C41.3715 11.4912 41.477 10.958 41.644 10.3105L42.558 6.5752H43.6215L41.9472 13Z' fill='%23373F45'/%3E%3Cpath d='M45.7957 13V6.5752H46.846V13H45.7957Z' fill='%23373F45'/%3E%3Cpath d='M52.0258 13H50.9755V7.47607H49.0859V6.5752H53.9155V7.47607H52.0258V13Z' fill='%23373F45'/%3E%3Cpath d='M61.2312 13H60.1765V10.104H57.2146V13H56.1643V6.5752H57.2146V9.20312H60.1765V6.5752H61.2312V13Z' fill='%23373F45'/%3E%3C/svg%3E&quot;);}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit:hover,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit:focus{background-color:#ffffff;-webkit-transform:scale(1.025) perspective(1px);-ms-transform:scale(1.025) perspective(1px);transform:scale(1.025) perspective(1px);opacity:1;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit[data-variant=&quot;dark&quot;],.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit[data-variant=&quot;light&quot;]{background-color:transparent;border-color:transparent;width:166px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit[data-variant=&quot;light&quot;]{color:#ffffff;background-image:url(&quot;data:image/svg+xml;charset=utf8,%3Csvg width='162' height='20' viewBox='0 0 162 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M83.0561 15.2457C86.675 15.2457 89.4722 12.5154 89.4722 9.14749C89.4722 5.99211 86.8443 4.06563 85.1038 4.06563C82.6801 4.06563 80.7373 5.76407 80.4605 8.28551C80.4092 8.75244 80.0387 9.14403 79.5686 9.14069C78.7871 9.13509 77.6507 9.12841 76.9314 9.13092C76.6217 9.13199 76.3658 8.88106 76.381 8.57196C76.4895 6.38513 77.2218 4.3404 78.618 2.76974C80.1695 1.02445 82.4289 0 85.1038 0C89.5979 0 93.8406 4.07791 93.8406 9.14749C93.8406 14.7608 89.1832 19.3113 83.1517 19.3113C78.8502 19.3113 74.5179 16.5041 73.0053 12.5795C72.9999 12.565 72.9986 12.5492 73.0015 12.534C73.0218 12.4179 73.0617 12.3118 73.1011 12.2074C73.1583 12.0555 73.2143 11.907 73.2062 11.7359L73.18 11.1892C73.174 11.0569 73.2075 10.9258 73.2764 10.8127C73.3452 10.6995 73.4463 10.6094 73.5666 10.554L73.7852 10.4523C73.9077 10.3957 74.0148 10.3105 74.0976 10.204C74.1803 10.0974 74.2363 9.97252 74.2608 9.83983C74.3341 9.43894 74.6865 9.14749 75.0979 9.14749C75.7404 9.14749 76.299 9.57412 76.5088 10.1806C77.5188 13.1 79.1245 15.2457 83.0561 15.2457Z' fill='white'/%3E%3Cpath d='M155.758 6.91365C155.028 6.91365 154.804 6.47916 154.804 5.98857C154.804 5.46997 154.986 5.06348 155.758 5.06348C156.53 5.06348 156.712 5.46997 156.712 5.98857C156.712 6.47905 156.516 6.91365 155.758 6.91365ZM142.441 12.9304V9.32833L141.415 9.32323V8.90392C141.415 8.44719 141.786 8.07758 142.244 8.07986L142.441 8.08095V6.55306L144.082 6.09057V8.08073H145.569V8.50416C145.569 8.61242 145.548 8.71961 145.506 8.81961C145.465 8.91961 145.404 9.01047 145.328 9.08699C145.251 9.16351 145.16 9.2242 145.06 9.26559C144.96 9.30698 144.853 9.32826 144.745 9.32822H144.082V12.7201C144.082 13.2423 144.378 13.4256 144.76 13.4887C145.209 13.5629 145.583 13.888 145.583 14.343V14.9626C144.029 14.9626 142.441 14.8942 142.441 12.9304Z' fill='white'/%3E%3Cpath d='M110.058 7.92554C108.417 7.88344 106.396 8.92062 106.396 11.5137C106.396 14.0646 108.417 15.0738 110.058 15.0318C111.742 15.0738 113.748 14.0646 113.748 11.5137C113.748 8.92062 111.742 7.88344 110.058 7.92554ZM110.07 13.7586C108.878 13.7586 108.032 12.8905 108.032 11.461C108.032 10.1013 108.878 9.20569 110.071 9.20569C111.263 9.20569 112.101 10.0995 112.101 11.459C112.101 12.8887 111.263 13.7586 110.07 13.7586Z' fill='white'/%3E%3Cpath d='M118.06 7.94098C119.491 7.94098 120.978 8.33337 120.978 11.1366V14.893H120.063C119.608 14.893 119.238 14.524 119.238 14.0689V10.9965C119.238 9.66506 118.747 9.16047 117.891 9.16047C117.414 9.16047 116.797 9.52486 116.502 9.81915V14.069C116.502 14.1773 116.481 14.2845 116.44 14.3845C116.398 14.4845 116.337 14.5753 116.261 14.6519C116.184 14.7284 116.093 14.7891 115.993 14.8305C115.893 14.8719 115.786 14.8931 115.678 14.8931H114.847V8.10918H115.773C115.932 8.10914 116.087 8.16315 116.212 8.26242C116.337 8.36168 116.424 8.50033 116.46 8.65577C116.881 8.19328 117.428 7.94098 118.06 7.94098ZM122.854 8.09713C123.024 8.09708 123.19 8.1496 123.329 8.2475C123.468 8.34541 123.574 8.48391 123.631 8.64405L125.133 12.8486L126.635 8.64415C126.692 8.48402 126.798 8.34551 126.937 8.2476C127.076 8.1497 127.242 8.09718 127.412 8.09724H128.598L126.152 14.3567C126.091 14.5112 125.986 14.6439 125.849 14.7374C125.711 14.831 125.549 14.881 125.383 14.8809H124.333L121.668 8.09713H122.854Z' fill='white'/%3E%3Cpath d='M135.085 14.5514C134.566 14.7616 133.513 15.0416 132.418 15.0416C130.496 15.0416 129.024 13.9345 129.024 11.4396C129.024 9.19701 130.451 7.99792 132.191 7.99792C134.338 7.99792 135.254 9.4378 135.158 11.3979C135.139 11.8029 134.786 12.0983 134.38 12.0983H130.679C130.763 13.1916 131.562 13.7662 132.615 13.7662C133.028 13.7662 133.462 13.7452 133.983 13.6481C134.535 13.545 135.085 13.9375 135.085 14.4985V14.5514ZM133.673 10.949C133.785 9.87621 133.061 9.28752 132.191 9.28752C131.321 9.28752 130.734 9.93979 130.679 10.9489L133.673 10.949Z' fill='white'/%3E%3Cpath d='M137.345 8.11122C137.497 8.11118 137.645 8.16229 137.765 8.25635C137.884 8.35041 137.969 8.48197 138.005 8.62993C138.566 8.20932 139.268 7.94303 139.759 7.94303C139.801 7.94303 140.068 7.94303 140.489 7.99913V8.7265C140.489 9.11748 140.15 9.4147 139.759 9.4147C139.31 9.4147 138.651 9.5829 138.131 9.8773V14.8951H136.462V8.11112L137.345 8.11122ZM156.6 14.0508V8.09104H155.769C155.314 8.09104 154.944 8.45999 154.944 8.9151V14.8748H155.775C156.23 14.8748 156.6 14.5058 156.6 14.0508ZM158.857 12.9447V9.34254H157.749V8.91912C157.749 8.46401 158.118 8.09506 158.574 8.09506H158.857V6.56739L160.499 6.10479V8.09506H161.986V8.51848C161.986 8.97359 161.617 9.34254 161.161 9.34254H160.499V12.7345C160.499 13.2566 160.795 13.44 161.177 13.503C161.626 13.5774 162 13.9024 162 14.3574V14.977C160.446 14.977 158.857 14.9086 158.857 12.9447ZM98.1929 10.1124C98.2033 6.94046 100.598 5.16809 102.895 5.16809C104.171 5.16809 105.342 5.44285 106.304 6.12953L105.914 6.6631C105.654 7.02011 105.16 7.16194 104.749 6.99949C104.169 6.7702 103.622 6.7218 103.215 6.7218C101.335 6.7218 99.9169 7.92849 99.9068 10.1123C99.9169 12.2959 101.335 13.5201 103.215 13.5201C103.622 13.5201 104.169 13.4717 104.749 13.2424C105.16 13.0799 105.654 13.2046 105.914 13.5615L106.304 14.0952C105.342 14.7819 104.171 15.0566 102.895 15.0566C100.598 15.0566 98.2033 13.2842 98.1929 10.1124ZM147.619 5.21768C148.074 5.21768 148.444 5.58663 148.444 6.04174V9.81968L151.82 5.58131C151.897 5.47733 151.997 5.39282 152.112 5.3346C152.227 5.27638 152.355 5.24607 152.484 5.24611H153.984L150.166 10.0615L153.984 14.8749H152.484C152.355 14.8749 152.227 14.8446 152.112 14.7864C151.997 14.7281 151.897 14.6436 151.82 14.5397L148.444 10.3025V14.0508C148.444 14.5059 148.074 14.8749 147.619 14.8749H146.746V5.21768H147.619Z' fill='white'/%3E%3Cpath d='M0.773438 6.5752H2.68066C3.56543 6.5752 4.2041 6.7041 4.59668 6.96191C4.99219 7.21973 5.18994 7.62695 5.18994 8.18359C5.18994 8.55859 5.09326 8.87061 4.8999 9.11963C4.70654 9.36865 4.42822 9.52539 4.06494 9.58984V9.63379C4.51611 9.71875 4.84717 9.88721 5.05811 10.1392C5.27197 10.3882 5.37891 10.7266 5.37891 11.1543C5.37891 11.7314 5.17676 12.1841 4.77246 12.5122C4.37109 12.8374 3.81152 13 3.09375 13H0.773438V6.5752ZM1.82373 9.22949H2.83447C3.27393 9.22949 3.59473 9.16064 3.79688 9.02295C3.99902 8.88232 4.1001 8.64502 4.1001 8.31104C4.1001 8.00928 3.99023 7.79102 3.77051 7.65625C3.55371 7.52148 3.20801 7.4541 2.7334 7.4541H1.82373V9.22949ZM1.82373 10.082V12.1167H2.93994C3.37939 12.1167 3.71045 12.0332 3.93311 11.8662C4.15869 11.6963 4.27148 11.4297 4.27148 11.0664C4.27148 10.7324 4.15723 10.4849 3.92871 10.3237C3.7002 10.1626 3.35303 10.082 2.88721 10.082H1.82373Z' fill='white'/%3E%3Cpath d='M13.011 6.5752V10.7324C13.011 11.207 12.9084 11.623 12.7034 11.9805C12.5012 12.335 12.2068 12.6089 11.8201 12.8022C11.4363 12.9927 10.9763 13.0879 10.4402 13.0879C9.6433 13.0879 9.02368 12.877 8.5813 12.4551C8.13892 12.0332 7.91772 11.4531 7.91772 10.7148V6.5752H8.9724V10.6401C8.9724 11.1704 9.09546 11.5615 9.34155 11.8135C9.58765 12.0654 9.96557 12.1914 10.4753 12.1914C11.4656 12.1914 11.9607 11.6714 11.9607 10.6313V6.5752H13.011Z' fill='white'/%3E%3Cpath d='M15.9146 13V6.5752H16.9649V13H15.9146Z' fill='white'/%3E%3Cpath d='M19.9255 13V6.5752H20.9758V12.0991H23.696V13H19.9255Z' fill='white'/%3E%3Cpath d='M28.2828 13H27.2325V7.47607H25.3428V6.5752H30.1724V7.47607H28.2828V13Z' fill='white'/%3E%3Cpath d='M41.9472 13H40.8046L39.7148 9.16796C39.6679 9.00097 39.6093 8.76074 39.539 8.44727C39.4687 8.13086 39.4262 7.91113 39.4116 7.78809C39.3823 7.97559 39.3339 8.21875 39.2665 8.51758C39.2021 8.81641 39.1479 9.03905 39.1039 9.18554L38.0405 13H36.8979L36.0673 9.7832L35.2236 6.5752H36.2958L37.2143 10.3193C37.3578 10.9199 37.4604 11.4502 37.5219 11.9102C37.5541 11.6611 37.6025 11.3828 37.6669 11.0752C37.7314 10.7676 37.79 10.5186 37.8427 10.3281L38.8886 6.5752H39.9301L41.0024 10.3457C41.1049 10.6943 41.2133 11.2158 41.3276 11.9102C41.3715 11.4912 41.477 10.958 41.644 10.3105L42.558 6.5752H43.6215L41.9472 13Z' fill='white'/%3E%3Cpath d='M45.7957 13V6.5752H46.846V13H45.7957Z' fill='white'/%3E%3Cpath d='M52.0258 13H50.9755V7.47607H49.0859V6.5752H53.9155V7.47607H52.0258V13Z' fill='white'/%3E%3Cpath d='M61.2312 13H60.1765V10.104H57.2146V13H56.1643V6.5752H57.2146V9.20312H60.1765V6.5752H61.2312V13Z' fill='white'/%3E%3C/svg%3E&quot;);}@-webkit-keyframes formkit-bouncedelay-formkit-form-data-uid-cc7bf1c6b3-{0%,80%,100%{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}}@keyframes formkit-bouncedelay-formkit-form-data-uid-cc7bf1c6b3-{0%,80%,100%{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #e1e1e1;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .seva-custom-content{padding:15px;font-size:16px;color:#fff;mix-blend-mode:difference;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-modal.guard{max-width:420px;width:100%;} .formkit-form[data-uid=&quot;cc7bf1c6b3&quot;]{border:1px solid #e3e3e3;max-width:700px;position:relative;overflow:hidden;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-background{width:100%;height:100%;position:absolute;top:0;left:0;background-size:cover;background-position:center;opacity:0.3;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] [data-style=&quot;minimal&quot;]{padding:20px;width:100%;position:relative;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-header{margin:0 0 27px 0;text-align:center;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-subheader{margin:18px 0;text-align:center;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-guarantee{font-size:13px;margin:10px 0 15px 0;text-align:center;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-guarantee &gt; p{margin:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-powered-by-convertkit-container{margin-bottom:0;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-fields{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:25px auto 0 auto;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-field{min-width:220px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-field,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;] .formkit-submit{margin:0 0 15px 0;-webkit-flex:1 0 100%;-ms-flex:1 0 100%;flex:1 0 100%;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] [data-style=&quot;minimal&quot;]{padding:40px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;]{margin-left:-5px;margin-right:-5px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-field,.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-submit{margin:0 5px 15px 5px;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-field{-webkit-flex:100 1 auto;-ms-flex:100 1 auto;flex:100 1 auto;}.formkit-form[data-uid=&quot;cc7bf1c6b3&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-submit{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;} &lt;/style&gt;&lt;/form&gt;
&lt;/div&gt;
&lt;div class=&quot;dark-mode&quot; style=&quot;display: none;&quot;&gt;
  &lt;form action=&quot;https://app.convertkit.com/forms/5805241/subscriptions&quot; style=&quot;background-color: rgb(7, 54, 66); border-radius: 4px;&quot; class=&quot;seva-form formkit-form&quot; method=&quot;post&quot; data-sv-form=&quot;5805241&quot; data-uid=&quot;49ba79c2cb&quot; data-format=&quot;inline&quot; data-version=&quot;5&quot; data-options=&quot;{&amp;quot;settings&amp;quot;:{&amp;quot;after_subscribe&amp;quot;:{&amp;quot;action&amp;quot;:&amp;quot;message&amp;quot;,&amp;quot;success_message&amp;quot;:&amp;quot;Success! Now check your email to confirm your subscription.&amp;quot;,&amp;quot;redirect_url&amp;quot;:&amp;quot;&amp;quot;},&amp;quot;analytics&amp;quot;:{&amp;quot;google&amp;quot;:null,&amp;quot;fathom&amp;quot;:null,&amp;quot;facebook&amp;quot;:null,&amp;quot;segment&amp;quot;:null,&amp;quot;pinterest&amp;quot;:null,&amp;quot;sparkloop&amp;quot;:null,&amp;quot;googletagmanager&amp;quot;:null},&amp;quot;modal&amp;quot;:{&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15},&amp;quot;powered_by&amp;quot;:{&amp;quot;show&amp;quot;:true,&amp;quot;url&amp;quot;:&amp;quot;https://convertkit.com/features/forms?utm_campaign=poweredby&amp;amp;utm_content=form&amp;amp;utm_medium=referral&amp;amp;utm_source=dynamic&amp;quot;},&amp;quot;recaptcha&amp;quot;:{&amp;quot;enabled&amp;quot;:false},&amp;quot;return_visitor&amp;quot;:{&amp;quot;action&amp;quot;:&amp;quot;show&amp;quot;,&amp;quot;custom_content&amp;quot;:&amp;quot;&amp;quot;},&amp;quot;slide_in&amp;quot;:{&amp;quot;display_in&amp;quot;:&amp;quot;bottom_right&amp;quot;,&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15},&amp;quot;sticky_bar&amp;quot;:{&amp;quot;display_in&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;trigger&amp;quot;:&amp;quot;timer&amp;quot;,&amp;quot;scroll_percentage&amp;quot;:null,&amp;quot;timer&amp;quot;:5,&amp;quot;devices&amp;quot;:&amp;quot;all&amp;quot;,&amp;quot;show_once_every&amp;quot;:15}},&amp;quot;version&amp;quot;:&amp;quot;5&amp;quot;}&quot; min-width=&quot;400 500 600 700 800&quot;&gt;&lt;div style=&quot;opacity: 0.2;&quot; class=&quot;formkit-background&quot;&gt;&lt;/div&gt;&lt;div data-style=&quot;minimal&quot;&gt;&lt;div class=&quot;formkit-header&quot; style=&quot;color: rgb(161, 208, 193); font-size: 27px; font-weight: 700;&quot; data-element=&quot;header&quot;&gt;&lt;h2&gt;Join the Newsletter&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;formkit-subheader&quot; style=&quot;color: rgb(161, 208, 193); font-size: 18px;&quot; data-element=&quot;subheader&quot;&gt;Subscribe to get our latest content by email.&lt;/div&gt;&lt;ul class=&quot;formkit-alert formkit-alert-error&quot; data-element=&quot;errors&quot; data-group=&quot;alert&quot;&gt;&lt;/ul&gt;&lt;div data-element=&quot;fields&quot; data-stacked=&quot;false&quot; class=&quot;seva-fields formkit-fields&quot;&gt;&lt;div class=&quot;formkit-field&quot;&gt;&lt;input class=&quot;formkit-input&quot; name=&quot;email_address&quot; style=&quot;border-color: rgb(89, 89, 88); color: rgb(0, 0, 0); border-radius: 4px; font-weight: 400;&quot; aria-label=&quot;Email Address&quot; placeholder=&quot;Email Address&quot; required=&quot;&quot; type=&quot;email&quot; /&gt;&lt;/div&gt;&lt;button data-element=&quot;submit&quot; class=&quot;formkit-submit formkit-submit&quot; style=&quot;background-color: rgb(130, 130, 128); color: rgb(255, 255, 255); border-radius: 4px; font-weight: 400;&quot;&gt;&lt;div class=&quot;formkit-spinner&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;&quot;&gt;Subscribe&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;formkit-guarantee&quot; style=&quot;color: rgb(161, 208, 193); font-size: 13px; font-weight: 400;&quot; data-element=&quot;guarantee&quot;&gt;We won't send you spam. Unsubscribe at any time.&lt;/div&gt;&lt;div class=&quot;formkit-powered-by-convertkit-container&quot;&gt;&lt;a href=&quot;https://convertkit.com/features/forms?utm_campaign=poweredby&amp;amp;utm_content=form&amp;amp;utm_medium=referral&amp;amp;utm_source=dynamic&quot; data-element=&quot;powered-by&quot; class=&quot;formkit-powered-by-convertkit&quot; data-variant=&quot;light&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Built with ConvertKit&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;style&gt;.formkit-form[data-uid=&quot;49ba79c2cb&quot;] *{box-sizing:border-box;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] legend{border:none;font-size:inherit;margin-bottom:10px;padding:0;position:relative;display:table;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] fieldset{border:0;padding:0.01em 0 0 0;margin:0;min-width:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] body:not(:-moz-handler-blocked) fieldset{display:table-cell;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h1,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h2,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h3,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h4,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h5,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h6{color:inherit;font-size:inherit;font-weight:inherit;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h2{font-size:1.5em;margin:1em 0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] h3{font-size:1.17em;margin:1em 0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] p{color:inherit;font-size:inherit;font-weight:inherit;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] ol:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] ul:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] blockquote:not([template-default]){text-align:left;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] p:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] hr:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] blockquote:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] ol:not([template-default]),.formkit-form[data-uid=&quot;49ba79c2cb&quot;] ul:not([template-default]){color:inherit;font-style:initial;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .ordered-list,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .unordered-list{list-style-position:outside !important;padding-left:1em;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .list-item{padding-left:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][data-format=&quot;modal&quot;]{display:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][data-format=&quot;slide in&quot;]{display:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][data-format=&quot;sticky bar&quot;]{display:none;}.formkit-sticky-bar .formkit-form[data-uid=&quot;49ba79c2cb&quot;][data-format=&quot;sticky bar&quot;]{display:block;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-select,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-checkboxes{width:100%;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit{border:0;border-radius:5px;color:#ffffff;cursor:pointer;display:inline-block;text-align:center;font-size:15px;font-weight:500;cursor:pointer;margin-bottom:15px;overflow:hidden;padding:0;position:relative;vertical-align:middle;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button:hover,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit:hover,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button:focus,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit:focus{outline:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button:hover &gt; span,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit:hover &gt; span,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button:focus &gt; span,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit:focus &gt; span{background-color:rgba(0,0,0,0.1);}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-button &gt; span,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit &gt; span{display:block;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;padding:12px 24px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input{background:#ffffff;font-size:15px;padding:12px;border:1px solid #e3e3e3;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;line-height:1.4;margin:0;-webkit-transition:border-color ease-out 300ms;transition:border-color ease-out 300ms;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input:focus{outline:none;border-color:#1677be;-webkit-transition:border-color ease 300ms;transition:border-color ease 300ms;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input::-webkit-input-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input::-moz-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input:-ms-input-placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-input::placeholder{color:inherit;opacity:0.8;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;dropdown&quot;]{position:relative;display:inline-block;width:100%;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;dropdown&quot;]::before{content:&quot;&quot;;top:calc(50% - 2.5px);right:10px;position:absolute;pointer-events:none;border-color:#4f4f4f transparent transparent transparent;border-style:solid;border-width:6px 6px 0 6px;height:0;width:0;z-index:999;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;dropdown&quot;] select{height:auto;width:100%;cursor:pointer;color:#333333;line-height:1.4;margin-bottom:0;padding:0 6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:15px;padding:12px;padding-right:25px;border:1px solid #e3e3e3;background:#ffffff;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;dropdown&quot;] select:focus{outline:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;]{text-align:left;margin:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;]{margin-bottom:10px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] *{cursor:pointer;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;]:last-of-type{margin-bottom:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]{display:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;] + label::after{content:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]:checked + label::after{border-color:#ffffff;content:&quot;&quot;;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] input[type=&quot;checkbox&quot;]:checked + label::before{background:#10bf7a;border-color:#10bf7a;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label{position:relative;display:inline-block;padding-left:28px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::before,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::after{position:absolute;content:&quot;&quot;;display:inline-block;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::before{height:16px;width:16px;border:1px solid #e3e3e3;background:#ffffff;left:0px;top:3px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-group=&quot;checkboxes&quot;] [data-group=&quot;checkbox&quot;] label::after{height:4px;width:8px;border-left:2px solid #4d4d4d;border-bottom:2px solid #4d4d4d;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);left:4px;top:8px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-alert{background:#f9fafb;border:1px solid #e3e3e3;border-radius:5px;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;list-style:none;margin:25px auto;padding:12px;text-align:center;width:100%;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-alert:empty{display:none;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-alert-success{background:#d3fbeb;border-color:#10bf7a;color:#0c905c;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-alert-error{background:#fde8e2;border-color:#f2643b;color:#ea4110;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-spinner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:0px;width:0px;margin:0 auto;position:absolute;top:0;left:0;right:0;width:0px;overflow:hidden;text-align:center;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-spinner &gt; div{margin:auto;width:12px;height:12px;background-color:#fff;opacity:0.3;border-radius:100%;display:inline-block;-webkit-animation:formkit-bouncedelay-formkit-form-data-uid-49ba79c2cb- 1.4s infinite ease-in-out both;animation:formkit-bouncedelay-formkit-form-data-uid-49ba79c2cb- 1.4s infinite ease-in-out both;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-spinner &gt; div:nth-child(1){-webkit-animation-delay:-0.32s;animation-delay:-0.32s;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-spinner &gt; div:nth-child(2){-webkit-animation-delay:-0.16s;animation-delay:-0.16s;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit[data-active] .formkit-spinner{opacity:1;height:100%;width:50px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit[data-active] .formkit-spinner ~ span{opacity:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by[data-active=&quot;false&quot;]{opacity:0.35;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;z-index:5;margin:10px 0;position:relative;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit-container[data-active=&quot;false&quot;]{opacity:0.35;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#ffffff;border:1px solid #dde2e7;border-radius:4px;color:#373f45;cursor:pointer;display:block;height:36px;margin:0 auto;opacity:0.95;padding:0;-webkit-text-decoration:none;text-decoration:none;text-indent:100%;-webkit-transition:ease-in-out all 200ms;transition:ease-in-out all 200ms;white-space:nowrap;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:190px;background-repeat:no-repeat;background-position:center;background-image:url(&quot;data:image/svg+xml;charset=utf8,%3Csvg width='162' height='20' viewBox='0 0 162 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M83.0561 15.2457C86.675 15.2457 89.4722 12.5154 89.4722 9.14749C89.4722 5.99211 86.8443 4.06563 85.1038 4.06563C82.6801 4.06563 80.7373 5.76407 80.4605 8.28551C80.4092 8.75244 80.0387 9.14403 79.5686 9.14069C78.7871 9.13509 77.6507 9.12841 76.9314 9.13092C76.6217 9.13199 76.3658 8.88106 76.381 8.57196C76.4895 6.38513 77.2218 4.3404 78.618 2.76974C80.1695 1.02445 82.4289 0 85.1038 0C89.5979 0 93.8406 4.07791 93.8406 9.14749C93.8406 14.7608 89.1832 19.3113 83.1517 19.3113C78.8502 19.3113 74.5179 16.5041 73.0053 12.5795C72.9999 12.565 72.9986 12.5492 73.0015 12.534C73.0218 12.4179 73.0617 12.3118 73.1011 12.2074C73.1583 12.0555 73.2143 11.907 73.2062 11.7359L73.18 11.1892C73.174 11.0569 73.2075 10.9258 73.2764 10.8127C73.3452 10.6995 73.4463 10.6094 73.5666 10.554L73.7852 10.4523C73.9077 10.3957 74.0148 10.3105 74.0976 10.204C74.1803 10.0974 74.2363 9.97252 74.2608 9.83983C74.3341 9.43894 74.6865 9.14749 75.0979 9.14749C75.7404 9.14749 76.299 9.57412 76.5088 10.1806C77.5188 13.1 79.1245 15.2457 83.0561 15.2457Z' fill='%23373F45'/%3E%3Cpath d='M155.758 6.91365C155.028 6.91365 154.804 6.47916 154.804 5.98857C154.804 5.46997 154.986 5.06348 155.758 5.06348C156.53 5.06348 156.712 5.46997 156.712 5.98857C156.712 6.47905 156.516 6.91365 155.758 6.91365ZM142.441 12.9304V9.32833L141.415 9.32323V8.90392C141.415 8.44719 141.786 8.07758 142.244 8.07986L142.441 8.08095V6.55306L144.082 6.09057V8.08073H145.569V8.50416C145.569 8.61242 145.548 8.71961 145.506 8.81961C145.465 8.91961 145.404 9.01047 145.328 9.08699C145.251 9.16351 145.16 9.2242 145.06 9.26559C144.96 9.30698 144.853 9.32826 144.745 9.32822H144.082V12.7201C144.082 13.2423 144.378 13.4256 144.76 13.4887C145.209 13.5629 145.583 13.888 145.583 14.343V14.9626C144.029 14.9626 142.441 14.8942 142.441 12.9304Z' fill='%23373F45'/%3E%3Cpath d='M110.058 7.92554C108.417 7.88344 106.396 8.92062 106.396 11.5137C106.396 14.0646 108.417 15.0738 110.058 15.0318C111.742 15.0738 113.748 14.0646 113.748 11.5137C113.748 8.92062 111.742 7.88344 110.058 7.92554ZM110.07 13.7586C108.878 13.7586 108.032 12.8905 108.032 11.461C108.032 10.1013 108.878 9.20569 110.071 9.20569C111.263 9.20569 112.101 10.0995 112.101 11.459C112.101 12.8887 111.263 13.7586 110.07 13.7586Z' fill='%23373F45'/%3E%3Cpath d='M118.06 7.94098C119.491 7.94098 120.978 8.33337 120.978 11.1366V14.893H120.063C119.608 14.893 119.238 14.524 119.238 14.0689V10.9965C119.238 9.66506 118.747 9.16047 117.891 9.16047C117.414 9.16047 116.797 9.52486 116.502 9.81915V14.069C116.502 14.1773 116.481 14.2845 116.44 14.3845C116.398 14.4845 116.337 14.5753 116.261 14.6519C116.184 14.7284 116.093 14.7891 115.993 14.8305C115.893 14.8719 115.786 14.8931 115.678 14.8931H114.847V8.10918H115.773C115.932 8.10914 116.087 8.16315 116.212 8.26242C116.337 8.36168 116.424 8.50033 116.46 8.65577C116.881 8.19328 117.428 7.94098 118.06 7.94098ZM122.854 8.09713C123.024 8.09708 123.19 8.1496 123.329 8.2475C123.468 8.34541 123.574 8.48391 123.631 8.64405L125.133 12.8486L126.635 8.64415C126.692 8.48402 126.798 8.34551 126.937 8.2476C127.076 8.1497 127.242 8.09718 127.412 8.09724H128.598L126.152 14.3567C126.091 14.5112 125.986 14.6439 125.849 14.7374C125.711 14.831 125.549 14.881 125.383 14.8809H124.333L121.668 8.09713H122.854Z' fill='%23373F45'/%3E%3Cpath d='M135.085 14.5514C134.566 14.7616 133.513 15.0416 132.418 15.0416C130.496 15.0416 129.024 13.9345 129.024 11.4396C129.024 9.19701 130.451 7.99792 132.191 7.99792C134.338 7.99792 135.254 9.4378 135.158 11.3979C135.139 11.8029 134.786 12.0983 134.38 12.0983H130.679C130.763 13.1916 131.562 13.7662 132.615 13.7662C133.028 13.7662 133.462 13.7452 133.983 13.6481C134.535 13.545 135.085 13.9375 135.085 14.4985V14.5514ZM133.673 10.949C133.785 9.87621 133.061 9.28752 132.191 9.28752C131.321 9.28752 130.734 9.93979 130.679 10.9489L133.673 10.949Z' fill='%23373F45'/%3E%3Cpath d='M137.345 8.11122C137.497 8.11118 137.645 8.16229 137.765 8.25635C137.884 8.35041 137.969 8.48197 138.005 8.62993C138.566 8.20932 139.268 7.94303 139.759 7.94303C139.801 7.94303 140.068 7.94303 140.489 7.99913V8.7265C140.489 9.11748 140.15 9.4147 139.759 9.4147C139.31 9.4147 138.651 9.5829 138.131 9.8773V14.8951H136.462V8.11112L137.345 8.11122ZM156.6 14.0508V8.09104H155.769C155.314 8.09104 154.944 8.45999 154.944 8.9151V14.8748H155.775C156.23 14.8748 156.6 14.5058 156.6 14.0508ZM158.857 12.9447V9.34254H157.749V8.91912C157.749 8.46401 158.118 8.09506 158.574 8.09506H158.857V6.56739L160.499 6.10479V8.09506H161.986V8.51848C161.986 8.97359 161.617 9.34254 161.161 9.34254H160.499V12.7345C160.499 13.2566 160.795 13.44 161.177 13.503C161.626 13.5774 162 13.9024 162 14.3574V14.977C160.446 14.977 158.857 14.9086 158.857 12.9447ZM98.1929 10.1124C98.2033 6.94046 100.598 5.16809 102.895 5.16809C104.171 5.16809 105.342 5.44285 106.304 6.12953L105.914 6.6631C105.654 7.02011 105.16 7.16194 104.749 6.99949C104.169 6.7702 103.622 6.7218 103.215 6.7218C101.335 6.7218 99.9169 7.92849 99.9068 10.1123C99.9169 12.2959 101.335 13.5201 103.215 13.5201C103.622 13.5201 104.169 13.4717 104.749 13.2424C105.16 13.0799 105.654 13.2046 105.914 13.5615L106.304 14.0952C105.342 14.7819 104.171 15.0566 102.895 15.0566C100.598 15.0566 98.2033 13.2842 98.1929 10.1124ZM147.619 5.21768C148.074 5.21768 148.444 5.58663 148.444 6.04174V9.81968L151.82 5.58131C151.897 5.47733 151.997 5.39282 152.112 5.3346C152.227 5.27638 152.355 5.24607 152.484 5.24611H153.984L150.166 10.0615L153.984 14.8749H152.484C152.355 14.8749 152.227 14.8446 152.112 14.7864C151.997 14.7281 151.897 14.6436 151.82 14.5397L148.444 10.3025V14.0508C148.444 14.5059 148.074 14.8749 147.619 14.8749H146.746V5.21768H147.619Z' fill='%23373F45'/%3E%3Cpath d='M0.773438 6.5752H2.68066C3.56543 6.5752 4.2041 6.7041 4.59668 6.96191C4.99219 7.21973 5.18994 7.62695 5.18994 8.18359C5.18994 8.55859 5.09326 8.87061 4.8999 9.11963C4.70654 9.36865 4.42822 9.52539 4.06494 9.58984V9.63379C4.51611 9.71875 4.84717 9.88721 5.05811 10.1392C5.27197 10.3882 5.37891 10.7266 5.37891 11.1543C5.37891 11.7314 5.17676 12.1841 4.77246 12.5122C4.37109 12.8374 3.81152 13 3.09375 13H0.773438V6.5752ZM1.82373 9.22949H2.83447C3.27393 9.22949 3.59473 9.16064 3.79688 9.02295C3.99902 8.88232 4.1001 8.64502 4.1001 8.31104C4.1001 8.00928 3.99023 7.79102 3.77051 7.65625C3.55371 7.52148 3.20801 7.4541 2.7334 7.4541H1.82373V9.22949ZM1.82373 10.082V12.1167H2.93994C3.37939 12.1167 3.71045 12.0332 3.93311 11.8662C4.15869 11.6963 4.27148 11.4297 4.27148 11.0664C4.27148 10.7324 4.15723 10.4849 3.92871 10.3237C3.7002 10.1626 3.35303 10.082 2.88721 10.082H1.82373Z' fill='%23373F45'/%3E%3Cpath d='M13.011 6.5752V10.7324C13.011 11.207 12.9084 11.623 12.7034 11.9805C12.5012 12.335 12.2068 12.6089 11.8201 12.8022C11.4363 12.9927 10.9763 13.0879 10.4402 13.0879C9.6433 13.0879 9.02368 12.877 8.5813 12.4551C8.13892 12.0332 7.91772 11.4531 7.91772 10.7148V6.5752H8.9724V10.6401C8.9724 11.1704 9.09546 11.5615 9.34155 11.8135C9.58765 12.0654 9.96557 12.1914 10.4753 12.1914C11.4656 12.1914 11.9607 11.6714 11.9607 10.6313V6.5752H13.011Z' fill='%23373F45'/%3E%3Cpath d='M15.9146 13V6.5752H16.9649V13H15.9146Z' fill='%23373F45'/%3E%3Cpath d='M19.9255 13V6.5752H20.9758V12.0991H23.696V13H19.9255Z' fill='%23373F45'/%3E%3Cpath d='M28.2828 13H27.2325V7.47607H25.3428V6.5752H30.1724V7.47607H28.2828V13Z' fill='%23373F45'/%3E%3Cpath d='M41.9472 13H40.8046L39.7148 9.16796C39.6679 9.00097 39.6093 8.76074 39.539 8.44727C39.4687 8.13086 39.4262 7.91113 39.4116 7.78809C39.3823 7.97559 39.3339 8.21875 39.2665 8.51758C39.2021 8.81641 39.1479 9.03905 39.1039 9.18554L38.0405 13H36.8979L36.0673 9.7832L35.2236 6.5752H36.2958L37.2143 10.3193C37.3578 10.9199 37.4604 11.4502 37.5219 11.9102C37.5541 11.6611 37.6025 11.3828 37.6669 11.0752C37.7314 10.7676 37.79 10.5186 37.8427 10.3281L38.8886 6.5752H39.9301L41.0024 10.3457C41.1049 10.6943 41.2133 11.2158 41.3276 11.9102C41.3715 11.4912 41.477 10.958 41.644 10.3105L42.558 6.5752H43.6215L41.9472 13Z' fill='%23373F45'/%3E%3Cpath d='M45.7957 13V6.5752H46.846V13H45.7957Z' fill='%23373F45'/%3E%3Cpath d='M52.0258 13H50.9755V7.47607H49.0859V6.5752H53.9155V7.47607H52.0258V13Z' fill='%23373F45'/%3E%3Cpath d='M61.2312 13H60.1765V10.104H57.2146V13H56.1643V6.5752H57.2146V9.20312H60.1765V6.5752H61.2312V13Z' fill='%23373F45'/%3E%3C/svg%3E&quot;);}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit:hover,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit:focus{background-color:#ffffff;-webkit-transform:scale(1.025) perspective(1px);-ms-transform:scale(1.025) perspective(1px);transform:scale(1.025) perspective(1px);opacity:1;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit[data-variant=&quot;dark&quot;],.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit[data-variant=&quot;light&quot;]{background-color:transparent;border-color:transparent;width:166px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit[data-variant=&quot;light&quot;]{color:#ffffff;background-image:url(&quot;data:image/svg+xml;charset=utf8,%3Csvg width='162' height='20' viewBox='0 0 162 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M83.0561 15.2457C86.675 15.2457 89.4722 12.5154 89.4722 9.14749C89.4722 5.99211 86.8443 4.06563 85.1038 4.06563C82.6801 4.06563 80.7373 5.76407 80.4605 8.28551C80.4092 8.75244 80.0387 9.14403 79.5686 9.14069C78.7871 9.13509 77.6507 9.12841 76.9314 9.13092C76.6217 9.13199 76.3658 8.88106 76.381 8.57196C76.4895 6.38513 77.2218 4.3404 78.618 2.76974C80.1695 1.02445 82.4289 0 85.1038 0C89.5979 0 93.8406 4.07791 93.8406 9.14749C93.8406 14.7608 89.1832 19.3113 83.1517 19.3113C78.8502 19.3113 74.5179 16.5041 73.0053 12.5795C72.9999 12.565 72.9986 12.5492 73.0015 12.534C73.0218 12.4179 73.0617 12.3118 73.1011 12.2074C73.1583 12.0555 73.2143 11.907 73.2062 11.7359L73.18 11.1892C73.174 11.0569 73.2075 10.9258 73.2764 10.8127C73.3452 10.6995 73.4463 10.6094 73.5666 10.554L73.7852 10.4523C73.9077 10.3957 74.0148 10.3105 74.0976 10.204C74.1803 10.0974 74.2363 9.97252 74.2608 9.83983C74.3341 9.43894 74.6865 9.14749 75.0979 9.14749C75.7404 9.14749 76.299 9.57412 76.5088 10.1806C77.5188 13.1 79.1245 15.2457 83.0561 15.2457Z' fill='white'/%3E%3Cpath d='M155.758 6.91365C155.028 6.91365 154.804 6.47916 154.804 5.98857C154.804 5.46997 154.986 5.06348 155.758 5.06348C156.53 5.06348 156.712 5.46997 156.712 5.98857C156.712 6.47905 156.516 6.91365 155.758 6.91365ZM142.441 12.9304V9.32833L141.415 9.32323V8.90392C141.415 8.44719 141.786 8.07758 142.244 8.07986L142.441 8.08095V6.55306L144.082 6.09057V8.08073H145.569V8.50416C145.569 8.61242 145.548 8.71961 145.506 8.81961C145.465 8.91961 145.404 9.01047 145.328 9.08699C145.251 9.16351 145.16 9.2242 145.06 9.26559C144.96 9.30698 144.853 9.32826 144.745 9.32822H144.082V12.7201C144.082 13.2423 144.378 13.4256 144.76 13.4887C145.209 13.5629 145.583 13.888 145.583 14.343V14.9626C144.029 14.9626 142.441 14.8942 142.441 12.9304Z' fill='white'/%3E%3Cpath d='M110.058 7.92554C108.417 7.88344 106.396 8.92062 106.396 11.5137C106.396 14.0646 108.417 15.0738 110.058 15.0318C111.742 15.0738 113.748 14.0646 113.748 11.5137C113.748 8.92062 111.742 7.88344 110.058 7.92554ZM110.07 13.7586C108.878 13.7586 108.032 12.8905 108.032 11.461C108.032 10.1013 108.878 9.20569 110.071 9.20569C111.263 9.20569 112.101 10.0995 112.101 11.459C112.101 12.8887 111.263 13.7586 110.07 13.7586Z' fill='white'/%3E%3Cpath d='M118.06 7.94098C119.491 7.94098 120.978 8.33337 120.978 11.1366V14.893H120.063C119.608 14.893 119.238 14.524 119.238 14.0689V10.9965C119.238 9.66506 118.747 9.16047 117.891 9.16047C117.414 9.16047 116.797 9.52486 116.502 9.81915V14.069C116.502 14.1773 116.481 14.2845 116.44 14.3845C116.398 14.4845 116.337 14.5753 116.261 14.6519C116.184 14.7284 116.093 14.7891 115.993 14.8305C115.893 14.8719 115.786 14.8931 115.678 14.8931H114.847V8.10918H115.773C115.932 8.10914 116.087 8.16315 116.212 8.26242C116.337 8.36168 116.424 8.50033 116.46 8.65577C116.881 8.19328 117.428 7.94098 118.06 7.94098ZM122.854 8.09713C123.024 8.09708 123.19 8.1496 123.329 8.2475C123.468 8.34541 123.574 8.48391 123.631 8.64405L125.133 12.8486L126.635 8.64415C126.692 8.48402 126.798 8.34551 126.937 8.2476C127.076 8.1497 127.242 8.09718 127.412 8.09724H128.598L126.152 14.3567C126.091 14.5112 125.986 14.6439 125.849 14.7374C125.711 14.831 125.549 14.881 125.383 14.8809H124.333L121.668 8.09713H122.854Z' fill='white'/%3E%3Cpath d='M135.085 14.5514C134.566 14.7616 133.513 15.0416 132.418 15.0416C130.496 15.0416 129.024 13.9345 129.024 11.4396C129.024 9.19701 130.451 7.99792 132.191 7.99792C134.338 7.99792 135.254 9.4378 135.158 11.3979C135.139 11.8029 134.786 12.0983 134.38 12.0983H130.679C130.763 13.1916 131.562 13.7662 132.615 13.7662C133.028 13.7662 133.462 13.7452 133.983 13.6481C134.535 13.545 135.085 13.9375 135.085 14.4985V14.5514ZM133.673 10.949C133.785 9.87621 133.061 9.28752 132.191 9.28752C131.321 9.28752 130.734 9.93979 130.679 10.9489L133.673 10.949Z' fill='white'/%3E%3Cpath d='M137.345 8.11122C137.497 8.11118 137.645 8.16229 137.765 8.25635C137.884 8.35041 137.969 8.48197 138.005 8.62993C138.566 8.20932 139.268 7.94303 139.759 7.94303C139.801 7.94303 140.068 7.94303 140.489 7.99913V8.7265C140.489 9.11748 140.15 9.4147 139.759 9.4147C139.31 9.4147 138.651 9.5829 138.131 9.8773V14.8951H136.462V8.11112L137.345 8.11122ZM156.6 14.0508V8.09104H155.769C155.314 8.09104 154.944 8.45999 154.944 8.9151V14.8748H155.775C156.23 14.8748 156.6 14.5058 156.6 14.0508ZM158.857 12.9447V9.34254H157.749V8.91912C157.749 8.46401 158.118 8.09506 158.574 8.09506H158.857V6.56739L160.499 6.10479V8.09506H161.986V8.51848C161.986 8.97359 161.617 9.34254 161.161 9.34254H160.499V12.7345C160.499 13.2566 160.795 13.44 161.177 13.503C161.626 13.5774 162 13.9024 162 14.3574V14.977C160.446 14.977 158.857 14.9086 158.857 12.9447ZM98.1929 10.1124C98.2033 6.94046 100.598 5.16809 102.895 5.16809C104.171 5.16809 105.342 5.44285 106.304 6.12953L105.914 6.6631C105.654 7.02011 105.16 7.16194 104.749 6.99949C104.169 6.7702 103.622 6.7218 103.215 6.7218C101.335 6.7218 99.9169 7.92849 99.9068 10.1123C99.9169 12.2959 101.335 13.5201 103.215 13.5201C103.622 13.5201 104.169 13.4717 104.749 13.2424C105.16 13.0799 105.654 13.2046 105.914 13.5615L106.304 14.0952C105.342 14.7819 104.171 15.0566 102.895 15.0566C100.598 15.0566 98.2033 13.2842 98.1929 10.1124ZM147.619 5.21768C148.074 5.21768 148.444 5.58663 148.444 6.04174V9.81968L151.82 5.58131C151.897 5.47733 151.997 5.39282 152.112 5.3346C152.227 5.27638 152.355 5.24607 152.484 5.24611H153.984L150.166 10.0615L153.984 14.8749H152.484C152.355 14.8749 152.227 14.8446 152.112 14.7864C151.997 14.7281 151.897 14.6436 151.82 14.5397L148.444 10.3025V14.0508C148.444 14.5059 148.074 14.8749 147.619 14.8749H146.746V5.21768H147.619Z' fill='white'/%3E%3Cpath d='M0.773438 6.5752H2.68066C3.56543 6.5752 4.2041 6.7041 4.59668 6.96191C4.99219 7.21973 5.18994 7.62695 5.18994 8.18359C5.18994 8.55859 5.09326 8.87061 4.8999 9.11963C4.70654 9.36865 4.42822 9.52539 4.06494 9.58984V9.63379C4.51611 9.71875 4.84717 9.88721 5.05811 10.1392C5.27197 10.3882 5.37891 10.7266 5.37891 11.1543C5.37891 11.7314 5.17676 12.1841 4.77246 12.5122C4.37109 12.8374 3.81152 13 3.09375 13H0.773438V6.5752ZM1.82373 9.22949H2.83447C3.27393 9.22949 3.59473 9.16064 3.79688 9.02295C3.99902 8.88232 4.1001 8.64502 4.1001 8.31104C4.1001 8.00928 3.99023 7.79102 3.77051 7.65625C3.55371 7.52148 3.20801 7.4541 2.7334 7.4541H1.82373V9.22949ZM1.82373 10.082V12.1167H2.93994C3.37939 12.1167 3.71045 12.0332 3.93311 11.8662C4.15869 11.6963 4.27148 11.4297 4.27148 11.0664C4.27148 10.7324 4.15723 10.4849 3.92871 10.3237C3.7002 10.1626 3.35303 10.082 2.88721 10.082H1.82373Z' fill='white'/%3E%3Cpath d='M13.011 6.5752V10.7324C13.011 11.207 12.9084 11.623 12.7034 11.9805C12.5012 12.335 12.2068 12.6089 11.8201 12.8022C11.4363 12.9927 10.9763 13.0879 10.4402 13.0879C9.6433 13.0879 9.02368 12.877 8.5813 12.4551C8.13892 12.0332 7.91772 11.4531 7.91772 10.7148V6.5752H8.9724V10.6401C8.9724 11.1704 9.09546 11.5615 9.34155 11.8135C9.58765 12.0654 9.96557 12.1914 10.4753 12.1914C11.4656 12.1914 11.9607 11.6714 11.9607 10.6313V6.5752H13.011Z' fill='white'/%3E%3Cpath d='M15.9146 13V6.5752H16.9649V13H15.9146Z' fill='white'/%3E%3Cpath d='M19.9255 13V6.5752H20.9758V12.0991H23.696V13H19.9255Z' fill='white'/%3E%3Cpath d='M28.2828 13H27.2325V7.47607H25.3428V6.5752H30.1724V7.47607H28.2828V13Z' fill='white'/%3E%3Cpath d='M41.9472 13H40.8046L39.7148 9.16796C39.6679 9.00097 39.6093 8.76074 39.539 8.44727C39.4687 8.13086 39.4262 7.91113 39.4116 7.78809C39.3823 7.97559 39.3339 8.21875 39.2665 8.51758C39.2021 8.81641 39.1479 9.03905 39.1039 9.18554L38.0405 13H36.8979L36.0673 9.7832L35.2236 6.5752H36.2958L37.2143 10.3193C37.3578 10.9199 37.4604 11.4502 37.5219 11.9102C37.5541 11.6611 37.6025 11.3828 37.6669 11.0752C37.7314 10.7676 37.79 10.5186 37.8427 10.3281L38.8886 6.5752H39.9301L41.0024 10.3457C41.1049 10.6943 41.2133 11.2158 41.3276 11.9102C41.3715 11.4912 41.477 10.958 41.644 10.3105L42.558 6.5752H43.6215L41.9472 13Z' fill='white'/%3E%3Cpath d='M45.7957 13V6.5752H46.846V13H45.7957Z' fill='white'/%3E%3Cpath d='M52.0258 13H50.9755V7.47607H49.0859V6.5752H53.9155V7.47607H52.0258V13Z' fill='white'/%3E%3Cpath d='M61.2312 13H60.1765V10.104H57.2146V13H56.1643V6.5752H57.2146V9.20312H60.1765V6.5752H61.2312V13Z' fill='white'/%3E%3C/svg%3E&quot;);}@-webkit-keyframes formkit-bouncedelay-formkit-form-data-uid-49ba79c2cb-{0%,80%,100%{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}}@keyframes formkit-bouncedelay-formkit-form-data-uid-49ba79c2cb-{0%,80%,100%{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);}40%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);}}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #e1e1e1;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .seva-custom-content{padding:15px;font-size:16px;color:#fff;mix-blend-mode:difference;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-modal.guard{max-width:420px;width:100%;} .formkit-form[data-uid=&quot;49ba79c2cb&quot;]{border:1px solid #e3e3e3;max-width:700px;position:relative;overflow:hidden;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-background{width:100%;height:100%;position:absolute;top:0;left:0;background-size:cover;background-position:center;opacity:0.3;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] [data-style=&quot;minimal&quot;]{padding:20px;width:100%;position:relative;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-header{margin:0 0 27px 0;text-align:center;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-subheader{margin:18px 0;text-align:center;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-guarantee{font-size:13px;margin:10px 0 15px 0;text-align:center;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-guarantee &gt; p{margin:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-powered-by-convertkit-container{margin-bottom:0;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-fields{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:25px auto 0 auto;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-field{min-width:220px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-field,.formkit-form[data-uid=&quot;49ba79c2cb&quot;] .formkit-submit{margin:0 0 15px 0;-webkit-flex:1 0 100%;-ms-flex:1 0 100%;flex:1 0 100%;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] [data-style=&quot;minimal&quot;]{padding:40px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;]{margin-left:-5px;margin-right:-5px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-field,.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-submit{margin:0 5px 15px 5px;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-field{-webkit-flex:100 1 auto;-ms-flex:100 1 auto;flex:100 1 auto;}.formkit-form[data-uid=&quot;49ba79c2cb&quot;][min-width~=&quot;600&quot;] .formkit-fields[data-stacked=&quot;false&quot;] .formkit-submit{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;} &lt;/style&gt;&lt;/form&gt;
&lt;/div&gt;

</content>
 </entry>
 
 <entry>
   <title>Switch AWS accounts easily using roly</title>
   <link href="https://mrdias.com/2017/12/20/switch-aws-accounts-easily-using-roly.html"/>
   <updated>2017-12-20T00:00:00-04:00</updated>
   <id>https://mrdias.com/2017/12/20/switch-aws-accounts-easily-using-roly</id>
   <content type="html">&lt;p&gt;Many companies keep their AWS accounts separated per environment, per
team, etc and you can find yourself in a situation where you have
users and credentials on many different accounts. From a security
perspective this is not ideal as managing this can be very hard,
people will change teams, leave the company, etc and cleaning up their
access on all accounts can be very tedious and time consuming.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;A way to deal with this is by having a user in one account and then
assume role in another account so there’s only one place to manage
your users and credentials.&lt;/p&gt;

&lt;p&gt;I’m going to assume you already have knowledge about how to create a
role in the target account and configure your &lt;code&gt;~/.aws/credentials&lt;/code&gt;
file. If not AWS has a good basic introduction
&lt;a href=&quot;https://aws.amazon.com/blogs/security/how-to-use-a-single-iam-user-to-easily-access-all-your-accounts-by-using-the-aws-cli/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This has some advantages for security but if you are using MFA it can
be a bit more tedious to have to constantly type the tokens. The AWS
CLI when you give it the &lt;code&gt;--profile&lt;/code&gt; flag will perform an
&lt;code&gt;STS:AssumeRole&lt;/code&gt; call for you an cache the results for one hour.&lt;/p&gt;

&lt;p&gt;This can be sufficient for your needs but if you’re working with some
of the SDKs like boto you may encounter some problems. If you’re using
ansible it uses boto2 underneath which doesn’t support profiles to
assume role with MFA. Boto3 works correctly but you need to provide
the MFA token on every invocation since it won’t cache sessions for
you.&lt;/p&gt;

&lt;p&gt;To make my life easier and some colleagues while migrating from boto2
to boto3 I created a very small tool called &lt;strong&gt;&lt;a href=&quot;https://github.com/diasjorge/roly&quot;&gt;roly&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The AWS SDKs will respect the &lt;code&gt;AWS_*&lt;/code&gt; environment variables you
have set and roly just leverages this fact.&lt;/p&gt;

&lt;p&gt;You can use roly in two ways:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ roly export target-profile
Assume Role MFA token code: XXXX
export AWS_ACCESS_KEY_ID='XXXXXXXXXXXXXXXX'
export AWS_SECRET_ACCESS_KEY='XXXXXXXXXXXXXXXX'
export AWS_SESSION_TOKEN='XXXXXXXXXXXXXXXX'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If needed will prompt for your MFA token and then it will print the
commands needed to set your environment variables. The session will
last for an hour. Copy and paste them and you’re set.&lt;/p&gt;

&lt;p&gt;Or you can set the credentials and call a command just once.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ roly exec target-profile command
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can find the source and binaries at the
&lt;a href=&quot;https://github.com/diasjorge/roly&quot;&gt;github repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I hope you find it useful.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Fast directory navigation using the CDPATH</title>
   <link href="https://mrdias.com/2017/12/11/fast-directory-navigation-using-the-cdpath.html"/>
   <updated>2017-12-11T17:42:23-04:00</updated>
   <id>https://mrdias.com/2017/12/11/fast-directory-navigation-using-the-cdpath</id>
   <content type="html">&lt;p&gt;For a long time I’ve used my own command alias to navigate through my
work related projects and jump to them using the &lt;code&gt;cx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Originally the x comes from Xing where I worked at the time. It also
happens that the letter x is located next to the c which makes it very
convenient like &lt;code&gt;cd&lt;/code&gt;.
&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;Anyway imagine you’re in any directory on your system and you want to
change to &lt;code&gt;~/development/work/boring-project&lt;/code&gt; normally you’d do
something like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd ~/development/work/boring-project # or
cd ../../boring-project
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now this can get very tiresome depending where you are and having to
get right how many directories levels to go up, etc. Fortunately for
us we have the &lt;em&gt;CDPATH&lt;/em&gt; environment variable.&lt;/p&gt;

&lt;p&gt;We could set in our bash_profile&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CDPATH=~/development/work
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and then in our previous example we could have just done &lt;code&gt;cd boring-project&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If we had a directory &lt;code&gt;foo&lt;/code&gt; in our current path and a project
named &lt;code&gt;foo&lt;/code&gt; in our CDPATH in that case you’d be taken to project
foo which may not be what you want. So some people recommend to set
the CDPATH like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;CDPATH=.:~/development/work
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now in my case I don’t want to change the default behaviour of the cd
command so that’s were my &lt;code&gt;cx&lt;/code&gt; command comes in.&lt;/p&gt;

&lt;p&gt;You can copy this into your bash_profile.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Change to match your needs
export CXPATH=$HOME/development/work

cx() {
    CDPATH=$CXPATH cd $@
}

_cx() {
    CDPATH=$CXPATH _cd
}

complete -o nospace -F_cx cx
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With this when you type &lt;code&gt;cx&lt;/code&gt; you’ll get autocompletion too for the
projects in your CXPATH regardless from where you are.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Blog redesign</title>
   <link href="https://mrdias.com/2017/12/09/blog-redesign.html"/>
   <updated>2017-12-09T00:00:00-04:00</updated>
   <id>https://mrdias.com/2017/12/09/blog-redesign</id>
   <content type="html">&lt;p&gt;It’s been a while since I worked on the blog’s design. The design
dated back to 2011 which is like an eon in Internet time and I didn’t
particularly liked how it looked anymore so I decided to change it.&lt;/p&gt;

&lt;p&gt;I normally don’t do any design work and CSS is not something I’ve
enjoyed particularly but I’ve always used this space to work on that
area.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;I must say that css has greatly improved over the years. I didn’t have
to do anything to make it look the same on different browsers. The
tooling in google Chrome is just amazing nowadays. You can see exactly
how different elements look, their box size, paddings, margins,
etc. It’s a different experience from what I remembered and I enjoyed
the whole project quite a bit.&lt;/p&gt;

&lt;p&gt;I’m a big fan of &lt;a href=&quot;http://ethanschoonover.com/solarized&quot;&gt;solarized&lt;/a&gt;. I
use it on my editor and on the terminal so I figured having my blog
with solarized would be a great idea :)&lt;/p&gt;

&lt;p&gt;I used &lt;a href=&quot;http://thomasf.github.io/solarized-css/&quot;&gt;solarized-css&lt;/a&gt;
for the color scheme with the reset from
&lt;a href=&quot;http://getskeleton.com&quot;&gt;skeleton&lt;/a&gt; I had from my previous design.&lt;/p&gt;

&lt;p&gt;One of the major changes is that the design was done for mobile first
and then changed it to adapt for bigger screens. I borrowed some ideas
about it from some blog posts like
&lt;a href=&quot;http://dmolsen.com/2013/03/05/media-query-less-design-content-based-breakpoints-tweakpoints/&quot;&gt;this&lt;/a&gt;
about doing media queries based on your content and not defined screen
sizes. I didn’t use any responsive layout framework like skeleton and
just used css-grid now that most browsers support it to define the
content structure.&lt;/p&gt;

&lt;p&gt;I’m happy with the end result, it’s more up to date with my
preferences, I like that it’s more colorful and less sober than it
was. I learned some new things and specially I had fun doing something
I’m not used to which is a great way to push myself and get out of the
comfort zone.&lt;/p&gt;

&lt;p&gt;I hope you enjoy it too.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Packaging AWS Lambda dependencies using docker</title>
   <link href="https://mrdias.com/2017/03/09/packaging-aws-lambda-dependencies-using-docker.html"/>
   <updated>2017-03-09T00:00:00-04:00</updated>
   <id>https://mrdias.com/2017/03/09/packaging-aws-lambda-dependencies-using-docker</id>
   <content type="html">&lt;p&gt;Recently I’ve been using AWS Lambda at work for some projects and one
of the limitations that you have is trying to use packages with
compiled dependencies.&lt;/p&gt;

&lt;p&gt;Compiling them on your machine won’t work and the “recommended” way is
to start an EC2 instance and compile your dependencies there and then
copy those to your machine back.&lt;/p&gt;

&lt;p&gt;Fortunately AWS now provides a docker image for amazon linux which
we can leverage to build our depencies. We can avoid launching an
instance and get faster results.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;Below I provide an example to build the dependencies for a python
project but you can probably modify it for other cases.&lt;/p&gt;

&lt;p&gt;Just put the following content in a Makefile.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-basemake&quot; data-lang=&quot;basemake&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;yum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-y&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;gcc&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;libffi-devel&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;openssl-devel&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;python27-virtualenv
&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;virtualenv&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/tmp/venv
&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;/tmp/venv/bin/pip&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--upgrade&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;pip&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;setuptools
&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;/tmp/venv/bin/pip&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-e&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;.
&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;cp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-r&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/tmp/venv/lib/python2.7/site-packages/.&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;./aws_lambda_libs
&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;cp&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-r&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/tmp/venv/lib64/python2.7/site-packages/.&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;./aws_lambda_libs

&lt;span class=&quot;nf&quot;&gt;lambda-deps&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;@echo&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;--&amp;gt; Compiling lambda dependencies&amp;quot;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;	&lt;/span&gt;docker&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;run&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--rm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-it&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-v&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CURDIR&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;:/src&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-w&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/src&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;amazonlinux&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;make&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;compile

&lt;span class=&quot;nf&quot;&gt;.PHONY&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lambda&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;deps&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;compile&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Then you just need to execute:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;&lt;/span&gt;make&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;lambda-deps&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;When this process finishes you’ll have your dependencies compiled in aws_lambda_libs.&lt;/p&gt;

&lt;p&gt;Just include those contents at the root of your package.zip and deploy.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Using docker containers with your existing rails app</title>
   <link href="https://mrdias.com/2015/03/08/using-docker-containers-with-your-existing-rails-app.html"/>
   <updated>2015-03-08T00:00:00-04:00</updated>
   <id>https://mrdias.com/2015/03/08/using-docker-containers-with-your-existing-rails-app</id>
   <content type="html">&lt;p&gt;This tutorial is an extraction from a talk I recently presented about
docker and rails apps at the Barcelona on Rails user group. I’ll
explain how to integrate docker into an existing rails app workflow.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;h3 id=&quot;dockerizing-our-dependencies&quot;&gt;Dockerizing our dependencies&lt;/h3&gt;

&lt;p&gt;The first step to integrate docker into our workflow is to start with
our application dependencies.&lt;/p&gt;

&lt;p&gt;As an example I’ll use the open source app
&lt;a href=&quot;https://github.com/fulcrum-agile/fulcrum&quot;&gt;fulcrum&lt;/a&gt;. I assume this
application is running locally as would be the case with an existing
rails app. For this example we’ll use the postgresql database.&lt;/p&gt;

&lt;p&gt;So the first thing is to initialize our database container. For that
we execute the following command.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;docker&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;run&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-d&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--name&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;fulcrum-postgres&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-e&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;POSTGRES_USER&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;fulcrum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-e&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;fulcrum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-p&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5432&lt;/span&gt;:5432&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;postgres&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;So we’re creating a container and run it as a daemon (-d), we
setup some environment variables (-e) for the username and password and
make the ports available (-p HOSTPORT:CONTAINERPORT).&lt;/p&gt;

&lt;p&gt;Now we need to adjust our config/database.yml, it should look
something like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;development&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;adapter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;postgresql&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;unicode&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;fulcrum_development&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;pool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;&amp;lt;%= ENV[&amp;#39;POSTGRES_HOST&amp;#39;] %&amp;gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;&amp;lt;%= ENV[&amp;#39;POSTGRES_USER&amp;#39;] %&amp;gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;&amp;lt;%= ENV[&amp;#39;POSTGRES_PASSWORD&amp;#39;] %&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;adapter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;postgresql&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;unicode&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;database&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;fulcrum_test&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;pool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;host&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;&amp;lt;%= ENV[&amp;#39;POSTGRES_HOST&amp;#39;] %&amp;gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;&amp;lt;%= ENV[&amp;#39;POSTGRES_USER&amp;#39;] %&amp;gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;&amp;lt;%= ENV[&amp;#39;POSTGRES_PASSWORD&amp;#39;] %&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;And now we run our rails app&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# Initialize the db&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;POSTGRES_HOST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;boot2docker&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ip&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;POSTGRES_USER&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;fulcrum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;fulcrum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
bundle&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rake&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;db:setup

&lt;span class=&quot;c1&quot;&gt;# Run the app&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;POSTGRES_HOST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;boot2docker&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ip&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;POSTGRES_USER&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;fulcrum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;fulcrum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
bundle&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rails&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;s&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Please note that for the value for the &lt;em&gt;POSTGRES_HOST&lt;/em&gt; I’m using
boot2docker, if you’re running on linux or against another docker host
replace this accordingly.&lt;/p&gt;

&lt;p&gt;Now when we visit localhost:3000 our app will be running against our
database in a docker container.&lt;/p&gt;

&lt;p&gt;For a more complicated app, we’d do the same for the rest of our
dependencies. By starting with the dependencies, we are preparing the
road so we can have a more decoupled environment while maintaining our
regular workflow.&lt;/p&gt;

&lt;h3 id=&quot;dockerizing-the-app&quot;&gt;Dockerizing the app&lt;/h3&gt;

&lt;p&gt;The next step is to run the application itself inside a container. For
this we’ll need to create our Dockerfile.&lt;/p&gt;

&lt;p&gt;There are many different places to start from. We’ll use the official
ruby 2.1.2 container since this is the ruby version our app needs, but
defining our own from scratch is quite easy as well.&lt;/p&gt;

&lt;p&gt;Our Dockerfile should look like this&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot; data-lang=&quot;dockerfile&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;ruby:2.1.5&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;apt-get&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;update&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;noninteractive&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;apt-get&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-y&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;nodejs&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-rf&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/var/lib/apt/lists/*

&lt;span class=&quot;k&quot;&gt;WORKDIR&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;/app&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;COPY&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;Gemfile*&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/app/

&lt;span class=&quot;k&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;bundle&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-j4

&lt;span class=&quot;k&quot;&gt;ADD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;.&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/app

&lt;span class=&quot;c&quot;&gt;# Let&amp;#39;s create a user to run the app that is not root&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;usr/sbin/useradd&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--create-home&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--home-dir&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/app&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--shell&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/bin/bash&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;fulcrum

&lt;span class=&quot;k&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;chown&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-R&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;fulcrum:fulcrum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;/app

&lt;span class=&quot;k&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;fulcrum&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;rails&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;We also need to tell docker certain files we don’t want as part of our container,
we create a .dockerignore file like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;.git
.bundle
vendor/bundle&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;After creating the files in the root of our app we execute:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;docker&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;build&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-t&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;fulcrum-web&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Once that is finised we can run our app like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;docker&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;run&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--rm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-p&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3000&lt;/span&gt;:3000&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--link&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;fulcrum-postgres:postgres&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-e&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;POSTGRES_HOST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;postgres&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-e&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;POSTGRES_USERNAME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;fulcrum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-e&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;fulcrum&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
fulcrum-web&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;So what is this doing exactly? We’re linking our database container to
our web container (–link), we’re exposing the port 3000 (-p) and
we’re also setting environment variables (-e) with the values we used
when creating our db container. After executing this we can go visit
our app running on http://DOCKER_HOST:3000&lt;/p&gt;

&lt;p&gt;The first thing we can see is that we have to set many duplicate
environment variables from the database when running our container,
fortunately docker allows us to have access to a linked container
environment variables.&lt;/p&gt;

&lt;p&gt;We can change now our config/database.yml replacing the username and
password like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;&amp;lt;%= ENV[&amp;#39;POSTGRES_USER&amp;#39;] || ENV[&amp;#39;POSTGRES_ENV_POSTGRES_USER&amp;#39;] %&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;&amp;lt;%= ENV[&amp;#39;POSTGRES_PASSWORD&amp;#39;] || ENV[&amp;#39;POSTGRES_ENV_POSTGRES_PASSWORD&amp;#39;] %&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;We rebuild our container again, and now we can start it simply like:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;docker&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;run&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--rm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-p&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3000&lt;/span&gt;:3000&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--link&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;fulcrum-postgres:postgres&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-e&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;POSTGRES_HOST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;postgres&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
fulcrum-web&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Now, recreating our container every time we make a file change is going
the get very annoying quite soon. For this we can also leverage
another docker facility called volumes. This will allow our container
to have access to our local files. To do this simply we start our
container like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;docker&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;run&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--rm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-p&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3000&lt;/span&gt;:3000&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--link&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;fulcrum-postgres:postgres&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-e&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;POSTGRES_HOST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;postgres&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
-v&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$PWD&lt;/span&gt;:/app&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
fulcrum-web&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Note: Please make sure you delete your .bundle/config local file to
avoid issues with bundler inside the container.&lt;/p&gt;

&lt;h3 id=&quot;automating-our-setup-with-docker-compose&quot;&gt;Automating our setup with docker compose&lt;/h3&gt;

&lt;p&gt;At this point we have our app running successfully inside a docker
container, but having to be typing this commands constantly is not fun.&lt;/p&gt;

&lt;p&gt;To finish our setup we’ll use &lt;a href=&quot;https://docs.docker.com/compose/&quot;&gt;docker compose&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So let’s create our docker-compose.yml.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;web&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p p-Indicator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;db:postgres&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;POSTGRES_HOST&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;postgres&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p p-Indicator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;3000:3000&amp;quot;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p p-Indicator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;.:/app&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;postgres&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;POSTGRES_USER&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;fulcrum&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;fulcrum&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Now to run our app we simply do:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;docker-compose&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;up&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The first time we access our app it will complain our db is not
created we can simply fix this by running:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;docker-compose&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;run&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;web&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rake&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;db:setup&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;And last but not least if you want to run your tests then you can simply do:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;docker-compose&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;run&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;web&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rake&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;db:test:prepare&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;spec&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h3 id=&quot;the-end&quot;&gt;The end&lt;/h3&gt;

&lt;p&gt;So that’s it, I hope this tutorial helps you get started with docker
with your existing rails applications. If you want more info about
docker compose, check out my article about fig (docker compose’s
predecesor) &lt;a href=&quot;/2014/12/19/faster-docker-containers-development-using-fig.html&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Faster docker containers development using fig</title>
   <link href="https://mrdias.com/2014/12/19/faster-docker-containers-development-using-fig.html"/>
   <updated>2014-12-19T00:00:00-04:00</updated>
   <id>https://mrdias.com/2014/12/19/faster-docker-containers-development-using-fig</id>
   <content type="html">&lt;p&gt;Yesterday I had the opportunity to present a lightning talk on the
&lt;a href=&quot;http://www.meetup.com/docker-barcelona-spain/&quot;&gt;Barcelona Docker Group&lt;/a&gt;
about working with &lt;a href=&quot;http://www.fig.sh/&quot;&gt;fig&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;During the talk I presented a tool that is helping me focus on
developing the different containers and make the changes to the
Dockerfile and the apps themselves and leave out the details
of using fig.&lt;/p&gt;

&lt;p&gt;The tool is called
&lt;a href=&quot;https://github.com/diasjorge/guard-fig&quot;&gt;guard-fig&lt;/a&gt;.&lt;!-- -**-END-**- --&gt;
It builds on top of guard to detect changes to your fig projects and
will stop and rebuild the corresponding containers as well as
restarting the linked containers to keep everything working
smoothly. It also offers configurable integration with boot2docker and
building your whole project on start.&lt;/p&gt;

&lt;p&gt;If you’re working with fig, give it a try and report any issues.&lt;/p&gt;

&lt;p&gt;You can find the slides for my talk
&lt;a href=&quot;https://github.com/diasjorge/docker-meetup-fig-lightning-talk/raw/master/slides.pdf&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Changing to devops</title>
   <link href="https://mrdias.com/2014/12/09/changing-to-devops.html"/>
   <updated>2014-12-09T00:00:00-04:00</updated>
   <id>https://mrdias.com/2014/12/09/changing-to-devops</id>
   <content type="html">&lt;p&gt;It’s been over 3 months since my change to the site operations team at
Xing and time has really been flying by.&lt;/p&gt;

&lt;p&gt;Everything is new and I really don’t know what to do many times and
that I find very delightful. The investigation, learning, figuring out
how to achieve something, reading forums or stack overflow and trying
to fit a puzzle into your head. I think this is what I love the most
about computers, that moment when you understand the machine, what it
does and why it does it. It’s the hack, making the computer do what
you want. Getting out of my comfort zone is helping me appreciate the
basics more.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;During this time, I’ve played with many technologies, different
programming languages, libraries, etc. It’s not about a product
anymore I care, it’s about the platform.  Even though I’m immersed in
some low level details about the systems most of the day, the work
itself feels at a higher level. The components are bigger and so are
their interactions. I could compare caring about an app with caring
for a model, the whole database instead of my schema.&lt;/p&gt;

&lt;p&gt;But not all is about technology, the human side is very interesting as
well. I get to interact with most of the engineers working in the
company, so I talk to a very diverse range of people. Different
languages, cultures, backgrounds, etc and I have to say most people
are actually very grateful when you help them out. Others just seem
like they don’t know how to ask things and I have to work on my
patience, frustration can sometimes make us say the right things in a
very wrong way, this goes for both sides. I also find that I’m more
mentally drained when I finish the work. I guess it just takes a lot
of energy to be constantly solving other’s problems even if it’s also
very regarding.&lt;/p&gt;

&lt;p&gt;I’m really enjoying this big new learning experience. I feel there are
so many opportunities as when I started learning Ruby on Rails around
8 years ago. I see this as a new beginning, an evolution from
developing software to developing platforms.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Growing a garden</title>
   <link href="https://mrdias.com/2014/07/03/growing-a-garden.html"/>
   <updated>2014-07-03T00:00:00-04:00</updated>
   <id>https://mrdias.com/2014/07/03/growing-a-garden</id>
   <content type="html">&lt;p&gt;A couple months ago I started growing a vegetable garden at home with my girlfriend. It’s been a great experience. She’s always been into plants, we have lots of them around the house but never had we tried to grow food. I think the fact that I can get something out of the experience that is more than just aesthetic but also functional (I can eat the vegetables) has made it more appealing for me.&lt;/p&gt;

&lt;p&gt;There have been some experiences so far that I somehow can relate with developing a software project.
&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;A garden needs continuous care just like a software project. I need to constantly take care of it, I need to water it constantly just like a project needs your constant development.&lt;/p&gt;

&lt;p&gt;As it grows some of the plants leaves start looking bad and so they need to be trimmed, just like in any of our projects you need to keep your code tidy and keep doing small refactorings. If I don’t trim the plants then they start loosing strength, the bad leaves consume energy from the plant, the same as rusty and buggy code drain energy from your project.&lt;/p&gt;

&lt;p&gt;Since we’re very new at this we’ve made plenty of mistakes, giving the plants too much water or too little, not knowing exactly how to cut the plants, etc. The same as starting to use a new framework or library and you still don’t know how to do it “the right way” and make many mistakes. Fortunately google is as helpful to find information about gardening as it is to help you find the right answers about development.&lt;/p&gt;

&lt;p&gt;Some time ago we got a plague in our tomato plants, some bugs (literally) are attacking it. When I noticed it I felt very sad. I’ve been working a lot of my garden and now some ugly bugs are destroying it. I think any software developer can relate to this one. Anyway, although some damage has been made, I’ve bought some ecological pesticide and now things are starting to get better. Sometimes you can only learn the lessons the hard way. My immediate reaction was to go and buy anything that would kill the bugs but we needed something that would kill the pest and allow us to be able to eat the vegetables later. When working on a software project we want to solve bugs very quickly but we have to keep in mind as well the long term goals and try to find the right solution. It’s best to find the right solution and avoid something that could cause more harm than good.&lt;/p&gt;

&lt;p&gt;And finally as with any software project what a great feeling it was when we made a deployment. One of the lettuces had fully grown and it was ready to eat. I can’t describe the nice warm, fuzzy feeling I had to eat something that I helped to grow. It’s such a good feeling to enjoy something you’ve invested your time and effort into it. Besides the lettuce was really fresh (can it get any more fresh?) and crunchy.&lt;/p&gt;

&lt;p&gt;I hope to keep growing more vegetables, learn about them and get better at it, just like with any technology.&lt;/p&gt;

&lt;p&gt;My recommendation, start growing your own small vegetable garden, I think you can learn a lot about yourself by doing it.&lt;/p&gt;

&lt;p&gt;Happy &lt;del&gt;hacking&lt;/del&gt; planting!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Barcelona GDG Devfest 2013</title>
   <link href="https://mrdias.com/2013/10/12/barcelona-gdg-devfest-2013.html"/>
   <updated>2013-10-12T00:00:00-04:00</updated>
   <id>https://mrdias.com/2013/10/12/barcelona-gdg-devfest-2013</id>
   <content type="html">&lt;p&gt;I was invited with my friend &lt;a href=&quot;http://meninno.com&quot;&gt;Jean Carlos Meninno&lt;/a&gt; to give a presentation on the &lt;a href=&quot;http://bcn.gdgdevfest.com/&quot;&gt;GDG DevFest Barcelona 2013&lt;/a&gt;. It was a great opportunity to talk about the work we’re doing recently for XING and the things we’ve been learning about developing large scale backbone applications.&lt;/p&gt;

&lt;p&gt;Here you can find the slides: &lt;a href=&quot;http://diasjorge.github.io/google-dev-fest-slides/&quot;&gt;http://diasjorge.github.io/google-dev-fest-slides/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope you like them.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Closed doors open source</title>
   <link href="https://mrdias.com/2012/09/10/closed-doors-open-source.html"/>
   <updated>2012-09-10T00:00:00-04:00</updated>
   <id>https://mrdias.com/2012/09/10/closed-doors-open-source</id>
   <content type="html">&lt;p&gt;During my time working at &lt;a href=&quot;http://xing.com&quot;&gt;XING&lt;/a&gt; I believe my single
biggest contribution for the company is a side project I’ve developed
called Xing scripts. This project started with a personal need for
working with our development environment in a more automated way. I’m
a big proponent of automating everything you can and so when I started
working I realized that there were these tasks that I would do over
and over again. Since I couldn’t bare doing all this manual work I
started writing my own scripts.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;One day I showed them to one of my fellow team members and he liked
them very much. They were just a mix of quick and dirty ruby and bash
scripts. Some other people wanted to use them too so I started
packaging them as a ruby gem. And then this scripts began evolving. I
kept adding more features and it felt good. Through word of mouth more
people started hearing about them and asking for support for their own
applications, so I did. With time the gem started to gain more
traction inside the company and people have started sending patches to
add other features and supporting many more applications. This has
been very regarding for me, many people have praised me for the work
I’ve put into this, since it helps them work much faster.&lt;/p&gt;

&lt;p&gt;When a new project is started one of the first things they do, or ask
me, is for support with the xing scripts, this fact helps me feel like
I’ve accomplished something very good and that my work on this project
is important to many people and for the company as a whole. This
feeling is the same when I do Open Source, when someone uses one of my
projects or when I collaborate on another project. The lessons I’ve
learned while working on this project have been many, from a technical
point of view as well as personally. For my “regular” work I’m
basically doing web stuff with Rails, but this has been an opportunity
to work with Ruby on something non web. I had some experience doing
command line applications but none of this scale. With the growth of
the number of features and applications that need to be supported I’ve
had to solve some very interesting problems. I’ve learned a lot about
OOP and software design, testing CLIs and how they interact with other
services, the importance of semantic versioning, creating a ChangeLog,
writing proper documentation, giving support to the users, “selling”
your project, etc. All these things that are not part of my daily work
and that without this project I couldn’t have learned.&lt;/p&gt;

&lt;p&gt;I guess the lesson here is that you can create stuff to solve your own
problems and maybe other people’s too. Other people might be
struggling with the same problems and have their own solutions, so you
can unite and work together. Open source doesn’t have to be code on
github, it can be internal projects inside your company, whether
they’re tools, libraries, silly web sites, etc. just share them.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Git rebasing without conflicts</title>
   <link href="https://mrdias.com/2012/07/11/git-rebasing-without-conflicts.html"/>
   <updated>2012-07-11T00:00:00-04:00</updated>
   <id>https://mrdias.com/2012/07/11/git-rebasing-without-conflicts</id>
   <content type="html">&lt;p&gt;Yesterday I was at work with a colleague and we wanted to merge a long-running branch we had. This branch was full of useless commits so we wanted to clean it up. We tried an interactive rebase but we got a lot of conflicts since git doesn’t know how to resolve merge conflicts that we had previously fixed. As you probably know this is no fun, so we did what any sane person would do and found a nice solution for this called &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/git-rerere.html&quot;&gt;git-rerere&lt;/a&gt;.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;This command allows you to record the way you resolve conflicts and then reuse them when doing automerges in the future. But there’s a drawback to it, first you have to enable an option and second you have to record this solutions as you do them. If you didn’t know about this command before then you didn’t record those solutions and you’re at the same point where you started. Don’t worry there’s a solution it’s called &lt;a href=&quot;http://git.kernel.org/?p=git/git.git;a=blob;f=contrib/rerere-train.sh;h=2cfe1b936b0feef1bd40947ce6ab249f62a6ad55;hb=HEAD&quot;&gt;rerere-train&lt;/a&gt;, it’s a contrib script from git which recreates the rerere database from your existing commits, this is exactly what we need…awesome!!&lt;/p&gt;

&lt;p&gt;So how do you use it? It’s very easy.
First you have to enable git-rerere like:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;git&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;config&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rerere.enabled&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Then download the script to somewhere in your $PATH and then do:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;sh&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rerere-train.sh&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;YOUR-LONG-RUNNING-BRANCH-NAME&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;You have to wait some time so it does it’s work and it’ll depend on how long is the branch. After it finishes you can do the rebase. something like:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;git&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rebase&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-i&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;master&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;And now git will know how to resolve the conflicts for you. Enjoy!&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Using chef to setup your OSX environment</title>
   <link href="https://mrdias.com/2012/05/11/using-chef-to-setup-your-development-environment-in-osx.html"/>
   <updated>2012-05-11T00:00:00-04:00</updated>
   <id>https://mrdias.com/2012/05/11/using-chef-to-setup-your-development-environment-in-osx</id>
   <content type="html">&lt;p&gt;Recently I had to reinstall my computer at work since I had to update to Lion and I could only do a fresh install, so I decided to try to automate the installation process since some of my colleagues are going through the same and it seems like every time we have to waste many hours or days to solve the same issues over and over.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;A few days before I had stumbled upon this &lt;a href=&quot;http://jtimberman.housepub.org/blog/2012/01/28/iterm2-with-tmux/&quot;&gt;article&lt;/a&gt; just by coincidence and it gave me some light into what could be done. This article led to a &lt;a href=&quot;http://jtimberman.housepub.org/blog/2011/04/03/managing-my-workstations-with-chef/&quot;&gt;previous one&lt;/a&gt; by the same author about using chef to manage his workstations I knew what had to be done.&lt;/p&gt;

&lt;p&gt;So when I finally decided to tackle the problem I found a nice addition to the whole package which is a gem called &lt;a href=&quot;https://github.com/mkocher/soloist&quot;&gt;soloist&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Soloist makes it &lt;strong&gt;very&lt;/strong&gt; easy to setup your environment and hides lots of the complexity of using chef-solo. Basically it just needs a very simple file structure to know about your cookbooks and a configuration file where you specify the recipes that you need.&lt;/p&gt;

&lt;p&gt;I started to use it, but then I got into a few problems. The first one is that chef 0.10.8 had some problems with your USERID if your account is created by Active Directory (which of course was my case), so I had to install chef 0.10.10.rc.3. This made it work. &lt;strike&gt;I also found that the soloist version from rubygems at the moment (0.9.4) did not allow to pass node attributes so I had to build the gem from the latest HEAD on the git repository.&lt;/strike&gt; UPDATE: a new version of soloist was released that fixes that issue.&lt;/p&gt;

&lt;p&gt;After reading many of the recipes from &lt;a href=&quot;https://github.com/pivotal/pivotal_workstation&quot;&gt;pivotal_workstation&lt;/a&gt; I chose the ones I liked the most and in the end things worked as you could expect, I did make some changes to some of the recipes to suit them better to my needs and to deal with a bug in chef with symlinks, although if you’re using a stable chef version perhaps you should be fine. I found other useful cookbooks as well and incorporated them to my soloist project and I even wrote some of my own recipes (which I have to say was very easy).&lt;/p&gt;

&lt;p&gt;So in conclusion I’m hooked, I know all my macs (and maybe pc’s as well) will have to be installed like this in the future. This was as well my first experience working with chef and it was a very pleasant one even though I had some problems, but that’s the price to pay for being on the “bleeding” edge.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Slow down, you are programming too fast</title>
   <link href="https://mrdias.com/2012/02/29/slow-down-you-are-programming-too-fast.html"/>
   <updated>2012-02-29T00:00:00-04:00</updated>
   <id>https://mrdias.com/2012/02/29/slow-down-you-are-programming-too-fast</id>
   <content type="html">&lt;p&gt;As a programmer, the impetus to go as fast as you can is to be taken with caution as it helps you move forward but it can also hold you back.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;Many times I’ve heard about “being in the zone” and sometimes I’ve had this feeling when code is just flowing from your hands but this state of mind is very tricky as you start to relax and stop being conscious. Being aware of what you’re doing and the road that lays in front of you is key to achieve your goals and not fall in mental traps of comfort.&lt;/p&gt;

&lt;p&gt;Many times the lack of experience combined with great aptitude can lead to a feeling of trying to compensate with speed. Pure speed is akin to raw force, it can only get you so far. Great programmers are not measured in “Keystrokes per minute”. Better than being fast is making every keystroke count. Get to know your editor.&lt;/p&gt;

&lt;p&gt;Patience is a great virtue and you should nourish it. When tackling a problem, the first thing to do is understand it, if you’re working with someone else even better, discuss it, validate your assumptions. When trying to use a library read the documentation first, read the man page, RTFM sounds familiar? When reading, be sure to actually comprehend what is written don’t just scan through pages, you need to really absorb the information, it will save you many hours of debugging and a great deal of frustrations. When you find an error read the back-trace, read the environment variables, don’t just assume you know the problem until you understand the cause. When coding unless you’re just trying something out, think about the ways you want the code to be used, think of your interface before your implementation. This is one of the best outcomes of doing TDD, so even if you’re not doing TDD/BDD/ADD or whatever flavor you prefer at least think from the outside, you will soon realize you need some tests.&lt;/p&gt;

&lt;p&gt;Being conscious let’s you see the obstacles in front of you, so you can avoid them or just defer them until you’re better prepared. Be able to recognize when you’re stuck and back away.&lt;/p&gt;

&lt;p&gt;And last but not least take pauses every so often, rest your eyes and your brain, take a deep breath, relax and you’ll be back into action with more energy.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Being pragmatic</title>
   <link href="https://mrdias.com/2011/12/21/being-pragmatic.html"/>
   <updated>2011-12-21T00:00:00-04:00</updated>
   <id>https://mrdias.com/2011/12/21/being-pragmatic</id>
   <content type="html">&lt;p&gt;It is perhaps my experience but I’ve hardly had the opportunity to work on green field projects, but rather worked on legacy ones where most of the original developers were no longer part of the team or even none of them. Projects with little to no documentation and in some cases no tests at all. You probable know this feeling, it sucks, you want to do things but everything you touch breaks something else, where you obviously see that there was lack of care. &lt;!-- -**-END-**- --&gt;The point is not to criticize the developers who did this, they probably didn’t know any better and they probably tried to do their best given the constraints they had. But being the one who cleans that mess is not cool. So what can you do? Well don’t be that developer. Take care of your future self and others who may come after you and make it easier for them. Others will probably curse you anyway, you just can’t be perfect, but at least try to be invisible, try to give your best shot and don’t cut corners. Test your code and think from the outside, how the code is going to be used. May be you’re thinking that your boss is going to tell you to “not waste time” with tests or “just make things work”, and this is the point where you have to keep true to yourself and be a professional. You have to be ethic and do things well, but you also have to choose your battles right, not everything is a matter of life and death but also not everything is unimportant, choose right and you’ll earn the confidence of your peers and superiors.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;Sometimes a big refactoring is too much to tackle at the moment, then try to contain the mess, don’t add more to it if you can avoid it, resist the urge to go and rewrite it all. Sometimes parts of an application are not pretty, but they’re stable and you hardly have to modify them, don’t change a lot of code just to make it “better”. In other occassions you don’t like the “style” of the code, adapt to it, other people probably don’t like your “style” either. Sometimes a refactoring seems like the only choice, then go ahead but don’t underestimate the ones before you, as you may find some surprises in your way. Be patient, with time you will learn the parts of the application that are always changing and are hard to mantain and then you’ll have enough experience to do a proper refactoring, if you rewrite everything you don’t like then you’ll never learn why you don’t like it.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Back from the trenches</title>
   <link href="https://mrdias.com/2011/08/29/back-from-the-trenches.html"/>
   <updated>2011-08-29T00:00:00-04:00</updated>
   <id>https://mrdias.com/2011/08/29/back-from-the-trenches</id>
   <content type="html">&lt;p&gt;It’s been some agitated months lately for me, I quitted working at JustLanded after almost two years there and then went working for some consulting, the experience was not so great, actually it was really bad, the kind of experience that has made me learn to choose very carefully my future career moves and never again believe in marketing people. Fortunately I got an offer to work at &lt;a href=&quot;https://xing.com&quot;&gt;XING&lt;/a&gt; offices in Barcelona, so I packed my stuff and moved there. Now this is a really good place to work, everything was as we talked, they’ve been very helpful with my relocation and the environment is great, lots of smart people that want to do a good job, so nowadays I’m very happy and enjoying my new city.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;Since moving to Barcelona I’ve been keeping myself very busy contributing to some open source projects as Rubinius, Rinari and lost of elisp stuff and it’s been awesome. I’ve also released a new project called &lt;a href=&quot;https://github.com/xing/filet&quot;&gt;filet&lt;/a&gt;, which is a DSL to write acceptance tests on top of Test::Unit, with some nice extra features, but that will be subject of a future post.&lt;/p&gt;

&lt;p&gt;Also since I started working at &lt;a href=&quot;https://xing.com&quot;&gt;XING&lt;/a&gt; they got me a MacBook Pro, so it was a big switch for me since I’ve been using Ubuntu for years. After a couple of months I can say I’m really used to the new OS, though I still use Ubuntu every now and then, but getting there was not always easy. The first thing I missed was a package manager a la APT, the lesson learned is that if you value your sanity you will just uninstall macports and use homebrew. Another thing I was missing was maximizing windows, for that there is a tool RightZoom that makes them actually maximize. I also struggled a bit to get emacs and my configurations working, since I didn’t wanted to stay on emacs 22 which ships by default with OSX. I tried Aquamacs, Carbon Emacs, etc and finally settled for the package at &lt;a href=&quot;http://emacsformacosx.com/&quot;&gt;http://emacsformacosx.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So it took me a while to write this post, I’ve been procrastinating it for far too long, so now I hope I can go back to publishing on a more regular basis.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Avoid Empty Deploys with Capistrano</title>
   <link href="https://mrdias.com/2011/01/13/avoid-empty-deploys-with-capistrano.html"/>
   <updated>2011-01-13T00:00:00-04:00</updated>
   <id>https://mrdias.com/2011/01/13/avoid-empty-deploys-with-capistrano</id>
   <content type="html">&lt;p&gt;If you’ve ever forgotten to push your changes to the remote repository before trying to make a deploy, you will know that it can be really frustrating to think that everything has gone live when actually it has not. This little script will help you avoid this situations.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;namespace&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:deploy&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;task&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:check_changes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;current_revision&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;real_revision&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Capistrano&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CLI&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;say&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;You don&amp;#39;t have any changes to deploy&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;agree&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Capistrano&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CLI&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;agree&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Continue (Yes, [No]) &amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;n&amp;#39;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;unless&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;agree&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# current_revision depends on current_path&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reset!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:current_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reset!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:current_revision&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reset!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:real_revision&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;What this does is check that we have different revisions deployed between our deployed version and the version in repositories and it will ask for confirmation in case they are the same. Just include the above code in your deploy recipe and then for the environment you want to deploy to just include the following:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;before&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;deploy:update_code&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;deploy:check_changes&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;If you’re doing any kind of automated deployment, let’s say from you continuous integration server to your staging server don’t include that code since it will sometimes just wait for an answer that is never going to come.&lt;/p&gt;

&lt;p&gt;Hope this helps you and happy deployments!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Passenger, RVM gemsets and Bundler</title>
   <link href="https://mrdias.com/2010/11/17/passenger-rvm-gemsets-and-bundler.html"/>
   <updated>2010-11-17T00:00:00-04:00</updated>
   <id>https://mrdias.com/2010/11/17/passenger-rvm-gemsets-and-bundler</id>
   <content type="html">&lt;p&gt;When using passenger with rvm I’ve had some issues with project specific gemsets, where bundler was unable to find the gems.
After searching a lot I found out about using the “config/setup_load_paths.rb” file to tell passenger where to locate your gems, but then I had a new issue with rvm trying to use the system ruby instead of the ruby version of my .rvmrc file.&lt;/p&gt;

&lt;p&gt;After going to the irc channel, I got some help that help me fixed my problem. The culprit was my rvmrc file.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;As I’ve seen on many blog posts the file looked something like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;rvm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;use&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--create&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ree@rails235&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The solution was to generate the rvmrc file using rvm itself like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;rvm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--create&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--rvmrc&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;use&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;ree@rails235&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The file contents now look like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-d&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;rvm_path&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/.rvm&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/environments&amp;quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-s&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;rvm_path&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/.rvm&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/environments/ree-1.8.7-2010.02@rails235&amp;quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;rvm_path&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/.rvm&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/environments/ree-1.8.7-2010.02@rails235&amp;quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;rvm&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--create&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;use&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;ree-1.8.7-2010.02@rails235&amp;quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;And passenger is able to find my gems without any problems.&lt;/p&gt;

&lt;p&gt;Hope this helps you as I spent way too much time with this issue.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Conferencia Rails Workshop</title>
   <link href="https://mrdias.com/2010/11/04/conferencia-rails-workshop.html"/>
   <updated>2010-11-04T00:00:00-04:00</updated>
   <id>https://mrdias.com/2010/11/04/conferencia-rails-workshop</id>
   <content type="html">&lt;p&gt;As promised here are the slides for the “Conferencia Rails” workshop on process automation. Thanks to all the people that were there. I’m also releasing the redmine CLI I’ve created along with the CLI twitter client.&lt;/p&gt;

&lt;p&gt;The presentation was created using the &lt;a href=&quot;http://slideshow.rubyforge.org/&quot;&gt;slideshow&lt;/a&gt; gem which generates an html document for you.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/workshop-slides/workshop.html&quot;&gt;Slides&lt;/a&gt; To start the presentation just hit the “LEFT” arrow key. You can also find a pdf version &lt;a href=&quot;/workshop-slides/workshop.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/diasjorge/redmine-cli&quot;&gt;Redmine CLI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/diasjorge/ruby-cli-tweet&quot;&gt;Ruby CLI Tweet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope you enjoy it.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ruby Enterprise, Passenger and Encoding hell</title>
   <link href="https://mrdias.com/2010/05/25/ruby-enterprise-passenger-and-encoding-hell.html"/>
   <updated>2010-05-25T00:00:00-04:00</updated>
   <id>https://mrdias.com/2010/05/25/ruby-enterprise-passenger-and-encoding-hell</id>
   <content type="html">&lt;p&gt;Today I spent several hours with my friend &lt;a href=&quot;http://es.linkedin.com/in/glebm&quot;&gt;Gleb&lt;/a&gt; trying to find a weird bug we we’re having importing some rss feeds.&lt;/p&gt;

&lt;p&gt;We have a rake task that will grab an xml feed and import it to our system. When we call this rake task from the command line it would run fine, but if we run it from inside our application, we would get some wrong characters (you know, the usual ???) in the imported items.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;After trying a million ways to get this to work, we found that the problem is that Passenger doesn’t pass the environment variables to the application processes, so our import task wouldn’t know about our LANG variable. We have this set to LANG=en_us.UTF8 but our process would not see it, which would cause ruby to not use utf8 for the strings.&lt;/p&gt;

&lt;p&gt;The solution was pretty straight forward, just pass the LANG variable when calling the rake task, finding the solution not so straight forward and definitely not fun. The sad part is that this is a known issue with passenger since 2008 and this is the second time it gets me (If you’ve tried to use an oracle db you know what I’m talking about). If you need more information about this you can check it &lt;a href=&quot;http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Emacs support for Jekyll</title>
   <link href="https://mrdias.com/2010/04/11/emacs-support-for-jekyll.html"/>
   <updated>2010-04-11T00:00:00-04:00</updated>
   <id>https://mrdias.com/2010/04/11/emacs-support-for-jekyll</id>
   <content type="html">&lt;p&gt;If you’re using emacs to write your jekyll blog posts, there is a mode to help you with some common tasks. It is originally from &lt;a href=&quot;http://metajack.im/2009/01/02/manage-jekyll-from-emacs/&quot;&gt;metajack&lt;/a&gt;. Recently I thought it could be a nice addition to have syntax highlight support for jekyll posts, so I got my hands dirty and after some hours of lisp hacking (this was my first attempt at lisp programming) it was a reallity. It is based on &lt;a href=&quot;http://ourcomments.org/Emacs/nXhtml/doc/nxhtml.html&quot;&gt;nxhtml&lt;/a&gt; so you need it to work.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;Here is an screenshot of it at work:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/_uASPsTfW2ao/S8IdbhfcsiI/AAAAAAAAAD0/oyN3znNuWXg/jekyll-highlight.png&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://lh5.ggpht.com/_uASPsTfW2ao/S8IdbhfcsiI/AAAAAAAAAD0/oyN3znNuWXg/s400/jekyll-highlight.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can get it &lt;a href=&quot;http://github.com/diasjorge/jekyll.el&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Setting environment to run migrations with capistrano ext</title>
   <link href="https://mrdias.com/2010/03/09/setting-environment-to-run-migrations-with-capistrano-ext.html"/>
   <updated>2010-03-09T00:00:00-04:00</updated>
   <id>https://mrdias.com/2010/03/09/setting-environment-to-run-migrations-with-capistrano-ext</id>
   <content type="html">&lt;p&gt;If you’re using capistrano-ext to deploy to a different server, using a custom environment, you’ve probably noticed that it always tries to run the migrations for the production environment, like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;path_to_app/deploy/releases/20100309152738&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;rake&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;RAILS_ENV&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;production&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;db:migrate&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Digging through capistrano’s source I found the solution is really simple, just set the rails_env variable to the environment you want, in this example staging. So inside config/deploy/staging.rb&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:rails_env&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;staging&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Then when migrations get executed they’ll have RAILS_ENV=staging.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Monthly archives for Jekyll</title>
   <link href="https://mrdias.com/2010/03/08/monthly-archives-for-jekyll.html"/>
   <updated>2010-03-08T00:00:00-04:00</updated>
   <id>https://mrdias.com/2010/03/08/monthly-archives-for-jekyll</id>
   <content type="html">&lt;p&gt;Recently I moved my blog to &lt;a href=&quot;http://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;, while being able to write stuff directly in my favorite editor EMACS, there was some functionality that I was missing from my previous custom blog engine, such as archives. Looking at how I could achieve this, I found &lt;a href=&quot;http://rfelix.com&quot;&gt;Raoul Felix&lt;/a&gt; approach to the problem. Instead of patching jekyll, he wrote a small library that wraps around it, called &lt;a href=&quot;http://github.com/rfelix/jekyll_ext&quot;&gt;jekyll_ext&lt;/a&gt;. Using it was really easy, and based on some of the extensions he created, I was able to provide this functionality in my site.&lt;/p&gt;

&lt;p&gt;Although I had archives generated for me, I was still missing a way to display this information on my site, so I decided to create my own extension.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;I added the following code inside _extensions/archive_iterator.rb, which will provide me with an array of all the months when I’ve written posts:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Jekyll&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;AOP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;around&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:site_payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;proceed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;abort&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;monthly_archives&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[]&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collated&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;monthly_archives&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;MONTHNAMES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;posts&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;values&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;flatten&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;proceed&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;call&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;site&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;monthly_archives&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;monthly_archives&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The information for the archive was gathered from the archive_gen extension, although I had to slightly modify. Instead of processing the information after render, I had to do it before rendering, so the information would be available when the pages are created, like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;AOP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;before&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;posts&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;day&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;unless&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collated&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collated&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;unless&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collated&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collated&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;unless&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collated&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key?&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collated&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[]&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site_instance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collated&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Then inside my layout I was able to easily display this information like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;ul&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
  { % for monthly_archive in site.monthly_archives reversed % }
  &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;li&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; (0 posts)
  &lt;span class=&quot;p&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;li&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
  { % endfor % }
&lt;span class=&quot;p&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;ul&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Note the extra space between ‘{‘ and ‘%’, this is to avoid liquid interpreting the code inside the tags. You can view all the source code &lt;a href=&quot;http://gist.github.com/324737&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>View your emails with cucumber</title>
   <link href="https://mrdias.com/2010/03/02/view-your-emails-with-cucumber.html"/>
   <updated>2010-03-02T00:00:00-04:00</updated>
   <id>https://mrdias.com/2010/03/02/view-your-emails-with-cucumber</id>
   <content type="html">&lt;p&gt;I’ve been developing some new mailers at work, and I’ve found it really helpful to be able to view the emails as they are sent to the users. So I’ve implemented a cucumber step to help me achieve that, inspired on a similar webrat step for web pages.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;

&lt;p&gt;Inside a support file for cucumber, like features/support/open_email.rb, insert the following code:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;SaveAndOpenEmail&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;kp&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Webrat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;SaveAndOpenPage&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;save_and_open_email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;unless&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;exist?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;saved_page_dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;saved_page_dir&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/email-&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_i&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.html&amp;quot;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_s&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;open_in_browser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;no&quot;&gt;World&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;SaveAndOpenEmail&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Then in your step definitions, you can implement a step like this&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/^show me the emails?$/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save_and_open_email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;current_email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: As of version 0.2.2 of pickle, they already include this functionality, although it has a bug which has not been fixed. If you try to call that step, you will see:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`open_in_browser&amp;#39; for #&amp;lt;Cucumber::Rails::World:0x..fdb4951fa&amp;gt; (NoMethodError)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;To fix it, as a workaround do this in features/support/email.rb&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;pickle/email&amp;#39;&lt;/span&gt;

&lt;span class=&quot;no&quot;&gt;Pickle&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Email&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;module_eval&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;kp&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Webrat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;SaveAndOpenPage&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</content>
 </entry>
 
 <entry>
   <title>ActiveRecord migrations from the console</title>
   <link href="https://mrdias.com/2010/02/23/activerecord-migrations-from-the-console.html"/>
   <updated>2010-02-23T00:00:00-04:00</updated>
   <id>https://mrdias.com/2010/02/23/activerecord-migrations-from-the-console</id>
   <content type="html">&lt;p&gt;If you ever run into the situation where one migration doesn&amp;#8217;t complete sucessfully, and you&amp;#8217;re stuck with a column in a table or a new table, so you can&amp;#8217;t drop the migration or execute the migration again, you can always call the migration methods from the console like this:&lt;!-- -**-END-**- --&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;ActiveRecord&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Migration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;drop_table&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:table_name&lt;/span&gt;
&lt;span class=&quot;no&quot;&gt;ActiveRecord&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Migration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;remove_column&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:table_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:column_name&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;Hopefully this will help you when you&amp;#8217;re developing your migrations.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>IE issues with new Element and class with Prototype</title>
   <link href="https://mrdias.com/2009/08/12/ie-issues-with-new-element-and-class-with-prototype.html"/>
   <updated>2009-08-12T00:00:00-04:00</updated>
   <id>https://mrdias.com/2009/08/12/ie-issues-with-new-element-and-class-with-prototype</id>
   <content type="html">&lt;p&gt;The problem we have is that this code&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;ow&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;klassName&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;will work in firefox but in IE (tested on version 8) the className is never set, which was causing some problems with the elements styles. &lt;!-- -**-END-**- --&gt;&lt;/p&gt;
&lt;p&gt;One of the workarounds would be to explicitly add the class name, like this:&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ow&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addClassName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;klassName&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;The problem with this approach is that at work, we have a huge javascript codebase, so instead, we are going to monkey patch Prototype. We&amp;#8217;re working against version 1.6.0.3 of prototype, that&amp;#8217;s why we add the alert, so when we update, we&amp;#8217;ll catch this and check if it was fixed on core.&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// This is a dirty hack to protoype, so IE, will take class names on new Element&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// new Element(&amp;#39;div&amp;#39;, {&amp;#39;class&amp;#39;:&amp;#39;klassName&amp;#39;}) doesn&amp;#39;t work on IE but does on firefox&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// in IE, we wouldn&amp;#39;t get the className set.&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Version&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;1.6.0.3&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;alert&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;BEWARE OF THE PROTOTYPE VERSION&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;toLowerCase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;cache&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;cache&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Browser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;IE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]))&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;&amp;lt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39; name=&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;class=&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;ow&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;       &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;writeAttribute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;cache&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;cache&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;extend&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;     &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;writeAttribute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;cache&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;cloneNode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;extend&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;prototype&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;</content>
 </entry>
 
 <entry>
   <title>Git Goodies</title>
   <link href="https://mrdias.com/2009/02/12/git-goodies.html"/>
   <updated>2009-02-12T00:00:00-04:00</updated>
   <id>https://mrdias.com/2009/02/12/git-goodies</id>
   <content type="html">&lt;p&gt;A couple days ago I had to gather some information from a git repository, so I&amp;#8217;m sharing this small scripts with you. &lt;!-- -**-END-**- --&gt;&lt;/p&gt;
&lt;p&gt;List of all authors on a git repo:&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;git&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;log&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--pretty&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;short&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;grep&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;Author:&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;awk&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;sort&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;uniq&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;List all modified files since a revision:&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;git-whatchanged&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;revision..&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;--pretty&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;oneline&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;grep&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;^:&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;awk&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;{print $6}&amp;#39;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;sort&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;uniq&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;</content>
 </entry>
 
 <entry>
   <title>Will Paginate And Ajax</title>
   <link href="https://mrdias.com/2008/12/16/will-paginate-and-ajax.html"/>
   <updated>2008-12-16T00:00:00-04:00</updated>
   <id>https://mrdias.com/2008/12/16/will-paginate-and-ajax</id>
   <content type="html">&lt;p&gt;I recently had to implement some ajax pagination for a site. After googling for a while I found a solution, but I couldn&amp;#8217;t customize the pagination url&amp;#8217;s or I had to specify the paginator to use (will paginate&amp;#8217;s default or mine for ajax), so I came up with this solution which fulfils all my needs.&lt;!-- -**-END-**- --&gt;&lt;/p&gt;
&lt;p&gt;First create the following class in your app/helpers.&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;RemoteLinkRenderer&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;WillPaginate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;LinkRenderer&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;prepare&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;vi&quot;&gt;@remote&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:remote&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;kp&quot;&gt;protected&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;page_link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;page&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{})&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;vi&quot;&gt;@remote&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;vi&quot;&gt;@template&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;link_to_remote&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;url_for&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;page&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:method&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;                               &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;merge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;vi&quot;&gt;@remote&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;vi&quot;&gt;@template&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;link_to&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;url_for&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;page&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;Then you have to tell will_paginate which link_renderer to use, I do this in a rails initializer.&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;WillPaginate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;ViewHelpers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pagination_options&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:renderer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;RemoteLinkRenderer&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;So with this solution, you can work like you would normally with will_paginate, but if you need to do an ajax link, then you&amp;#8217;ll have to pass the options in the remote hash, something like this:&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;will_paginate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;vi&quot;&gt;@comments&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:remote&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:update&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;comments&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;That&amp;#8217;s it enjoy. You can keep passing the same options you would normally do to will_paginate to customize the behaviour.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Will Paginate And Merb</title>
   <link href="https://mrdias.com/2008/12/09/will-paginate-and-merb.html"/>
   <updated>2008-12-09T00:00:00-04:00</updated>
   <id>https://mrdias.com/2008/12/09/will-paginate-and-merb</id>
   <content type="html">&lt;p&gt;I read something about how to do it in this &lt;a href=&quot;http://merbist.com/2008/10/27/will_paginate-and-merb/&quot;&gt;post&lt;/a&gt; by The merbist, albeit the information was not complete.&lt;br /&gt;
So here are my instructions:&lt;!-- -**-END-**- --&gt;&lt;/p&gt;
&lt;p&gt;Clone mislav&amp;#8217;s will_paginate repo and build the gem from the agnostic branch.&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;git&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;clone&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;git://github.com/mislav/will_paginate.git
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;will_paginate/
git&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;checkout&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;origin/agnostic&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;
gem&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;build&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;With this commands you&amp;#8217;ve generated the will_paginate-3.0.0.gem.&lt;/p&gt;
&lt;p&gt;If you want to install it system-wide use your usual gem install.&lt;br /&gt;
If you want to bundle it in your project, as I did, then you&amp;#8217;ll have to do:&lt;/p&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span&gt;&lt;/span&gt;thor&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;merb:gem:install&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;path/to/gem&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;That&amp;#8217;s it.&lt;/p&gt;</content>
 </entry>
 

</feed>
