<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>rawBlog</title>
    <description>This is my personal blog space for random ideas, write about software libre, programming, technology, cycling and some other of my passions.
</description>
    <link>http://cravacuore.com.ar/blog/</link>
    <atom:link href="http://cravacuore.com.ar/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 27 Mar 2018 12:51:38 -0300</pubDate>
    <lastBuildDate>Tue, 27 Mar 2018 12:51:38 -0300</lastBuildDate>
    <generator>Jekyll v3.7.0</generator>
    
      <item>
        <title>Tmuxinator - fast tmux setups</title>
        <description>&lt;p&gt;Ya hace tiempo que venía utilizando &lt;a href=&quot;https://github.com/tmux/tmux&quot;&gt;Tmux&lt;/a&gt; como ‘&lt;em&gt;terminal multiplexer&lt;/em&gt;’, tanto para trabajo como otras tareas habituales. Algo que me molestaba era que ante cualquier reinicio perdía el ‘estado’ de mis sesiones de &lt;em&gt;tmux&lt;/em&gt;. Por lo tanto, tenía que volver a crear mis &lt;em&gt;N&lt;/em&gt; sesiones y en cada una abrir las múltiples aplicaciones, servicios y entornos de desarrollo teniendo en cuenta también de activar el &lt;em&gt;virtualenv&lt;/em&gt; correspondiente a cada proyecto en cada &lt;em&gt;tab&lt;/em&gt; dentro de &lt;em&gt;tmux&lt;/em&gt;, algo engorroso de hacer.&lt;/p&gt;

&lt;p&gt;Previamente había utilizado los &lt;em&gt;plugins&lt;/em&gt; de &lt;em&gt;tmux&lt;/em&gt;: &lt;a href=&quot;https://github.com/tmux-plugins/tmux-resurrect&quot;&gt;tmux-resurrect&lt;/a&gt; y &lt;a href=&quot;https://github.com/tmux-plugins/tmux-continuum&quot;&gt;tmux-continuum&lt;/a&gt; con los cuales me guardaba automáticamente el estado de las sesiones cada tanto, y ante un reinicio este me creaba todas las sesiones anteriormente creadas con los &lt;em&gt;tabs&lt;/em&gt; y paneles correspondientes, pero con esto no mantenía ni las &lt;em&gt;apps&lt;/em&gt;, ni servicios, ni los &lt;em&gt;virtualenv&lt;/em&gt; ejecutados.&lt;/p&gt;

&lt;p&gt;Y hace poco me encontré con &lt;a href=&quot;https://andrewbrookins.com/tech/instant-django-dev-environments-with-tmux-tmuxinator-and-virtualenvwrapper/&quot;&gt;este post&lt;/a&gt; que me iluminó de la existencia de &lt;a href=&quot;https://github.com/tmuxinator/tmuxinator&quot;&gt;Tmuxinator&lt;/a&gt; contenida en una gema Ruby, este me resuelve en mayor medida lo que venía necesitando. Prácticamente este te deja crear una &lt;em&gt;config&lt;/em&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;.yml&lt;/code&gt; donde definir la creación de sesiones ‘&lt;em&gt;custom&lt;/em&gt;’ en &lt;em&gt;tmux&lt;/em&gt;.&lt;/p&gt;

&lt;h3 id=&quot;instalación-y-configuración&quot;&gt;Instalación y configuración&lt;/h3&gt;

&lt;p&gt;Siguiendo los pasos de instalación y configuración en el mismo &lt;a href=&quot;https://github.com/tmuxinator/tmuxinator#installation&quot;&gt;repo&lt;/a&gt;. (&lt;em&gt;Warning&lt;/em&gt;: los resultados y pasos efectuados son en mi entorno con Archlinux, estos pueden variar en tu caso.)&lt;/p&gt;

&lt;h4 id=&quot;instalación&quot;&gt;Instalación&lt;/h4&gt;

&lt;p&gt;Primero instalamos la gema:&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;gem &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;tmuxinator&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h4 id=&quot;consola&quot;&gt;Consola&lt;/h4&gt;

&lt;p&gt;Hay que asegurarse que tengamos definida la variable de editor &lt;em&gt;default&lt;/em&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;$EDITOR&lt;/code&gt;. En mi caso usando &lt;em&gt;zsh&lt;/em&gt;, en la &lt;em&gt;config&lt;/em&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.zshrc&lt;/code&gt; la tengo definida como &lt;code class=&quot;highlighter-rouge&quot;&gt;export EDITOR=&quot;vim&quot;&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;tmux&quot;&gt;Tmux&lt;/h4&gt;

