<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://ingenieroynopuedo.es/feed.xml" rel="self" type="application/atom+xml" /><link href="https://ingenieroynopuedo.es/" rel="alternate" type="text/html" /><updated>2026-04-17T19:27:05+00:00</updated><id>https://ingenieroynopuedo.es/feed.xml</id><title type="html">Ingeniero y no puedo</title><subtitle>El blog personal de Juanjo Salvador</subtitle><author><name>Juanjo Salvador</name></author><entry><title type="html">Sunset es un cliente de Bluesky, impulsado por Vue y Nuxt</title><link href="https://ingenieroynopuedo.es/2026/01/16/Sunset-es-un-cliente-de-Bluesky/" rel="alternate" type="text/html" title="Sunset es un cliente de Bluesky, impulsado por Vue y Nuxt" /><published>2026-01-16T00:00:00+00:00</published><updated>2026-01-16T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2026/01/16/Sunset-es-un-cliente-de-Bluesky</id><content type="html" xml:base="https://ingenieroynopuedo.es/2026/01/16/Sunset-es-un-cliente-de-Bluesky/"><![CDATA[Como reza el título, Sunset, es mi nuevo proyecto estrella. Un cliente de Bluesky, experimental, que empezó siendo un _¿y si...?_, y que ha cogido carrerilla.

### El pasado de Sunset

Allá por octubre de 2024, recién despedido de la empresa donde trabajaba (y casi que doy las gracias, pero ese es otro tema) y en búsqueda de empleo activa, emprendí un nuevo proyecto con objeto de reforzar mis conocimientos de frontend, cacharrear con Vue y experimentar con Nuxt. Este proyecto, originalmente, iba a ser un cliente minimalista y simple de Bluesky, que me permitiese ver la cronología de mi usuario, enviar posts, dar me gusta y repostear cosas. Pero nada más.

El problema es que conforme iba haciendo y deshaciendo, refactorizando, leyendo y en general, aprendiendo, añadí alguna que otra característica más. Por ejemplo, añadí una línea de tiempo para recibir notificaciones y perfiles de usuario. Llegados a ese punto, tenía un cliente que excedía de mi idea básica, y ya estaba camino de un cliente más completo. Sin embargo, el fuelle se terminó pronto, entre otros, porque me liaron para meterme a otro curso de especialización, en este caso de videojuegos, en el mismo mes, así que mi tiempo disponible empezó a tender a cero, lo que supuso un parón indefinido, a lo que sumamos mi reincorporación al mercado laboral en marzo de 2025 (¡yuju!). Todo esto ha resultado que, hasta hace bien poco, no había podido retomar el proyecto. Un parón de ¡casi año y medio!

### El presente de Sunset

Recientemente he actualizado algunas cosas con respecto a la versión que liberé originalmente en octubre. He añadido soporte para muchas cosas que no tenía, mejorado la interfaz en términos visuales, y he corregido algunos bugs imperdonables. 

<center>
    <figure>
        <img src="{{ site.url }}/assets/20260116/image.png" />
    </figure>
</center>