&lt;p&gt;Tmuxinator funciona para versiones de 1.8 en adelante, exceptuando la versión 2.5. Vemos la versión haciendo en consola &lt;code class=&quot;highlighter-rouge&quot;&gt;tmux -V&lt;/code&gt; en mi caso me devuelve &lt;code class=&quot;highlighter-rouge&quot;&gt;tmux 2.6&lt;/code&gt;.
Además si utilizamos en nuestra &lt;em&gt;config&lt;/em&gt; de &lt;em&gt;tmux&lt;/em&gt; (/etc/tmux.conf) la opción &lt;code class=&quot;highlighter-rouge&quot;&gt;base-index&lt;/code&gt; distinta a la &lt;em&gt;default&lt;/em&gt; (que es 0) también hay que setear &lt;code class=&quot;highlighter-rouge&quot;&gt;pane-base-index&lt;/code&gt;.
En mi caso entonces, tengo:&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 class=&quot;o&quot;&gt;[&lt;/span&gt;..]
&lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-g&lt;/span&gt; base-index 1
set-window-option &lt;span class=&quot;nt&quot;&gt;-g&lt;/span&gt; pane-base-index 1
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;..]&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h4 id=&quot;completion&quot;&gt;Completion&lt;/h4&gt;

&lt;p&gt;Para conseguir autocompletado de los comandos de &lt;em&gt;tmuxinator&lt;/em&gt; en la consola, hay que hacer un &lt;em&gt;source&lt;/em&gt; sobre los que correspondan a tu &lt;em&gt;shell&lt;/em&gt;. En mi caso, haciendo uso de &lt;em&gt;zsh&lt;/em&gt; en &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.zshrc&lt;/code&gt; encuentro el archivo de &lt;em&gt;completion&lt;/em&gt; haciendo &lt;code class=&quot;highlighter-rouge&quot;&gt;source ~/.gem/ruby/2.5.0/gems/tmuxinator-0.10.1/completion/tmuxinator.zsh&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;verificación&quot;&gt;Verificación&lt;/h4&gt;

&lt;p&gt;Podemos ahora hacer un &lt;code class=&quot;highlighter-rouge&quot;&gt;tmuxinator doctor&lt;/code&gt; para confirmar que tenemos todo lo necesario instalado y configurado. Si nos muestra algo como esto:&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;Checking &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;tmux is installed &lt;span class=&quot;o&quot;&gt;==&amp;gt;&lt;/span&gt; Yes
Checking &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$EDITOR&lt;/span&gt; is &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&amp;gt;&lt;/span&gt; Yes
Checking &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$SHELL&lt;/span&gt; is &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&amp;gt;&lt;/span&gt; Yes&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Estamos listos. En caso contrario, vuelvan a leer los pasos anteriores a ver qué les faltó. Y/o lean el error y resuelvan.&lt;/p&gt;

&lt;h3 id=&quot;ahora-cómo-lo-uso&quot;&gt;Ahora ¿cómo lo uso?&lt;/h3&gt;

&lt;p&gt;Para crear una nueva &lt;em&gt;config&lt;/em&gt; de &lt;em&gt;tmuxinator&lt;/em&gt;, simplemente hacemos:&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;tmuxinator new foobar&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Esto nos crea un nueva &lt;em&gt;config&lt;/em&gt; en &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.config/tmuxinator/foobar.yml&lt;/code&gt; con contenido de ejemplo para completar.&lt;/p&gt;

&lt;h4 id=&quot;editando-config&quot;&gt;Editando config&lt;/h4&gt;

&lt;p&gt;Una vez creada esta nueva &lt;em&gt;config&lt;/em&gt;, la abrimos con nuestro editor de preferencia y podemos ver entre los distintos parámetros cosas como:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;name&lt;/code&gt;: setea nombre del proyecto de tmuxinator.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;root&lt;/code&gt;: la ruta raíz de nuestro proyecto sobre el que se ejecutan todas las operaciones. Por default abre cualquier &lt;em&gt;tab&lt;/em&gt; de tmux sobre este directorio.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;on_project_first_start&lt;/code&gt;: ejecuta lo que pongamos en esta línea al iniciar el proyecto con &lt;code class=&quot;highlighter-rouge&quot;&gt;tmuxinator start foobar&lt;/code&gt; (útil para inicializar servicios, como base de datos).&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;pre_window&lt;/code&gt;: ejecuta esta línea sobre cada nueva &lt;em&gt;window&lt;/em&gt; abierta en tmux (muy útil para inicializar virtualenvs).&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;windows&lt;/code&gt;: acá definimos la estructura de &lt;em&gt;windows&lt;/em&gt; por nombre y qué se ejecuta inicialmente en cada una. De similar forma se pueden gestionar los &lt;em&gt;tabs&lt;/em&gt; y &lt;em&gt;panes&lt;/em&gt;, además del &lt;em&gt;layout&lt;/em&gt; en cada uno.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esta es un ejemplo de configuración propia sobre un proyecto Django:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yml&quot; data-lang=&quot;yml&quot;&gt;&lt;span class=&quot;c1&quot;&gt;# ~/.tmuxinator/django_project.yml&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;django_project&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;~/work/django_project/&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;on_project_first_start&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;sudo systemctl start mysqld.service &amp;amp;&amp;amp; sudo systemctl start postgresql.service&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;pre_window&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;workon django_project&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;startup_window&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;vim&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;windows&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;vim&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;vim&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;./manage.py runserver --configuration=Dev&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;python&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;./manage.py shell&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;zsh&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h4 id=&quot;otras-opciones&quot;&gt;Otras opciones&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;tmuxinator list&lt;/code&gt; nos lista todos nuestros proyectos creados en tmuxinator.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;tmuxinator delete foobar&lt;/code&gt; borra el proyecto foobar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pueden ver otras opciones disponibles haciendo &lt;code class=&quot;highlighter-rouge&quot;&gt;tmuxinator --help&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;extra&quot;&gt;Extra&lt;/h4&gt;

&lt;p&gt;Una comodidad extra que nos brinda este &lt;em&gt;workflow&lt;/em&gt; es que al cambiar de branch sobre un proyecto, si este tiene varios servicios y/o comandos que se tienen que verificar o ejecutar al levantar este proyecto. Podemos simplemente hacer un &lt;code class=&quot;highlighter-rouge&quot;&gt;kill-session&lt;/code&gt; sobre &lt;em&gt;tmux&lt;/em&gt; y volver a inicializar el proyecto con &lt;em&gt;tmuxinator&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Espero les sea tan útil como me es útil a mí. Lo utilizo para prácticamente todos mis proyectos en desarrollo e incluso para otros casos recurrentes, como una sesión para escribir en este mismo &lt;em&gt;blog&lt;/em&gt; ;).&lt;/p&gt;
</description>
        <pubDate>Tue, 27 Mar 2018 12:51:23 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2018/03/27/tmuxinator-fast-tmux-setups.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2018/03/27/tmuxinator-fast-tmux-setups.html</guid>
        
        
      </item>
    
      <item>
        <title>Lector de Huella en Thinkpad X1 Carbon 4th Gen</title>
        <description>&lt;p&gt;Lo único que no funcionaba en mi X1 sobre linux era el lector de huella, un lujo que era prescindible. Hace tiempo que venía siguiendo el progreso sobre este &lt;a href=&quot;https://github.com/nmikhailov/Validity90/&quot;&gt;repo&lt;/a&gt; que intentaba tener un driver funcional para Linux haciendo ingeniería inversa sobre el lector.&lt;/p&gt;