También he mejorado su presencia en redes sociales, por fin he empezado a subir actualizaciones en la [cuenta oficial](https://bsky.app/profile/sunset-bsky.bsky.social/) que le creé cuando empecé el proyecto. 

Y lo más importante: ¡está disponible para pruebas públicas! Puedes verlo en funcionamiento en [sunset.jsalvador.me](https://sunset.jsalvador.me). El dominio es temporal, mientras pienso a donde va este proyecto.

### El futuro... de Sunset

Bueno, ahora mismo hay algunas características básicas que no funcionan. Siguiendo la filosofía de _primero haz que exista, luego hazlo perfecto_, voy a continuar añadiendo estas funciones antes de refactorizar y optimizar, que aunque es algo que tendré que hacer en algún momento, tengo tiempo para ello.

Por ahora, el mapa de carreteras está así:

* [x] Iniciar sesión
* [x] Cerrar sesión
* [x] Recibir notificaciones (_parcialmente implementado_)
* [x] Publicar posts
* [x] Indicar que te gusta un post
* [x] Republicar un post
* [ ] Responder a un post
* [ ] Citar un post
* [ ] Seguir usuarios
* [ ] Dejar de seguir usuarios
* [ ] Modificar tu perfil
* [ ] Recibir notificaciones en segundo plano
* [ ] Subir imágenes o vídeos

Paralelamente, me gustaría añadir también:

* [ ] Soporte para OAuth
* [ ] Mejoras en la estructura
* [ ] Optimización y reutilización de componentes

Y en general, mucho trabajo pendiente para tener un cliente completito. Pero partiendo de la base de que, hice todo lo básico en dos o tres días, sin tener muchos conocimientos de Nuxt, creo que puedo estar orgulloso del comienzo. Quiero ver hasta donde llega esto, y por supuesto, ¡es software libre! Así que, si te gusta el proyecto y quieres colaborar, estaré encantado de recibir PRs.

Durante los próximos días probablemente dedicaré un tiempo a la planificación más exhaustiva, a sacar tareas pendientes en GitHub e intentar avanzar con todo esto.]]></content><author><name>Juanjo Salvador</name></author><category term="proyectos," /><category term="vue," /><category term="nuxt" /><summary type="html"><![CDATA[Como reza el título, Sunset, es mi nuevo proyecto estrella. Un cliente de Bluesky, experimental, que empezó siendo un ¿y si…?, y que ha cogido carrerilla.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/Sunset-es-un-cliente-de-Bluesky.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/Sunset-es-un-cliente-de-Bluesky.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Jekyll builds: de GitHub Pages a GitHub Actions</title><link href="https://ingenieroynopuedo.es/2025/10/21/Jekyll-builds-de-GitHub-Pages-a-GitHub-Actions/" rel="alternate" type="text/html" title="Jekyll builds: de GitHub Pages a GitHub Actions" /><published>2025-10-21T00:00:00+00:00</published><updated>2025-10-21T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2025/10/21/Jekyll-builds-de-GitHub-Pages-a-GitHub-Actions</id><content type="html" xml:base="https://ingenieroynopuedo.es/2025/10/21/Jekyll-builds-de-GitHub-Pages-a-GitHub-Actions/"><![CDATA[Últimamente he estado trabajando en algunas actualizaciones y correcciones para mi sitio web personal, que funciona gracias a GitHub Pages y Jekyll 3, desde 2015. Una de estas correcciones y mejoras fue implementar la posibilidad de tener imágenes de OpenGraph para que fuera más llamativo al publicar en redes sociales, usando el plugin [`igor-alexandrov/jekyll-og-image`](https://github.com/igor-alexandrov/jekyll-og-image).

Este plugin requiere un flujo diferente al que ofrece GitHub Pages, debido a las dependencias que utiliza, por lo que es necesario cambiar el sistema de builds a GH Actions y un workflow personalizado en su lugar. Esto me hizo pensar en qué nos estamos perdiendo al seguir usando `gh-pages`, como por ejemplo, seguir atados a los plugins oficiales y validados por GitHub, que aunque ofrece una buena selección, sigue siendo algo limitado. Por ejemplo, no soporta versiones superiores a la 3.10 de Jekyll, algo que me mosquea porque existe [un bug conocido y resuelto en la versión 4.4.0](https://github.com/jekyll/jekyll/issues/9741) que obliga a añadir módulos adicionales... solo para poder construir el sitio.

Para dejar de utilizar GH Pages, lo primero que tuve que hacer es eliminar las referencias de mi `Gemfile`. Quedando algo así.

```ruby
source "https://rubygems.org/"

gem "jekyll", "~> 4.4.1"
gem "jekyll-feed", "~> 0.12"
gem "jekyll-paginate"
gem "jekyll-seo-tag"
gem 'jekyll-og-image'

platforms :mingw, :x64_mingw, :mswin, :jruby do
  gem "tzinfo", "~> 1.2"
  gem "tzinfo-data"
end

gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]
gem "webrick", "~> 1.8"
```

A continuación, regeneramos el `Gemfile.lock` y de paso, actualizamos las dependencias, utilizando `bundle`.

```shell
bundle update
bundle install
```

Y por último, creamos una Action nueva, que haga la magia. El contenido de este workflow es puramente orientativo. Sientete libre de modificarlo para que se adapte a tus necesidades.

```yaml
name: Deploy Jekyll site to Pages

on:
  push:
    branches: ["gh-pages"]

  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        
      - name: Setup Ruby
        uses: ruby/setup-ruby@4a9ddd6f338a97768b8006bf671dfbad383215f4
        with:
          ruby-version: '3.4'
          bundler-cache: true
          cache-version: 0
          
      - name: Set Node.js 20.x
        uses: actions/setup-node@v3
        with:
          node-version: 20.x

      - name: Run install
        uses: borales/actions-yarn@v4
        with:
          cmd: install
        
      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v5

      - name: Build with Jekyll
        run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"

        env:
          JEKYLL_ENV: production
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
```

Una vez publicado, cada vez que hagamos un commit sobre la rama `gh-pages`, regenerará nuestro proyecto y reconstruirá el sitio web. Permitiéndonos extenderlo como queramos.]]></content><author><name>Juanjo Salvador</name></author><category term="jekyll," /><category term="github" /><summary type="html"><![CDATA[Últimamente he estado trabajando en algunas actualizaciones y correcciones para mi sitio web personal, que funciona gracias a GitHub Pages y Jekyll 3, desde 2015. Una de estas correcciones y mejoras fue implementar la posibilidad de tener imágenes de OpenGraph para que fuera más llamativo al publicar en redes sociales, usando el plugin igor-alexandrov/jekyll-og-image. Este plugin requiere un flujo diferente al que ofrece GitHub Pages, debido a las dependencias que utiliza, por lo que es necesario cambiar el sistema de builds a GH Actions y un workflow personalizado en su lugar. Esto me hizo pensar en qué nos estamos perdiendo al seguir usando gh-pages, como por ejemplo, seguir atados a los plugins oficiales y validados por GitHub, que aunque ofrece una buena selección, sigue siendo algo limitado. Por ejemplo, no soporta versiones superiores a la 3.10 de Jekyll, algo que me mosquea porque existe un bug conocido y resuelto en la versión 4.4.0 que obliga a añadir módulos adicionales… solo para poder construir el sitio. Para dejar de utilizar GH Pages, lo primero que tuve que hacer es eliminar las referencias de mi Gemfile. Quedando algo así. source "https://rubygems.org/" gem "jekyll", "~&gt; 4.4.1" gem "jekyll-feed", "~&gt; 0.12" gem "jekyll-paginate" gem "jekyll-seo-tag" gem 'jekyll-og-image' platforms :mingw, :x64_mingw, :mswin, :jruby do gem "tzinfo", "~&gt; 1.2" gem "tzinfo-data" end gem "wdm", "~&gt; 0.1.1", :platforms =&gt; [:mingw, :x64_mingw, :mswin] gem "webrick", "~&gt; 1.8" A continuación, regeneramos el Gemfile.lock y de paso, actualizamos las dependencias, utilizando bundle. bundle update bundle install Y por último, creamos una Action nueva, que haga la magia. El contenido de este workflow es puramente orientativo. Sientete libre de modificarlo para que se adapte a tus necesidades. name: Deploy Jekyll site to Pages on: push: branches: ["gh-pages"] workflow_dispatch: permissions: contents: read pages: write id-token: write concurrency: group: "pages" cancel-in-progress: false jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Ruby uses: ruby/setup-ruby@4a9ddd6f338a97768b8006bf671dfbad383215f4 with: ruby-version: '3.4' bundler-cache: true cache-version: 0 - name: Set Node.js 20.x uses: actions/setup-node@v3 with: node-version: 20.x - name: Run install uses: borales/actions-yarn@v4 with: cmd: install - name: Setup Pages id: pages uses: actions/configure-pages@v5 - name: Build with Jekyll run: bundle exec jekyll build --baseurl "$" env: JEKYLL_ENV: production - name: Upload artifact uses: actions/upload-pages-artifact@v3 deploy: environment: name: github-pages url: $ runs-on: ubuntu-latest needs: build steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 Una vez publicado, cada vez que hagamos un commit sobre la rama gh-pages, regenerará nuestro proyecto y reconstruirá el sitio web. Permitiéndonos extenderlo como queramos.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/Jekyll-builds-de-GitHub-Pages-a-GitHub-Actions.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/Jekyll-builds-de-GitHub-Pages-a-GitHub-Actions.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Windows 10 se queda sin soporte, ¡pasate a Linux!</title><link href="https://ingenieroynopuedo.es/2025/10/18/Windows-10-se-queda-sin-soporte-pasate-a-Linux/" rel="alternate" type="text/html" title="Windows 10 se queda sin soporte, ¡pasate a Linux!" /><published>2025-10-18T00:00:00+00:00</published><updated>2025-10-18T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2025/10/18/Windows-10-se-queda-sin-soporte-pasate-a-Linux</id><content type="html" xml:base="https://ingenieroynopuedo.es/2025/10/18/Windows-10-se-queda-sin-soporte-pasate-a-Linux/"><![CDATA[El pasado día 14 de Octubre de 2025, Microsoft anunció oficialmente el fin del soporte para Windows 10, salvo para Europa, donde puedes ampliarlo durante un año gracias a la Unión Europea.

<center>
    <figure>
        <img src="{{ site.url }}/assets/20251018/eu-chad.jpg" width="50%" alt="Meme de Chad con una taza azul con la bandera de la UE" />
    </figure>
</center>

Y esto ha sido una buenísima noticia para Linux. Ya que, gracias al rechazo general de la comunidad hacia Windows 11, donde Microsoft quiere forzarnos a ir, está provocando un interesante aumento de usuarios de Linux en escritorio. Aunque ya tuvimos un repunte gracias a Steam Deck y Valve, este incremento puede ser mucho más significativo (*toco madera*).

Sin embargo, la comunidad del pingüino es enorme, hay literalmente [miles de opciones](https://distrowatch.com/dwres.php?resource=family-tree), y esto obviamente, abruma muchísimo a los recién llegados. ¿Cuál me instalo? ¿Funcionará bien este software aquí? ¿Podré usarlo para jugar o tendré que forzarme a seguir en Windows? Muchas incógnitas. Muchos problemas. Así que, para ayudar a los nuevos usuarios a elegir, reduje la lista a un puñado de distribuciones bien mantenidas, amigables para recién llegados y con una comunidad activa (verificado por mi).

<center>
    <figure>
        <img src="{{ site.url }}/assets/20251018/mermaid-linux-graph.png" width="100%" alt="Gráfico de flujo mostrando qué distribución Linux elegir basándote en tus preferencias" />
    </figure>
</center>

También menciono a aquellos que se han empapado tanto en contenido como el de [r/unixporn](https://www.reddit.com/r/unixporn) que ahora sueñan con instalar Arch con Hyprland solo para poder tener su primer rice. Quería añadir otras cosas como Funtoo, cualquier distribución basada en Arch pero en modo fácil, y demás, pero creo que quedaría un gráfico excesivamente complejo.


Lo generé usando [Mermaid](https://www.mermaidchart.com/d/f57518fd-3e90-4855-8e95-c1921edf4943), que lo he descubierto hace poco y es muy resultón, además de que se puede integrar con GitHub y Jekyll.]]></content><author><name>Juanjo Salvador</name></author><category term="linux" /><summary type="html"><![CDATA[El pasado día 14 de Octubre de 2025, Microsoft anunció oficialmente el fin del soporte para Windows 10, salvo para Europa, donde puedes ampliarlo durante un año gracias a la Unión Europea. Y esto ha sido una buenísima noticia para Linux. Ya que, gracias al rechazo general de la comunidad hacia Windows 11, donde Microsoft quiere forzarnos a ir, está provocando un interesante aumento de usuarios de Linux en escritorio. Aunque ya tuvimos un repunte gracias a Steam Deck y Valve, este incremento puede ser mucho más significativo (toco madera). Sin embargo, la comunidad del pingüino es enorme, hay literalmente miles de opciones, y esto obviamente, abruma muchísimo a los recién llegados. ¿Cuál me instalo? ¿Funcionará bien este software aquí? ¿Podré usarlo para jugar o tendré que forzarme a seguir en Windows? Muchas incógnitas. Muchos problemas. Así que, para ayudar a los nuevos usuarios a elegir, reduje la lista a un puñado de distribuciones bien mantenidas, amigables para recién llegados y con una comunidad activa (verificado por mi). También menciono a aquellos que se han empapado tanto en contenido como el de r/unixporn que ahora sueñan con instalar Arch con Hyprland solo para poder tener su primer rice. Quería añadir otras cosas como Funtoo, cualquier distribución basada en Arch pero en modo fácil, y demás, pero creo que quedaría un gráfico excesivamente complejo. Lo generé usando Mermaid, que lo he descubierto hace poco y es muy resultón, además de que se puede integrar con GitHub y Jekyll.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/Windows-10-se-queda-sin-soporte-pasate-a-Linux.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/Windows-10-se-queda-sin-soporte-pasate-a-Linux.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Cosas que valoro en una empresa</title><link href="https://ingenieroynopuedo.es/2025/01/07/Cosas-que-valoro-en-una-empresa/" rel="alternate" type="text/html" title="Cosas que valoro en una empresa" /><published>2025-01-07T00:00:00+00:00</published><updated>2025-01-07T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2025/01/07/Cosas-que-valoro-en-una-empresa</id><content type="html" xml:base="https://ingenieroynopuedo.es/2025/01/07/Cosas-que-valoro-en-una-empresa/"><![CDATA[Últimamente he estado dándole vueltas a una pregunta, ¿qué hace que me sienta realmente cómodo en una empresa? Obviando que las condiciones laborales estén dentro de unos márgenes legales y humanamente normales, como un salario acorde a la posición y responsabilidad. Algunas cosas atienden a un perfil tecnológico, hablando de las herramientas que usar y demás, otras son de carácter social, como el no tener que ir todos los días a la oficina.

### ¿Qué hace que me sienta cómodo?

#### Herramientas de gestión del siglo XXI.
O al menos que no requieran un tutorial de una hora para entender cómo usarlas. Algo que me permita aprender rápidamente en qué botón tengo que pulsar para fichar la entrada, y en qué botón para fichar la salida.

#### Plataformas de comunicación sencillas.
Slack preferiblemente. O Mattermost. Microsoft Teams está bien, ya sufrí Communicator y creo que puedo sobrevivir a sus sucesores. Evitar la suite de Google si es posible, ya que es de todo, menos intuitiva, y menos para un entorno profesional.

#### GitHub, Gitlab, Gitea... pero git, por favor.
En mi experiencia, la plataforma más sobrevenida y sencilla de aprender, siempre será GitHub, así que si una empresa dice usarlo, ya tiene mi interés. En cualquier caso, me vale cualquiera de estas, siempre que no tenga que pasar por SVN. Ya tuve que lidiar con ello, con nefasto resultado, y prefiero no hacerlo de nuevo.

#### Linux o Mac, preferible antes que Windows.
Una preferencia personal basada en la necesidad de una terminal en condiciones. Como usuario largo y tendido de Linux, mi flujo de trabajo pasa a menudo por la terminal, lo que me dificulta algunas tareas si no dispongo de ella. No es algo obligatorio, pero disponer de ello siempre me hace la oferta más atractiva.

#### Horario flexible, aunque sea para entrar.
Entiendo que siempre se va a requerir un mínimo de interacción entre compañeros, y no puedo estar ausente cuando el resto están trabajando, pero si que valoro mucho poder entrar antes (¿una hora antes?) con el fin de poder salir antes y disponer de más tiempo libre al final del día.

#### Remoto, la oficina es cosa del pasado.
Gran parte de mi vida laboral ha transcurrido en remoto, y he comprobado que es un estilo de trabajo que me beneficia en muchos sentidos. Igual un 100% puede ser difícil, pero si tengo que ir a la oficina, prefiero que sea menos de la mitad de la semana. Considero que no se gana nada obligando a los trabajadores a asistir presencialmente, más bien lo contrario: perdemos tiempo y ganamos estrés.

#### Team building, necesario, aunque no me guste.
Lo siento, no soy nada fan de los eventos de *team building* en las empresas. Yo vengo a trabajar, no a hacer amigos. Sin embargo, son un tema que valoro bastante, ya que aunque no vaya a quedar con mis compañeros a tomar una cerveza el viernes por la tarde, si que creo que ayuda a limar asperezas y a hacer un trabajo más fluido.

### Conclusión
Realmente me adapto bien a cualquier entorno que se presente, pero siempre hay cosas que me hacen sentir mejor, o incluso uno más del equipo, al ser cosas que me son familiares y cómodas, de forma que puedo trabajar más rápido desde mi llegada y no necesito destinar más tiempo del necesario en una introducción.

No quiero entrar en detalles, pero he llegado a enfrentarme a situaciones en las que, tras un mes en la empresa, me notifican que no tienen fichajes horarios míos y puede incurrir en una falta grave, pero en mi entrada en la empresa, nadie me facilitó credenciales ni dónde tengo que fichar, siendo este un proceso complejo y nada intuitivo, que requería el uso de una aplicación de terceros, completamente ajena a la Intranet, y prácticamente sin documentar.]]></content><author><name>Juanjo Salvador</name></author><category term="empleo" /><summary type="html"><![CDATA[Últimamente he estado dándole vueltas a una pregunta, ¿qué hace que me sienta realmente cómodo en una empresa? Obviando que las condiciones laborales estén dentro de unos márgenes legales y humanamente normales, como un salario acorde a la posición y responsabilidad. Algunas cosas atienden a un perfil tecnológico, hablando de las herramientas que usar y demás, otras son de carácter social, como el no tener que ir todos los días a la oficina.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/Cosas-que-valoro-en-una-empresa.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/Cosas-que-valoro-en-una-empresa.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Buscar trabajo en IT es una cosa…</title><link href="https://ingenieroynopuedo.es/2024/01/25/Buscar-trabajo-es-una-cosa/" rel="alternate" type="text/html" title="Buscar trabajo en IT es una cosa…" /><published>2024-01-25T00:00:00+00:00</published><updated>2024-01-25T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2024/01/25/Buscar-trabajo-es-una-cosa</id><content type="html" xml:base="https://ingenieroynopuedo.es/2024/01/25/Buscar-trabajo-es-una-cosa/"><![CDATA[Hace tiempo escribí otro artículo donde hablaba de [cómo encontrar tu primer trabajo en IT](/2022/01/13/Consejos-para-encontrar-tu-primer-trabajo-en-IT/), y si bien suele decirse que, _en casa del herrero, cuchara de palo_, yo me apliqué estos mismos consejos cuando me vi forzado a volver a buscar trabajo tras finalizar mi anterior relación laboral. En principio, la situación no parecía tan difícil, y estaba seguro de que en un mes, dos como máximo, estaría trabajando de nuevo... o no.

Inspirado por un [artículo del blog de Pinchito](https://pinchito.es/2023/job-search), empecé a tomar nota de todas las ofertas donde me apuntaba, para tener así además un control de cara a las entrevistas, llamadas, etc. Todo esto, lo fui apuntando en una hoja de cálculo. El resultado fue peculiar.

<center>
    <figure>
        <img src="{{ site.url }}/assets/20240125/so-you-use-5addcf.jpg" width="50%" alt="Meme de Willy Wonka en la película clásica, preguntando por tus habilidades con bases de datos al ver que usas Excel como tal" />
    </figure>
</center>

### Lecciones que he aprendido en estos meses

Cosas buenas, cosas malas, y cosas neutrales. Ha sido una experiencia con sus pros y sus contras, y hay que tratar de llevarlo con optimismo.

1. Tener un CV atractivo es importante.
2. Llevar un registro te ayuda a no meter la pata.
6. El café después de levantarte a las 10 de la mañana, sienta mucho mejor.
7. Pensar en positivo ayuda a evitar caer en la idea de que no estás a la altura.
8. Tienes que ser optimista en todo momento y cada vez que mandes tu CV, pensar que esa empresa es la que te va a contratar.
9. Estar en situación de desempleo es la oportunidad perfecta para terminar aquello que empezaste y nunca terminaste.

### Hay que hacerse notar

Una de las cosas que comentaba Pinchito en su blog, es que hay que publicar abiertamente que estás en búsqueda de empleo. Esto es algo que me funcionó para conseguir un par de entrevistas en verano, cuando la situación empezó a tambalearse y tenía miedo. En mi caso, fue un post viral en Mastodon (mi mayor éxito en el fediverso).

<center>
    <iframe src="https://mastodon.social/@jsalvador/110582497469096543/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://mastodon.social/embed.js" async="async"></script>
</center>

Lamentablemente, ninguna de esas entrevistas llegó a buen puerto. ¡Pero no pasa nada, la vida sigue! Sin embargo, fue algo que puede demostrarse que funciona, y que superó los tests. Por lo tanto, no hay que dejar de moverse. Esto implica también publicar tus pequeños logros y avances. ¿Has terminado un curso de Vue.js? Ponlo en LinkedIn. Y en tus redes sociales. Que se note, siente el orgullo.

### Análisis de la situación

Analiza periódicamente tus resultados, y trata de encontrar donde flojeas. Quizás estás apuntando muy alto con las ofertas, o quizás tu curriculum es un completo desastre (el mío lo era hasta que me echaron un cable para solucionarlo). Algo está fallando, vamos a encontrar qué es, y a arreglarlo.

No obstante, no siempre el fallo viene de tu parte. En mi análisis posterior de la búsqueda de empleo, con los resultados en conjunto de mi hoja de cálculo, pueden apreciarse muchos datos desastrosos.

<center>
    <figure>
        <img src="{{ site.url }}/assets/20240125/job-graph.png" alt="Gráfico con los resultados de mi búsqueda" />
        <small>Diagrama de Sankey con los resultados de mi búsqueda <br/>
        (6 de Octubre de 2023 - 25 de Enero de 2024)</small>
    </figure>
</center>

El alto número de ofertas de las que nunca recibí una respuesta (un 80% de ellas), quiero creer que se debe a que estaban siendo gestionadas por subcontratas que, debido al volumen o al cierre del año fiscal, llevaron a cabo una criba más intensa. Aunque esto es solo una suposición, hubiese agradecido enormemente un correo electrónico, o cualquier notificación por simple que sea, de que no continúo en el proceso por cualquier motivo, en lugar de esperar semana tras semana sin tener noticias. Aunque esta situación se acrecenta cuando ocurre tras pasar la primera entrevista.

### Conclusiones finales

Además de las lecciones aprendidas, hay algunos apuntes extras.

#### Filtrar bien los puestos a los que te apuntas, ayuda a evitar que te rechacen de más.
Aquí quizás mi problema fue apuntar muy alto con algunas ofertas. Aunque cumplía los requisitos más de sobra, el carecer de experiencia en el sector concreto de la empresa, es determinante para que te dejen fuera.

#### La subcontratación de Recursos Humanos tiene poco respeto por tu tiempo y tu situación.
Si durante la toma de contacto, sea por correo, redes sociales, teléfono, etc, les explicas tu situación y por qué necesitas encontrar trabajo, y aún así deciden que darte feedback posterior es perder el tiempo, adivina lo mucho que le importa que te contraten.

#### Recursos Humanos también son personas y a veces te ofrecen ayuda más allá de tratar de venderte algo.
Sin embargo, también son seres humanos, y errar está en nuestra naturaleza. Si bien podrían, como empresa, tratar de hacer las cosas mejor, con una ética más presente, muchos de ellos de verdad se interesan y tienen en cuenta tu candidatura para esta u otras ofertas. Algunos de los responsables con los que he tratado eran personas frías y que se limitaban a leer un guión y hacerte preguntas sin mucho interés, pero otros te hacían sentir como si estuvieses hablando con tu amigo de toda la vida, sin darte pie a creer que te quieren vender un aspirador o una estafa piramidal.]]></content><author><name>Juanjo Salvador</name></author><category term="empleo" /><summary type="html"><![CDATA[Hace tiempo escribí otro artículo donde hablaba de cómo encontrar tu primer trabajo en IT, y si bien suele decirse que, en casa del herrero, cuchara de palo, yo me apliqué estos mismos consejos cuando me vi forzado a volver a buscar trabajo tras finalizar mi anterior relación laboral. En principio, la situación no parecía tan difícil, y estaba seguro de que en un mes, dos como máximo, estaría trabajando de nuevo… o no.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/Buscar-trabajo-es-una-cosa.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/Buscar-trabajo-es-una-cosa.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">El reto de calcular el ganador en “3 en raya”</title><link href="https://ingenieroynopuedo.es/2024/01/09/TicTacToe/" rel="alternate" type="text/html" title="El reto de calcular el ganador en “3 en raya”" /><published>2024-01-09T00:00:00+00:00</published><updated>2024-01-09T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2024/01/09/TicTacToe</id><content type="html" xml:base="https://ingenieroynopuedo.es/2024/01/09/TicTacToe/"><![CDATA[Últimamente me ha dado de nuevo por hacer katas en CodeWars. En mis años mozos, me encantaba dedicar mis ratos libres a este tipo de ejercicios, porque son entretenidos y me mantienen al día con esto de escribir código, así que ahora, dado que estoy parado (*¡aprovecha! ¡puedes contratarme!*) he vuelto a dedicarme a ello.

Hoy, he empezado y he resuelto un ejercicio donde se pide escribir una función que, dado un tablero de 3 en raya (Tic-Tac-Toe), devuelva el ganador, si existiese, o si el juego está incompleto. Pero vayamos por partes.

### Consideraciones previas

1. Los tableros vienen forma de matriz, es decir, una lista compuesta de listas, bidimensional.
2. Los valores asignados son `X == 1`, `O == 2` y `0` para celdas vacías.
3. Hay que comprobar tanto vertical, como diagonal y horizontal.
4. Los valores resultantes deben ser: `1` si gana `X`, `2` si gana `O`, `0` si no hay ganador, `-1` si no ha terminado.

### ¿Buscar un patrón o calcular el resultado?

La forma ¿fácil? de hacerlo, es buscar unos patrones concretos, hacer una matriz con los posibles patrones, y comprobar cada línea posible (horizontal, vertical, diagonal) ese patrón. Factible si tenemos un tablero de 3x3, porque las combinaciones posibles son limitadas, pero si el tablero crece, el patrón también. Así que es más interesante calcularlo.

<script type="text/javascript" async
  src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML">
</script>

$$
\begin{align*}
    & \sqrt[n]{(Celda1 \times Celda2 \times Celda3 ... \times n}
\end{align*}
$$

Donde $$ n $$ es el número de celdas en horizontal. Ya que, el valor de todas las celdas tiene que ser el mismo, la raíz cúbica (para el caso de TicTacToe) del producto de todos los valores de la fila, debe ser igual al valor de la fila.

Es decir, para una fila donde encontramos tres $$ 1 $$ (el valor asignado a `X`), el resultado de la formula debe ser $$ 1 $$.

$$
\begin{align*}
    & \sqrt[3]{(1 \times 1 \times 1)} = 1
\end{align*}
$$

Esta formula solo podemos aplicarla en casos donde **no existe ningún valor vacío** en la fila. Es decir, no hay ningún $$ 0 $$. Por lo que lo primero que comprobaremos será, que no haya ningún cero en la fila. En cuyo caso, se invalida.

```python
    if 0 not in line:
        # Aplicamos la fórmula calculando el producto de los valores de la fila, y calculamos su raíz cúbica.
        value = reduce(lambda x, y: x * y, line) ** (1/3)

        # Dado que el valor debe ser exacto, diferenciamos entre el valor resultante y los decimales del producto.
        dec, val = math.modf(value)
        if dec == 0.0:
            return int(val)
```

Con esto, ya tendríamos la mitad del trabajo hecho, siendo capaces de calcular si hay un ganador, en cada una de las líneas posibles. No obstante, esto solo nos sirve para calcular con las filas, en horizontal. ¿Pero qué pasa con las columnas?

### Añadimos las columnas y las diagonales

Al tratarse de una matriz, podemos rotarla 90º, extraer las filas, y añadirlas debajo. De esta forma, pasamos de tener una matriz de 3x3 a tener una de 3x6, pero que incluye todas las combinaciones horizontales y verticales de la original. El mismo proceso para las diagonales, pero en este caso, recorriendo la matriz y extrayendo los valores concretos. En este caso es asumible, dado que es pequeña, pero no sería lo más óptimo si esto creciese.

```python
# Rotación de la matriz 90º
vertical_board = [x for x in zip(*board)]

# Cálculo de las diagonales
diag_board_right = [[board[0][0], board[1][1], board[2][2]]]
diag_board_left = [[board[0][2], board[1][1], board[2][0]]]

# Sumatoria de las listas y matriz resultantes, con la original
board = board + vertical_board + diag_board_left + diag_board_right
```

Este sería el primer paso de nuestra función. La matriz resultante (3x8) será la entrada para la fórmula que vimos en el punto anterior.


### ¿Y si el tablero está incompleto...?

En caso de que el proceso anterior no haya determinado un ganador, bien por espacios vacíos o bien porque no haya ningún caso de victoria por parte de ninguna de las partes, tenemos que determinar cuál es el estado, exactamente.

Para ello, comprobaremos que no haya ningún hueco vacío en el tablero.

```python
lines = [0 in line for line in board]
return -1 if True in lines else 0
```

### Código completo

El resultado final, con comentarios. Dicho sea de paso, que revisar esto para documentarlo y escribir este post, me ha llevado a varias correcciones, refactorizaciones, y en general, evitar sobreingeniería.

```python
import math
from functools import reduce

def is_solved(board):
    # Get vertical lines
    vertical_board = [x for x in zip(*board)]
    
    # Get diagonal lines
    diag_board_right = [[board[0][0], board[1][1], board[2][2]]]
    diag_board_left = [[board[0][2], board[1][1], board[2][0]]]

    # Put all lines together
    board = board + vertical_board + diag_board_left + diag_board_right
    
    # Check for winner, by finding the fist line with a winning combination.
    for line in board:
        if 0 not in line:
            # Each winning combination should be [1,1,1] or [2,2,2], to 
            # chech this we can get the product of each list, and find
            # their cubic root. 
            #
            # Example:
            #
            # (1*1*1) ** (1/3) is equal to 1.0, is valid.
            # (2*2*2) ** (1/3) is equal to 2.0, is valid.
            # (1*2*1) ** (1/3) is equal to 1.26, is not valid.
            
            value = reduce(lambda x, y: x * y, line) ** (1/3)
            
            # Winning combination value should be exact, its decimals should be 0.            
            dec, val = math.modf(value)
            
            if dec == 0.0:
                return int(val)
    
    # If there is no winner, the board could be incomplete or cat's game. 
    # To find this, we're going to check how many empty spaces (0) are 
    # into the board. If any, it will return -1 (unfinished game, no winner yet).
    # Else, it will return 0 (cat's game).

    lines = [0 in line for line in board]
    return -1 if True in lines else 0
```]]></content><author><name>Juanjo Salvador</name></author><category term="python," /><category term="katas" /><summary type="html"><![CDATA[Últimamente me ha dado de nuevo por hacer katas en CodeWars. En mis años mozos, me encantaba dedicar mis ratos libres a este tipo de ejercicios, porque son entretenidos y me mantienen al día con esto de escribir código, así que ahora, dado que estoy parado (¡aprovecha! ¡puedes contratarme!) he vuelto a dedicarme a ello.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/TicTacToe.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/TicTacToe.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Problemas de firmware en Debian Trixie</title><link href="https://ingenieroynopuedo.es/2023/11/16/Problemas-de-firmware-en-Debian-Trixie/" rel="alternate" type="text/html" title="Problemas de firmware en Debian Trixie" /><published>2023-11-16T00:00:00+00:00</published><updated>2023-11-16T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2023/11/16/Problemas-de-firmware-en-Debian-Trixie</id><content type="html" xml:base="https://ingenieroynopuedo.es/2023/11/16/Problemas-de-firmware-en-Debian-Trixie/"><![CDATA[Recientemente he actualizado mi paquetería en Debian Trixie, y esta actualización incluía una subida de versión del kernel. ¡Que grandes noticias! Pero durante este proceso, me han aparecido varios warnings indicando que un módulo (i915) no estaba presente. Algo que me ha resultado raro, porque juraría que tengo todo instalado desde que instalé Trixie en este portátil.


No le hago mucho caso, y procedo a reiniciar el sistema para arrancar la nueva versión del kernel, y... resulta que nunca llega a iniciar el servidor gráfico. Así que reinicio, y verifico que no es un problema de Wayland, arrancando desde el modo seguro y revisando el diario de SystemD.

```pre
$ journalctl -xb
```

Ahí es donde veo varios mensajes relacionados con el módulo del kernel faltante. 

### Buscando un culpable

Así que mi primera impresión es, ¿puede que se hayan eliminado los drivers del módulo de gráficos? Paso inmediatamente a hacer una búsqueda del metapaquete relacionado.

```pre
$ apt search i915
```

Lo que me devuelve un paquete relacionado y no instalado: `firmware-misc-nonfree`. `nonfree`, esto último me llama la atención, ya que, recordemos que desde hace unos años Debian tiene una [política bastante fuerte contra los paquetes no libres](https://www.debian.org/doc/debian-policy/ch-archive.html#the-non-free-archive-area), excluyéndolos en un repositorio aparte. 

### ¡Pero yo aún tengo los repositorios non-free en mi lista!

Es probable que en algún momento y frente a algún paquete diferente (estuve trasteando con Steam en esta máquina), se haya marcado este firmware como obsoleto y se haya eliminado por accidente. De nuevo, reviso y me aseguro que mis repositorios incluyen *non-free*, y paso a instalar el metapaquete faltante. Una vez hecho, reinicio el sistema, y aprovecho el momento para ir a por un café. Sin embargo, antes de que me levante, el equipo termina de arrancar, y puedo ver la pantalla de inicio de sesión de GNOME.

### Conclusión

Podemos dar por concluído el caso, y corroborar que *algún proceso* seguramente desatendido, ha borrado el módulo requerido. Pero sin embargo, existe la posibilidad de que haya sido yo en algún proceso anterior con el fin de optimizar el rendimiento. Por otro lado, he buscado y no he hayado rastro alguno de alternativa de este paquete con alguna licencia libre, motivo por el que, empiezo una vez más a tener mis reticencias con Debian a nivel usuario.]]></content><author><name>Juanjo Salvador</name></author><category term="linux," /><category term="debian" /><summary type="html"><![CDATA[Recientemente he actualizado mi paquetería en Debian Trixie, y esta actualización incluía una subida de versión del kernel. ¡Que grandes noticias! Pero durante este proceso, me han aparecido varios warnings indicando que un módulo (i915) no estaba presente. Algo que me ha resultado raro, porque juraría que tengo todo instalado desde que instalé Trixie en este portátil.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/Problemas-de-firmware-en-Debian-Trixie.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/Problemas-de-firmware-en-Debian-Trixie.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">OpenSouthCode 2023, vuelta a Málaga y autocrítica</title><link href="https://ingenieroynopuedo.es/2023/06/14/OpenSouthCode-2023/" rel="alternate" type="text/html" title="OpenSouthCode 2023, vuelta a Málaga y autocrítica" /><published>2023-06-14T00:00:00+00:00</published><updated>2023-06-14T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2023/06/14/OpenSouthCode-2023</id><content type="html" xml:base="https://ingenieroynopuedo.es/2023/06/14/OpenSouthCode-2023/"><![CDATA[Tras un año de inactividad, OpenSouthCode ha vuelto a las andadas, y yo como aficionado a estos saraos, no he perdido el tiempo y he asistido, con una flamante charla además, acerca de por qué y cómo deberías adoptar Poetry como tu nuevo gestor de dependencias y de entornos virtuales para Python. Aprovecho el momento para darle las gracias a **Málaga Python** por prestarme su tiempo para tener esta oportunidad, y a mis compañeros de **Cathedral Software** por venir a verme y apoyarme en esto.

Para mi ha sido un evento muy productivo, amenizado por reencuentros, pescaíto frito, los chicos de KDE España, y charlas muy interesantes sobre accesibilidad (a11y), fediverso, y Durango-X. 
<figure>
<img src="https://lh3.googleusercontent.com/pw/AJFCJaWmcp4YpznQvXjkp1QVR-0B7AjVLxYvMYTIYcgfclScobPIRFUsA-l6WKPxWUbvhbAuLmXampf3fPxOUXMEyL_qGdI19OKlxEJMeAKd5Y9Dcqh55UbGtVU2HhaTH1MHL_Yp7wgxe8vSX3WKuAUmfpz7Hw=w1392-h929-s-no?authuser=0" alt="Juanjo llevando una camiseta de DurangoX y exponiendo en un monitor, señalando una diapositiva" />
<label>
Gracias al equipo de redes sociales de OpenSouthCode por la foto :-)
</label>
</figure>
De este evento, me llevo una grata experiencia además de algunas lecciones aprendidas, y cosas que tengo que mejorar.

1. **Los nervios no ayudan**. Tómate las cosas con calma si tienes que exponer. Si tienes ocasión, tómate unos minutos antes para repasar y soltarte.
2. **Revisa tus adaptadores**. Si tu portátil es como mi Thinkad, que solo tiene salida mini DisplayPort, te hará falta un adaptador a HDMI.
3. **Lleva una regleta**. Si te cabe en la mochila, lleva una. Nunca se sabe cuando vas a necesitar cargar baterías ni si habrá enchufes disponibles. En mi hotel siempre escasean los enchufes y esto me ayuda.
4. **Las baterías externas son tus amigas**. Con potencia adecuada para tus dispositivos. Yo llevo una batería estándar de 10.000mAh para casos de emergencia para mi teléfono. Pero acuérdate de cargarla.
5. **Ubicación adecuada**. Asegúrate de que tu alojamiento esté en un lugar accesible y no demasiado lejos del evento. En caso de que la única opción esté lejos, procura establecer previamente una ruta para llegar (transporte público, taxi, etc) y ahórrate sorpresas.

Esto son principalmente fallos de logística que solucionar a futuro. Para futuras ediciones, procuraré organizarme mejor estos temas, y por supuesto, volver a disfrutar de la experiencia.

¡Nos vemos en OpenSouthCode 2024!]]></content><author><name>Juanjo Salvador</name></author><summary type="html"><![CDATA[Tras un año de inactividad, OpenSouthCode ha vuelto a las andadas, y yo como aficionado a estos saraos, no he perdido el tiempo y he asistido, con una flamante charla además, acerca de por qué y cómo deberías adoptar Poetry como tu nuevo gestor de dependencias y de entornos virtuales para Python. Aprovecho el momento para darle las gracias a Málaga Python por prestarme su tiempo para tener esta oportunidad, y a mis compañeros de Cathedral Software por venir a verme y apoyarme en esto.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/OpenSouthCode-2023.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/OpenSouthCode-2023.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tilling en GNOME 41</title><link href="https://ingenieroynopuedo.es/2022/01/15/Tilling-en-GNOME-41/" rel="alternate" type="text/html" title="Tilling en GNOME 41" /><published>2022-01-15T00:00:00+00:00</published><updated>2022-01-15T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2022/01/15/Tilling-en-GNOME-41</id><content type="html" xml:base="https://ingenieroynopuedo.es/2022/01/15/Tilling-en-GNOME-41/"><![CDATA[Algo que siempre había echado en falta en GNOME, era la posibilidad de disponer de un gestor de ventanas en mosaico, lo que llamamos *tilling* En Reddit, diariamente veo muchas capturas de pantalla de diferentes configuraciones de escritorio, donde predomina un componente común: Arch, i3-gaps y minimalismo. Y como uno es muy *culo veo, culo quiero*, y desde hace años soy bastante fan de las personalizaciones de escritorio, me ha apatecido probar la experiencia.

Para esto, he usado la extensión [`pop-shell@system76`](https://github.com/pop-os/shell) de GNOME. En distribuciones como Fedora o Arch, puedes instalarlo directamente desde los repositorios, pero en mi caso, para Debian, me ha tocado hacerlo manualmente.

Lo primero es clonar el repositorio e instalar las dependencias.

```pre
$ sudo apt install node-typescript make
$ git clone https://github.com/pop-os/shell.git
```

Y a continuación, instalar con `make`.

```pre
$ cd shell
$ make local-install
```

En este paso preguntará si quieres cambiar los atajos de teclado a los de Pop-Shell. En mi caso, he preferido mantener los que tengo actualmente, pero lo dejo a tu elección.

Finalmente, es posible que te devuelva un error indicando que la extensión no existe. En ese caso, no tienes que preocuparte, una vez finalizada la instalación, incluso con el error en cuestión, solo tenemos que reiniciar GNOME Shell, y activar manualmente desde `gnome-extensions`.

```pre
$ killall -HUP gnome-shell
$ gnome-extensions enable pop-shell@system76
```

![Captura de GNOME Shell](https://pbs.twimg.com/media/FJK8ReWWUAUuyd6?format=jpg&name=large)]]></content><author><name>Juanjo Salvador</name></author><category term="linux," /><category term="debian," /><category term="gnome" /><summary type="html"><![CDATA[Algo que siempre había echado en falta en GNOME, era la posibilidad de disponer de un gestor de ventanas en mosaico, lo que llamamos tilling En Reddit, diariamente veo muchas capturas de pantalla de diferentes configuraciones de escritorio, donde predomina un componente común: Arch, i3-gaps y minimalismo. Y como uno es muy culo veo, culo quiero, y desde hace años soy bastante fan de las personalizaciones de escritorio, me ha apatecido probar la experiencia.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/Tilling-en-GNOME-41.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/Tilling-en-GNOME-41.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Consejos para encontrar tu primer trabajo en IT</title><link href="https://ingenieroynopuedo.es/2022/01/13/Consejos-para-encontrar-tu-primer-trabajo-en-IT/" rel="alternate" type="text/html" title="Consejos para encontrar tu primer trabajo en IT" /><published>2022-01-13T00:00:00+00:00</published><updated>2022-01-13T00:00:00+00:00</updated><id>https://ingenieroynopuedo.es/2022/01/13/Consejos-para-encontrar-tu-primer-trabajo-en-IT</id><content type="html" xml:base="https://ingenieroynopuedo.es/2022/01/13/Consejos-para-encontrar-tu-primer-trabajo-en-IT/"><![CDATA[### TL;DR:

No voy a empezar este artículo hablando desde un punto de vista de Mr Wonderful, con "10 consejos que te garantizarán un puesto de trabajo", ni nada por el estilo. Ni tampoco voy a hablar de trucos infalibles que te ayudarán a conseguir tu primer puesto como programador junior, en su lugar, voy a hablar de mi experiencia buscando trabajo, cómo lo he gestionado, qué dificultades he tenido, etc. Y ello implica hablar de lo bueno, y de lo malo. Un buen portfolio te abre puertas, no tengas miedo a salir de tu zona de confort, LinkedIn es una poderosa herramienta para buscar empleo, y no trates de ser dominar todas las tecnologías posibles, céntrate y que se te de muy bien una o dos cosas, en lugar de saber un poco de todo.

## Hazte un portfolio

Tener tu curriculum adornado y vistoso con una plantilla que has comprado en Internet, es un plus. Pero la empresa, una vez vea de qué se supone que eres capaz, querrán comprobarlo. Seguramente tendrás que pasar una prueba técnica, pero pónselo fácil, dales una página web donde puedan ver qué sabes hacer y lo bien que lo haces. Llénala con tus proyectos públicos, tus conocimientos, algún texto bonito, y enlaces que puedan visitar.

Utiliza recursos gratuitos, como GitHub o GitLab Pages para el hosting, un dominio `.me` o `.dev` que siempre queda guay, y una web estática (HTML5, CSS3 y JS). No necesitas nada tremendamente complejo. Puedes utilizar un generador de páginas estáticas (Jekyll, Hugo, Pelican) o algo más dinámico, como [Blask](https://getblask.com) que puedes alojar en Heroku o PythonAnywhere.

## LinkedIn Premium vale más de lo que parece

Imagino que ya tendrás un perfil en LinkedIn. Si no lo tienes, es un buen momento para creartelo y rellenarlo con tu curriculum. Escoge una buena foto, y nada más llegar, busca a tus compañeros de clase, compañeros de otros trabajos que hayas tenido, o amigos cercanos que puedan ayudarte a verificar tus aptitudes. Esto es importante, ya que hará que tu perfil resalte sobre otros usuarios cuando un recruiter busque posibles trabajadores. Cuando creas la cuenta, LinkedIn te ofrece un mes de servicio Premium gratis. Utilízalo. Hará que tu perfil destaque sobre el resto, te permite ver en qué percentil estás sobre el resto de candidatos a una oferta, y en general, hará que causes más impresión.

También deberías poder aprovechar ese periodo gratuito para realizar test de aptitud de los lenguajes o tecnologías que te interesen. Por ejemplo, si te interesa una oferta donde piden programadores de JavaScript, demuestra que sabes, haz el test de aptitud y que esos conocimientos destaquen en tu perfil, verificados por LinkedIn.

## Echa redes, hay muchos peces

Gracias a la pandemia, los puestos de trabajo en remoto proliferan. Prácticamente todas las empresas han tenido que pasarse al modelo remoto para poder captar gente, actualízate o muere. Esto sigifica que todas tratan de ser más competitivas y dejan de lado ese pensamiento de «es lo que hay, lo tomas o lo dejas» ofertando puestos de trabajo malpagados, o donde terminas siendo el único integrante de todo el departamento de IT. Así que, aprovecha eso, y busca tanto empresas en tu ciudad, como fuera de esta. En mi último periodo en paro, durante 8 meses estuve buscando trabajo y realizando entrevistas sin éxito, porque me limitaba a mi zona, y aquí las salidas son escasas. Una vez superé ese miedo y me aventuré a buscar fuera, llegué a conseguir dos entrevistas, en dos empresas que me interesaban mucho, y donde tuve un pie dentro prácticamente al terminar la videollamada, colocándome en la posición de poder elegir a donde voy.

Si buscas algo más especializado en diseño, aprovecha las agencias de publicidad, siempre hay ofertas, pero hazte a la idea de que vas a necesitar conocimientos centrados en SEO, CSS y gestores de contenido. ¿Te interesa dar rienda suelta a tu habilidad con el código puro y duro? Aunque muchos te dirán lo contrario, las consultoras son una buena fuente de experiencia. Malpagadas generalmente, pero si de tu sueldo no depende tu familia, es una buena oportunidad. Complementalo con proyectos personales, y da rienda suelta a tu creatividad fuera de la oficina, eso ayudará a ampliar tus horizontes y sobre todo, encontrar tu segundo trabajo. Piensa en las consultoras como una lanzadera.

## Especialízate

Un profesor mío, decía siempre «aprendiz de todo, maestro de nada». Y realmente, es un buen consejo, pero en este mundillo vale más la pena ser un maestro de una o varias tecnologías, y no un aprendiz de todas. Escoge una rama que te guste y que te haga sentir a gusto. 

¿Prefieres front? Cada minuto aparece un nuevo framework de JavaScript, por suerte para ti, unos pocos lideran el mercado. Escoge entre Vue, React o Angular (o los tres, ¿quién soy yo para decirte qué hacer?), haz algún curso, empieza un proyecto con alguno de esos tres, y aprende las buenas prácticas de este hasta que te sea tan natural como respirar. ¿Escoges back? Las tecnologías que las empresas suelen pedir varían, pero PHP, Python, JavaScript y Java siempre van a la estar a la orden del día. Y dentro de estos, frameworks como CakePHP, Django, Express y Spring Boot, por poner algunos ejemplos. De nuevo, escoge uno de esos lenguajes, familiarizate con sus frameworks, inicia un proyecto personal con eso, y empápate de conocimientos.

Sin embargo, este es un mundo cambiante. En el momento de escribir esto, Python y Django son una tecnología no altamente demandada, pero si en alza. ¿Quién sabe el día de mañana que llegará?

## Conclusión

Todo esto, está basado en mis experiencias con más de 5 años en el sector. Si bien es cierto que no es una carrera extensa, ni soy un gurú del tema, cuando empecé hubiese agradecido tener alguien o algo que me guiase a encontrar un trabajo en condiciones y no caer en empresas donde no me encontraba cómodo, dando tumbos hasta haber llegado a donde estoy.

Cualquier comentario, duda, o pregunta, no dudes que puedes escribirme por Twitter o Mastodon, aunque sea solo para saludar.]]></content><author><name>Juanjo Salvador</name></author><summary type="html"><![CDATA[TL;DR:]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ingenieroynopuedo.es/assets/images/og/posts/Consejos-para-encontrar-tu-primer-trabajo-en-IT.png" /><media:content medium="image" url="https://ingenieroynopuedo.es/assets/images/og/posts/Consejos-para-encontrar-tu-primer-trabajo-en-IT.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>