&lt;p&gt;Hace poco, armó un prototipo y pidió feedback sobre el mismo. A todo esto otro usuario, armó un &lt;a href=&quot;https://github.com/3v1n0/libfprint&quot;&gt;driver&lt;/a&gt; sobre &lt;a href=&quot;https://github.com/freedesktop/libfprint&quot;&gt;fprint&lt;/a&gt; en base a este prototipo dando soporte a este lector de huellas.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Warning: seguir estos pasos es bajo tu responsabilidad, los mismos me funcionaron específicamente sobre mi X1 Carbon 4th gen con Archlinux. Además de ser sobre un prototipo, un driver propiamente desarrollado está en los planes de esta misma gente para un futuro.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Estos son los pasos que seguí para lograr hacerlo funcionar, en base a lo &lt;a href=&quot;https://gitter.im/Validity90/Lobby?at=5a9ed978f3f6d24c6844244a&quot;&gt;escrito&lt;/a&gt; por el usuario &lt;a href=&quot;https://github.com/vKnmnn&quot;&gt;@vKnmnn&lt;/a&gt; en el &lt;a href=&quot;https://gitter.im/Validity90/Lobby&quot;&gt;Gitter&lt;/a&gt; sobre el prototipo de &lt;a href=&quot;https://github.com/nmikhailov&quot;&gt;@nmikhailov&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Instalar &lt;a href=&quot;https://aur.archlinux.org/packages/libfprint-vfs0090-git/&quot;&gt;libfprint-vfs0090-git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Editar &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/pam.d/system-auth&lt;/code&gt;, agregando &lt;code class=&quot;highlighter-rouge&quot;&gt;pam_fprintd.so&lt;/code&gt; antes de &lt;code class=&quot;highlighter-rouge&quot;&gt;pam_unix.so&lt;/code&gt;. Quedando:&lt;/li&gt;
&lt;/ul&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 class=&quot;o&quot;&gt;[&lt;/span&gt;..]
auth sufficient pam_fprintd.so
auth required   pam_unix.so
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;..]&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Esto habilita a usar sudo con huella.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Si usás sddm como tu &lt;em&gt;display manager&lt;/em&gt; como yo, editamos&lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/pam.d/sddm&lt;/code&gt; agregando &lt;code class=&quot;highlighter-rouge&quot;&gt;pam_fprintd.so&lt;/code&gt; como primer línea de &lt;code class=&quot;highlighter-rouge&quot;&gt;auth&lt;/code&gt;. Quedando:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;  auth sufficient pam_fprintd.so
  &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;..]&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Esto nos habilita a utilizar la huella en el &lt;em&gt;login&lt;/em&gt; apretando &lt;em&gt;enter&lt;/em&gt; sobre el campo vacío de contraseña previamente a utilizar la huella.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;En el prototipo todavía no se puede hacer la ‘inicialización’ de las huellas. Por lo tanto desde un windows, ya sea en disco o en una máquina virtual:
    &lt;ul&gt;
      &lt;li&gt;si estamos en una virtual, hay que habilitar el dispositivo &lt;em&gt;usb&lt;/em&gt; del lector para lograr verlo en la virtual&lt;/li&gt;
      &lt;li&gt;si no detecta el dispositivo, buscamos el driver para windows en la página de Lenovo. Yo instalé &lt;a href=&quot;https://download.lenovo.com/pccbbs/mobiles/n1cgn05w.exe&quot;&gt;este&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;vamos a Settings -&amp;gt; Users -&amp;gt; Log-in options
        &lt;ul&gt;
          &lt;li&gt;Agregamos un PIN&lt;/li&gt;
          &lt;li&gt;Y en la sección Windows Hello -&amp;gt; agregamos una huella (no hace falta agregar más que una cualquiera, es sólo para inicializar el lector)&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Volviendo a nuestro linux
    &lt;ul&gt;
      &lt;li&gt;registramos nuestras huellas haciendo:
        &lt;blockquote&gt;
          &lt;p&gt;for finger in {left,right}-{thumb,{index,middle,ring,little}-finger}; do fprintd-enroll -f “$finger” “$USER”; done&lt;/p&gt;
        &lt;/blockquote&gt;
        &lt;ul&gt;
          &lt;li&gt;Nos va a pedir dedo por dedo, y registra 5 veces cada uno antes de pasar al siguiente.&lt;/li&gt;
          &lt;li&gt;Podemos poner en todos los dedos a registrar un único o unos pocos, repitiendo en los que no nos interese.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Ahora haciendo uso de &lt;em&gt;sudo&lt;/em&gt; o al intentar loguearse por sddm, nos pide una huella y el lector se enciende.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy. Me voy a mantener al tanto para cuando saquen el &lt;em&gt;driver&lt;/em&gt; definitivo.&lt;/p&gt;
</description>
        <pubDate>Fri, 23 Mar 2018 21:00:59 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2018/03/23/lector-de-huella-en-thinkpad-x1-carbon-4th-gen.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2018/03/23/lector-de-huella-en-thinkpad-x1-carbon-4th-gen.html</guid>
        
        
      </item>
    
      <item>
        <title>[Fix] GoPro Hero 4 Session WiFi Problem</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;Warning: esta solución me dió resultado a mí, pero quizás no sea tu caso. Queda bajo tu responsabilidad cualquier efecto provocado por seguir esta guía correcta o incorrectamente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mi GoPro Hero 4 Session no prendía la conexión por WiFi, la cual nos permite hacer uso de la &lt;em&gt;app&lt;/em&gt; en el celular que entre otras cosas nos da acceso a algunas opciones que desde la propia GoPro no se pueden cambiar. Dejando limitada sus funcionalidades.&lt;/p&gt;

&lt;p&gt;Después de más de un año de indignación, tras intentar pedir ayuda a Soporte Técnico de GoPro, que me respondía sin leer atentamente todo lo que le explicaba que ya había probado, seguía con un problema que hasta ahora parecía sin solución.&lt;/p&gt;

&lt;p&gt;Un error que parece algo recurrente para varios clientes de este producto, para lo cual proponían básicamente dos “soluciones” actualizar el firmware de la GoPro a su última versión (lo cuál obviamente intenté sin solución alguna) o mandarles el producto en caso de que todavía esté bajo garantía para que te lo reemplazen por uno nuevo, lo cual me era imposible ya que mi compra fue fuera del país hace tiempo, quedando fuera de garantía. Poco soporte ya para un producto que queda fuera del interés de GoPro al haber lanzado ya las versiones 5 y 6 de la línea.&lt;/p&gt;

&lt;p&gt;Investigando alternativas encontré este &lt;a href=&quot;https://github.com/KonradIT/goprowifihack&quot;&gt;repo en GitHub&lt;/a&gt; que habría un camino posible. Ligado a eso me encontré con un &lt;a href=&quot;https://community.gopro.com/t5/Cameras/Hero4-Session-wifi-not-turning-on/td-p/3886/highlight/true/page/12&quot;&gt;post&lt;/a&gt; en el foro de GoPro, donde el 25 de Diciembre del 2017, recién alguien encontró una posible solución. Este propone con la SD limpia, crear los siguiente 2 archivos:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;no_shutdown.txt&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;2_mode=0&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;cal.txt&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;_tapp factory_reset&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Prendemos la GoPro como si fuésemos a grabar algo, y a los pocos segundos en el &lt;em&gt;display&lt;/em&gt; debería aparecer &lt;code class=&quot;highlighter-rouge&quot;&gt;Factory Sett. Restored&lt;/code&gt; y hace unos &lt;em&gt;flash&lt;/em&gt; con los &lt;em&gt;led&lt;/em&gt; de color azul. Una vez hecho el reseteado, sacamos la SD, eliminamos los archivos creados dejando la SD limpia nuevamente y volvemos a poner la SD. Una vez prendida ya debería funcionar con normalidad, al apretar la conexión por &lt;code class=&quot;highlighter-rouge&quot;&gt;App&lt;/code&gt; debería ya darnos el &lt;em&gt;pin&lt;/em&gt; para conectar con el celular. Eureka!&lt;/p&gt;

&lt;p&gt;Probado en mi GoPro Hero 4 Session con versión de &lt;em&gt;firmware&lt;/em&gt; v02.00.&lt;/p&gt;
</description>
        <pubDate>Tue, 06 Feb 2018 21:55:13 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2018/02/06/fix-gopro-hero-4-session-wifi-problem.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2018/02/06/fix-gopro-hero-4-session-wifi-problem.html</guid>
        
        
      </item>
    
      <item>
        <title>Trizen - Alternativa Al 'Descontinuado' Pacaur</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://aur.archlinux.org/packages/pacaur/&quot;&gt;Pacaur&lt;/a&gt; fue durante mucho tiempo mi &lt;em&gt;helper&lt;/em&gt; por defecto para la instalación y manejo de paquetes tanto de repos oficiales como de &lt;a href=&quot;https://aur.archlinux.org/&quot;&gt;AUR&lt;/a&gt;. Y hace no mucho tiempo quien lo mantenía &lt;a href=&quot;https://bbs.archlinux.org/viewtopic.php?pid=1755144#p1755144&quot;&gt;anunció&lt;/a&gt; que iba a dejar de dar soporte al proyecto.&lt;/p&gt;

&lt;p&gt;Buscando una alternativa para un rápido cambio, cruzando la &lt;em&gt;data&lt;/em&gt; de la &lt;a href=&quot;https://wiki.archlinux.org/index.php/AUR_helpers#Comparison_table&quot;&gt;tabla comparativa de helpers&lt;/a&gt; y este &lt;a href=&quot;https://www.reddit.com/r/archlinux/comments/7k5suz/pacaur_now_unmaintained/&quot;&gt;thread&lt;/a&gt; de Reddit donde se trató la temática, me terminé por decidir por &lt;a href=&quot;https://aur.archlinux.org/packages/trizen/&quot;&gt;Trizen&lt;/a&gt; al ofrecer la experiencia más similar.&lt;/p&gt;

&lt;p&gt;Dando uso por última vez de pacaur para la instalación de su sucesor:&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;  pacaur &lt;span class=&quot;nt&quot;&gt;-S&lt;/span&gt; trizen&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Y un leve cambio en la configuración de trizen, para que los paquetes clonados se guarden en &lt;code class=&quot;highlighter-rouge&quot;&gt;.cache&lt;/code&gt; en vez de &lt;code class=&quot;highlighter-rouge&quot;&gt;/tmp&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;~/.config/trizen/trizen.conf&lt;/code&gt;&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;  clone_dir &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;.cache/trizen&quot;&lt;/span&gt;,&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Podríamos desinstalar pacaur y utilizar normalmente trizen prácticamente como si de pacaur se tratase. Para más info &lt;code class=&quot;highlighter-rouge&quot;&gt;man trizen&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;PS: pongo ‘descontinuado’ ya que pacaur es open source (https://github.com/rmarquis/pacaur) y quien quiera podría agarrar la posta y continuar su desarrollo aunque su propio desarrollador principal (quien dejó el proyecto) ya no lo mantenga.&lt;/p&gt;
</description>
        <pubDate>Sat, 06 Jan 2018 00:30:12 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2018/01/06/trizen-alternativa-al-descontinuado-pacaur.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2018/01/06/trizen-alternativa-al-descontinuado-pacaur.html</guid>
        
        
      </item>
    
      <item>
        <title>Zeal - Documentación Offline</title>
        <description>&lt;p&gt;&lt;a href=&quot;https://zealdocs.org/&quot;&gt;Zeal&lt;/a&gt; es una gran utilidad que nos permite tener a mano una gran cantidad de documentación de distintos lenguajes y/o frameworks de los más utilizados de forma &lt;em&gt;offline&lt;/em&gt;. Esto nos da la posibilidad de consultar documentación cuando no tenemos conexión a internet, contamos con una lenta conexión o un plan de datos limitado.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.fastimage.net/images/2018/01/05/Screenshot_20180105_201117.png&quot; alt=&quot;Zeal&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Esta utilidad la vengo utilizando con regularidad por la simple comodidad de ni tener que buscar la página online de la documentación sobre lo que esté trabajando, permitiéndome simplemente abrir Zeal con un atajo de teclado (Super + z, en mi caso) y buscar lo necesario. Sin lugar a dudas pasó a ser de gran ayuda al querer adelantar trabajo mientras estoy en algún viaje de colectivo de larga distancia donde por tramos ni tenemos conexión 3g (ni 2g, ni Edge :P).&lt;/p&gt;

&lt;p&gt;Los Sets de documentación son obtenidos gracias a otra utilidad llamada &lt;a href=&quot;https://kapeli.com/dash&quot;&gt;Dash&lt;/a&gt; (en la cual está inspirada Zeal misma) que cumple similares funcionalidades pero es exclusivo del ecosistema de Apple. No tenemos la documentación de todo lo que se nos pase por la cabeza, pero hay una gran variedad y lo más utilizado de seguro lo encontramos. Y si no encontrás ese que tanto querés que todo el mundo utilice aunque por el momento seas uno de esos 100 en el mundo, hay &lt;a href=&quot;https://kapeli.com/docsets&quot;&gt;formas de poder generar y aportar los &lt;em&gt;docsets&lt;/em&gt;&lt;/a&gt; necesarios para que tanto los usuarios de Dash como de Zeal los tengan a su disposición.&lt;/p&gt;

&lt;p&gt;Se la recomiendo a todo desarrollador para tener a mano la documentación de ese último nuevo &lt;em&gt;framework&lt;/em&gt; en el que tocó trabajar.&lt;/p&gt;
</description>
        <pubDate>Fri, 05 Jan 2018 19:52:07 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2018/01/05/zeal-documentacin-offline.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2018/01/05/zeal-documentacin-offline.html</guid>
        
        
      </item>
    
      <item>
        <title>[Workaround] Little Racers Streets crash on linux</title>
        <description>&lt;p&gt;Al querer iniciar el juego &lt;a href=&quot;http://store.steampowered.com/app/262690/Little_Racers_STREET/&quot;&gt;Little Racers Streets&lt;/a&gt; desde Steam (que por cierto es muy divertido), me tiraba un error similar a esto &lt;code class=&quot;highlighter-rouge&quot;&gt;An error ocurred: An exception was thrown by the type initializer for System.Drawing.GDIPlus&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Encontré la solución &lt;a href=&quot;https://steamcommunity.com/app/262690/discussions/0/358416600605446480/?ctp=4#c1291816569120425810&quot;&gt;acá&lt;/a&gt;, usando ArchLinux hacemos los siguiente:&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 class=&quot;nb&quot;&gt;sudo &lt;/span&gt;pacman &lt;span class=&quot;nt&quot;&gt;-S&lt;/span&gt; sdl2_mixer
  &lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/.local/share/Steam/steamapps/common/Little Racers STREET/lib64&quot;&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; ../bak64/
  &lt;span class=&quot;nb&quot;&gt;mv &lt;/span&gt;libSDL2_mixer-2.0.so.0 ../bak64/
  &lt;span class=&quot;nb&quot;&gt;ln&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; /usr/lib/libSDL2_mixer-2.0.so.0 ./&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</description>
        <pubDate>Fri, 15 Sep 2017 15:46:32 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2017/09/15/little-racers-streets-fix.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2017/09/15/little-racers-streets-fix.html</guid>
        
        
      </item>
    
      <item>
        <title>[Workaround] Pantalla negra al iniciar aplicación hecha en Unity</title>
        <description>&lt;p&gt;Este problema me aparece con varios juegos hechos sobre &lt;a href=&quot;https://unity3d.com/&quot;&gt;Unity3d&lt;/a&gt;. Básicamente al iniciar en &lt;em&gt;fullscreen&lt;/em&gt; la pantalla queda totalmente negra, en algunos casos se puede escuchar el audio dando a notar que de todas formas está iniciando.&lt;/p&gt;

&lt;p&gt;Como &lt;em&gt;workaround&lt;/em&gt; sobre este problema se puede hacer lo siguiente:&lt;/p&gt;

&lt;p&gt;Primero localizamos la carpeta con las configuraciones de Unity sobre la aplicación que queremos arreglar, deberíamos encontrarla en &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.config/unity3d/app-que-buscamos&lt;/code&gt;. En esta carpeta deberíamos encontrar un archivo llamado &lt;code class=&quot;highlighter-rouge&quot;&gt;prefs&lt;/code&gt;. Entonces con el ejemplo anterior, la ruta sería &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.config/unity3d/app-que-buscamos/prefs&lt;/code&gt;. El contenido de dicho archivo tendría que ser similar a esto:&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;  &amp;lt;unity_prefs &lt;span class=&quot;nv&quot;&gt;version_major&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;version_minor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Screenmanager Is Fullscreen mode&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;int&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;1&amp;lt;/pref&amp;gt;
    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Screenmanager Resolution Height&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;int&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;1080&amp;lt;/pref&amp;gt;
    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Screenmanager Resolution Width&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;int&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;1920&amp;lt;/pref&amp;gt;
    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;UnityGraphicsQuality&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;int&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;3&amp;lt;/pref&amp;gt;
    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;UnitySelectMonitor&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;int&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;0&amp;lt;/pref&amp;gt;
    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;unity.cloud_userid&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;string&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; ... &amp;lt;/pref&amp;gt;
    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;unity.player_session_background_time&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;string&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; ... &amp;lt;/pref&amp;gt;
    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;unity.player_session_elapsed_time&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;string&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; ... &amp;lt;/pref&amp;gt;
    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;unity.player_sessionid&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;string&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; ... &amp;lt;/pref&amp;gt;
  &amp;lt;/unity_prefs&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Recomendado hacer un copia del archivo, en mi caso hago la copia en la misma carpeta llamándolo &lt;code class=&quot;highlighter-rouge&quot;&gt;prefs.bkp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Lo que nos interesa modificar (sobre el archivo original) es la línea de &lt;code class=&quot;highlighter-rouge&quot;&gt;Fullscreen mode&lt;/code&gt;, poniéndole como valor &lt;code class=&quot;highlighter-rouge&quot;&gt;0&lt;/code&gt;:&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;    &amp;lt;pref &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Screenmanager Is Fullscreen mode&quot;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;int&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;0&amp;lt;/pref&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Una vez modificado y guardado, procedemos a abrir la aplicación.&lt;/p&gt;

&lt;p&gt;De forma opcional, podemos modificar los valores de &lt;code class=&quot;highlighter-rouge&quot;&gt;Resolution Height&lt;/code&gt; y &lt;code class=&quot;highlighter-rouge&quot;&gt;Resolution Width&lt;/code&gt; para que coincidan con la resolución de nuestro monitor. Por ejemplo si tenemos una pantalla fullHD, los valores serían 1080 y 1920 respectivamente.&lt;/p&gt;

&lt;p&gt;Es muy probable que al cerrar e iniciar nuevamente la aplicación, estos valores que modificamos sean sobrescritos automáticamente. Tendríamos que volver a modificar nuevamente siguiendo los mismos pasos o podemos poner el archivo &lt;code class=&quot;highlighter-rouge&quot;&gt;prefs&lt;/code&gt; en modo de sólo lectura, esto último lo podemos lograr haciendo uso de chattr como les explico en &lt;a href=&quot;http://cravacuore.com.ar/blog/2017/09/12/chattr-archivo-no-editable-read-only.html&quot;&gt;este otro &lt;em&gt;post&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 14 Sep 2017 16:15:58 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2017/09/14/workaround-unity-blank-screen-at-start.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2017/09/14/workaround-unity-blank-screen-at-start.html</guid>
        
        
      </item>
    
      <item>
        <title>[Javascript] Toggle Icon Class - cambiar ícono con click sobre botón</title>
        <description>&lt;p&gt;Buscando una manera simple de cambiar un ícono por otro al hacer click sobre un botón, haciendo uso Javascript solamente (sin JQuery). Encontré sobre &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/classList#Methods&quot;&gt;classList&lt;/a&gt;, en particular &lt;code class=&quot;highlighter-rouge&quot;&gt;classList.toggle&lt;/code&gt; que justamente nos permite agregar o quitar una propiedad de un elemento.&lt;/p&gt;

&lt;p&gt;En este caso estaba jugando para cambiar un ícono de &lt;a href=&quot;http://fontawesome.io/&quot;&gt;FontAwesome&lt;/a&gt; de &lt;em&gt;Play/Pause&lt;/em&gt; en esta &lt;a href=&quot;http://cravacuore.com.ar/music&quot;&gt;sección&lt;/a&gt; de mi página.&lt;/p&gt;

&lt;p&gt;Entonces simplemente encontrando mi elemento y usando &lt;em&gt;toggle&lt;/em&gt; pude quitar la clase de “play” y agregar la clase de “pause”.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;icon&lt;/span&gt; &lt;span class=&quot;o&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;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'icon'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;icon&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;classList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;toggle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'fa-pause'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;icon&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;classList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;toggle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'fa-play'&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;Como quiero que esto ocurra cuando hago click, lo agrego como evento de &lt;em&gt;click&lt;/em&gt; al botón.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&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;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'play-button'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'click'&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;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;icon&lt;/span&gt; &lt;span class=&quot;o&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;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'icon'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;icon&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;classList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;toggle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'fa-pause'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;icon&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;classList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;toggle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'fa-play'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&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;Pueden ver los cambios completos hechos en este &lt;a href=&quot;https://github.com/cravacuore/cravacuore.github.io/commit/fb05c94ccab030ac6cd0de6d6bd825e9df1f5062&quot;&gt;&lt;em&gt;commit&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 13 Sep 2017 01:31:09 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2017/09/13/toggle-icon-class-plain-javascript.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2017/09/13/toggle-icon-class-plain-javascript.html</guid>
        
        
      </item>
    
      <item>
        <title>Chattr - Archivo No Editable (Read-only)</title>
        <description>&lt;p&gt;Si se quiere &lt;em&gt;settear&lt;/em&gt; un archivo como &lt;em&gt;read-only&lt;/em&gt;, para que este no pueda ser modificado. Se puede hacer uso de &lt;code class=&quot;highlighter-rouge&quot;&gt;chattr&lt;/code&gt; de la siguiente manera:&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 class=&quot;c&quot;&gt;# chattr +i /path/to/file&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Y para revertirlo:&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 class=&quot;c&quot;&gt;# chattr -i /path/to/file&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Muy útil cuando cambiamos alguna &lt;em&gt;setting&lt;/em&gt; de un programa y queremos que quede de forma permanente sin que sea sobrescrita por el programa mismo.&lt;/p&gt;
</description>
        <pubDate>Tue, 12 Sep 2017 09:31:52 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2017/09/12/chattr-archivo-no-editable-read-only.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2017/09/12/chattr-archivo-no-editable-read-only.html</guid>
        
        
      </item>
    
      <item>
        <title>[Workaround] Problema de líneas horizontales en Konsole</title>
        <description>&lt;p&gt;En la consola de plasma &lt;a href=&quot;https://www.kde.org/applications/system/konsole/&quot;&gt;Konsole&lt;/a&gt;, tuve un problema durante bastante tiempo y no le dí mayor importancia hasta que me decidí por arreglarlo.&lt;/p&gt;

&lt;p&gt;El problema es que al escribir, mover el cursor o seleccionar texto en la consola me aparecían líneas horizontales a lo largo de la terminal que aparecían y desaparecían. Pensé que era cuestión de la fuente, o el &lt;em&gt;theme&lt;/em&gt; que estaba usando.&lt;/p&gt;

&lt;p&gt;Resulta que es un &lt;a href=&quot;https://bugs.kde.org/show_bug.cgi?id=373232&quot;&gt;bug&lt;/a&gt; de Konsole que tiene con el escalado de la &lt;em&gt;UI&lt;/em&gt; en Plasma. De modo que si modifica el escalado en Plasma, surge este problema. Yo había modificado el escalado a ‘1.1’ al empezar a utilizar Plasma en mi notebook.&lt;/p&gt;

&lt;p&gt;Como &lt;em&gt;workaround&lt;/em&gt; se puede poner el escalado por &lt;em&gt;default&lt;/em&gt; en &lt;strong&gt;1&lt;/strong&gt;. Para esto vamos a ‘Displays’ buscamos ‘Scale display’ y cambiamos el valor a ‘1’. Aplicamos los cambios, y reiniciamos ‘X’ o el sistema por completo.&lt;/p&gt;
</description>
        <pubDate>Mon, 11 Sep 2017 19:16:08 -0300</pubDate>
        <link>http://cravacuore.com.ar/blog/2017/09/11/konsole-horizontal-lines-problem.html</link>
        <guid isPermaLink="true">http://cravacuore.com.ar/blog/2017/09/11/konsole-horizontal-lines-problem.html</guid>
        
        
      </item>
    
  </channel>
</rss>
