Expresiones regulares en Atom

Desde luego que esto daría para una entrada extensa, con pelos y señales de cómo funcionan, pero ni yo mismo todavía lo entiendo del todo. Pero al menos quiero enseñaros un poco cómo funcionan en un caso concreto donde yo las he usado, que nunca viene nada mal.

Donde son realmente útiles es en la función de buscar y reemplazar de Atom. Para abrirlo con un atajo de teclado deberemos pulsar Ctrl+F, y para activarlo debemos ir a la derecha de la ventana que nos aparece y pulsar el botón “.*”, que activará las expresiones regulares en ambos campos de buscar y reemplazar.

Detalle de la ventana de buscar y reemplazar de Atom
Detalle de la ventana de buscar y reemplazar de Atom

Con ellas podemos hacer cosas bastante complejas. Por ejemplo, un caso práctico: En un documento, buscar todas las palabras que estén entre comillas simples y cambiarlas por comillas dobles. Para casos normales, podríamos aplicar simplemente la sustitución del carácter ‘ por el de “, pero si tenemos comentarios donde utilizamos esa comilla simple, también nos lo comvertirá a comilla doble.

Es importante tener dos conceptos claros. En el cuadro de búsqueda, tendremos que poner una expresión regular que encaje con lo que queremos encontrar o seleccionar, y en el cuadro de reemplazar, tendremos que poner exactamente la cadena que lo reemplaza utilizando una variable.

Siguiendo con el ejemplo mencionado anteriormente, vamos a crear la expresión regular que cambie las comillas simples por otras dobles.

En el cuadro de búsqueda pondremos entre dos comillas simples nuestra expresión regular (\w.*), que quiere decir buscar cualquier número de palabras. En el cuadro de reemplazar, pondremos la variable que hemos encontrado ($1) entre comillas dobles, consiguiendo así reemplazar lo que queremos.

Ventana de RegExp en Atom
Ventana de RegExp en Atom

En general, la sintaxis que se sigue para estas expresiones regulares es la de Javascript, por lo que si necesitáis un uso más concreto, podéis consultar esta documentación.

Instalar impresora Brother MFC J480DW en ArchLinux

Hace no mucho tiempo me hice con una impresora Brother, un poco ya cansado del precio excesivo que tenían tienen los cartuchos de las impresoras HP. Sin embargo, si alguna vez habéis tenido una impresora de esta última marca os habréis fijado que prácticamente no hay que hacer nada, en Linux es todo bastante sencillo, e incluso existe la herramienta hplip, que provee de una interfaz gráfica para administrar (de mejor o peor manera) la impresora.

Brother por su parte no tiene un soporte tan bien trabajado, o al menos, no es todo tan sencillo como en HP. Pero siguiendo todo paso a paso veremos que conseguiremos tener nuestra impresora imprimiendo en un periquete. Continuar leyendo “Instalar impresora Brother MFC J480DW en ArchLinux”

Configurando temas y fuentes en Atom Editor

Lo prometido es deuda, (aunque sea más de un año tarde) así que aquí tenemos la continuación de la serie de Atom. De momento trataremos cosas como la personalización con temas y fuentes. Así dejo cosas que contar para más adelante…

Instalando temas

Hay que reconocerlo. Antes de llegar a la versión 1.0 la interfaz por defecto de Atom era francamente horrible. El tema por defecto Atom fue sustituido por uno más moderno y flat: One. Este es bastante más agradable a la vista. Tenemos una muestra del código antes y después.

Atom antes y después de la versión 1.0 y de la llegada del tema One
Atom antes y después de la versión 1.0 y de la llegada del tema One

Aún así, tenemos temas que son bastante más interesantes. Recordemos que Atom está construido con HTML, CSS y Javascript, que a priori puede parecer un impedimento en cuestiones de rendimiento (indiscutiblemente), pero ofrece ventajas bastante notables en el sentido de la personalización. A pesar de que los temas que nos propone la comunidad son excelentes, podemos mejorarlos aún más con una hoja CSS personalizada, cambiando y editando estilos a nuestro antojo.
Continuar leyendo “Configurando temas y fuentes en Atom Editor”

[Tip] Contando la magnitud de la Web semántica con SPARQL

SPARQL es un lenguaje de consulta de datos similar a SQL, pero pensado para consultas en bases de datos basadas en grafos. Estas bases de datos es común verlas en proyectos sobre los que se fundamenta la web semántica (o Web 3.0) como Wikidata o DBpedia, y almacenan información siguiendo siempre un patrón:

(sujeto, predicado, objeto)

El lenguaje SPARQL está pensado para que las secuencias que se pongan en la parte del where sea una especie de patrón que deba encajar con las tripletas que hay en el grafo. De esta forma, una de las consultas más sencillas que nos podemos plantear es precisamente la de contar cuántas tripletas hay en nuestra base de datos:

select (count(?suj) as ?tripletas)
where {
  ?suj ?pred ?obj
}

Por lo general, estos proyectos de libre conocimiento tienen disponible un endpoint al que mandar consultas para ejecutarlas. Aquí os dejo unos cuantos:

Desgraciadamente, tenemos que tener en cuenta que esta consulta es muy pesada, y algunos de estos endpoints pueden no responder nunca por timeout por no estar optimizados.

Pero en el caso de DBpedia, esta consulta parece que sí está optimizada y podemos extraer datos interesantes: En este momento, la DBpedia en español posee cerca de 170 millones de hechos. Por su parte, la DBpedia en inglés es mucho más grande y alberga casi 440 millones de tripletas.

Wikidata, o es mucho más grande (cosa que no descarto) o su sistema no está lo suficientemente optimizado como para ejecutar estas consultas tan pesadas.

 

[Tip] Crear una entrada en el GRUB manualmente

Hace poco compré un disco SSD para el portátil, con un puerto msata que es muy cómodo si la placa base del ordenador lo soporta, ya que añades capacidad de almacenamiento y no tienes que sacrificar el lector de CDs.

Bueno, el caso es que quería empezar de cero y alojar en ese disco las particiones del sistema EFI (ESP), la partición /boot para el grub, y demás. Esta vez opté por descargar Manjaro en vez de Antergos por cambiar un poco, que ya llevaba casi tres años con él instalado. El instalador Calamares está bastante guiado, y todo parecía ir bien, pero al iniciar… ¡sorpresa!, la partición EFI que había creado no era reconocida y la BIOS no encontraba con qué arrancar (salvo el USB con el que lo instalé).

Tras probar varias veces la misma rutina de instalación, empecé a buscar y finalmente opté por tocar a mano las entradas EFI del sistema y añadir una para iniciar el grub que instalaba Manjaro. El caso es que en la partición EFI sí que estaban los archivos necesarios para iniciar, pero no servía de mucho si el sistema no encontraba el fichero al que apuntar.

En estos casos, la mejor herramienta que te puedas encontrar es efibootmgr (algo así como gestor de arranque EFI). Tiene varias opciones, entre las cuales tenemos el crear una nueva entrada. El comando es el siguiente:

efibootmgr –create –disk /dev/sdb –part 1 –loader /EFI/Manjaro/grubx64.efi –label “Grub Manjaro”

NOTA: Es importante reemplazar en este comando los guiones por guiones dobles: -- y las comillas de la etiqueta, por comillas rectas: " debido a un problema de WordPress
En mi caso, el disco SSD está en la dirección /dev/sdb (importante, es el disco, no la partición EFI) y la partición EFI es la primera de ese disco. La otra parte importante es la ruta donde se encuentra el loader, que en el caso de Manjaro, se instala en /EFI/Manjaro/grubx64.efi.

El manual de efibootmgr, man efibootmgr arroja más riqueza de opciones, como por ejemplo, la de configurar el timeout, o el orden de arranque, sin necesidad de tener que entrar a configurarlo directamente en la BIOS.

Cacharreando con una impresora Brother MFC-J480DW

Quizás para este sitio, prácticamente dedicado a Linux en su totalidad, quedaría mejor un artículo de cómo instalar tu nueva impresora Brother MFC-J480DW (como ésta) y hacerla funcionar tanto con Ubuntu como con Arch, pero, francamente, no ha sido muy difícil, aunque no descarto hacer un artículo en un futuro.

Detalle de la pantalla de la impresora Brother mostrando un mensaje de tinta negra baja
El temido mensaje de tinta baja…

Indagando un poco acerca de la capacidad de los cartuchos de tinta y con previsiones de hacer una predicción de cuándo se podrían acabar los cartuchos de tinta para estar preparado y comprar otros, he estado buscando si es posible saber el número de páginas que lleva impresas la impresora. Y, sorprendentemente, lo he encontrado.

En cuanto a la compra de los cartuchos en sí, gracias a que se trata de una impresora Brother, no es difícil encontrar cartuchos de marca blanca, como éstos. Esta es una de las ventajas de las impresoras Brother, que aunque pueden salir algo más caras, a la larga se rentabilizan, porque los cartuchos son más baratos que otras marcas como HP (por experiencia).

De hecho, la impresora no sólo informa acerca de este dato, sino que lo ofrece mucho más pormenorizadamente, sobre si son impresiones hechas desde un ordenador, o si se han producido por una operación de copia. También ofrece otro tipo de información, como el número de atascos de papel y similares, o incluso el número de horas encendidas.

Continuar leyendo “Cacharreando con una impresora Brother MFC-J480DW”

Python WTF: Entendiendo cómo funciona is

He estado echando un ojo a un post de Reddit, donde algunos comportamientos del lenguaje parecen que no son los adecuados (bug), pero que se deben en su mayoría a pequeños fallos de comprensión de la sintaxis tan propia de python.

El que os traigo aquí es el siguiente:

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False

Aparentemente vemos que hay una inconsistencia en el funcionamiento. Lo esperado es que si comparas si 256 is 256 es que te de que sí. Hasta aquí bien. El problema lo tenemos con el siguiente número: 257, donde no funciona igual.

Esto se debe a dos causas. La primera de las dos es la implementación interna de CPython, la distribución python por excelencia. Aquí, todos los enteros desde -5 hasta 256 (ambos incluidos), tienen una única instancia, por ser los enteros que más se utilizan. Sin embargo, los enteros que son mayores de 257 o menores que -5 tienen otra dirección en memoria a medida que se crean.

La segunda causa es cómo funciona realmente is. Lo que hace es comparar referencias a bajo nivel en memoria, por lo que, como hemos visto antes, los números contenidos en el intervalo [-5, 256] tendrán la misma dirección en memoria y darán True en la comparación.

Como dato curioso, si intentamos lo mismo en pypy, una implementación de Python optimizada para cálculos numéricos, nos funcionará para todos los enteros.

Para concluir, lo mejor que podemos utilizar para comparar en python es el operador ==, que éste sí que tiene el comportamiento esperado en todos los casos. Si queremos ir más en modo hardcore utilizando las referencias a memoria con cuidado, entonces utilizaremos is.

Fuente | Reddit

Atom editor: Introducción e Instalación

Emacs vs Vim, la eterna batalla de los editores, a la que, bajo mi opinión, le ha salido un serio y potente competidor, y apoyado nada más ni nada menos que por los creadores de Github. Sí, es cierto, los dos primeros son prácticamente los únicos (nano y ed no cuentan) para usar a través de una terminal. Pero salvo contadas ocasiones, la terminal no se suele utilizar.

A cambio, Atom (que así se llama el editor en cuestión) nos ofrece una interfaz bastante más amigable que vim (eso es fácil) y que Emacs. Nos recuerda bastante a la del editor Sublime Text del que probablemente habrán copiado bastantes cosas, salvo la de ser código libre. Hablando de código fuente, está escrito en Coffeescript, y reconozco que en este punto probablemente pierde con prácticamente cualquier otro editor, pues tarda bastante en iniciarse y en cargar algún que otro plugin.

Siendo Javascript el mayor de sus lastres en lo que a rendimiento se refiere, es la mayor de las ventajas cuando hablamos de la comunidad. Actualmente, todo el ecosistema Node.js es el que más ha crecido en los últimos años y muchos desarrolladores Javascript lo han tomado como su editor de referencia y han creado muchos plugins.

Según a quién se pregunte, opinará que Atom es un editor de texto hipervitaminado y habrá otros que te digan que es un IDE sencillito. Lo que está claro es que no estamos ante un Gedit ni frente a un IDE como IntelliJ IDEA, sino en un punto intermedio. Para algunos se les vendrá muy grande, y para otros demasiado escasa, pero yo soy de los que creo que en el punto medio está la virtud. El hecho de que no esté pensado para nada en concreto y que se pueda usar para todo a la vez (con sus correspondientes plugins) creo que lo convierte en la herramienta que deberías tener instalada siempre.

¡Pues a instalarlo, que no se diga! La intención del tutorial es seguirlo con Linux, pero este editor es multiplataforma, así que salvo la instalación, el resto de los capítulos podrías seguirlo con cualquier otro sistema operativo como Windows o MacOS.

Nada más instalar Atom, esta es la primera pantalla que veremos
Nada más instalar Atom, esta es la primera pantalla que veremos

Para Debian/Ubuntu/LinuxMint/+derivados y Fedora/CentOS/+derivados tenemos paquetes compilados como .deb o .rpm que hacen la instalación realmente sencilla. Simplemente os recomiendo acudir a la web atom.io y descargar el último paquete disponible. Veo que estás esperando un comando para copiar y pegar…

Para .deb:

wget https://atom.io/download/deb -O atom.deb && dpkg -i atom.deb

Para .rpm:

wget https://atom.io/download/rpm -O atom.rpm && rpm -i atom.rpm

Y para arch y derivados, podremos descargarlo de los repos oficiales

pacman -S atom

A continuación veremos algunos atajos de teclado que serán muy útiles para encontrar lo que buscamos. Por ejemplo, empezemos por el más básico: Ctrl + Shift + P. Esto nos abrirá la paleta de comandos, muy utilizada en Atom: Cada extensión que instales tendrá nuevas funcionalidades, a las que podrás acceder o bien a través de la paleta de comandos, o bien con los atajos de teclado que incluya por defecto. Ojo, todos estos atajos de teclado se pueden modificar, pero eso lo dejamos para otro día.

Paleta de comandos de Atom
Paleta de comandos de Atom

Podemos abrir la ventana de configuración con Ctrl + ,, para no tener que ir hasta el menù “Edit > Preferences”. Podemos ocultar la barra de navegación lateral izquierda con Ctrl + \ (He de decir que a mí la que me ha funcionado es Ctrl + º porque para escribir el carácter de barra invertida necesito presionar también AltGr).

Dejaremos para la próxima parte nuevos plugins o funcionalidades más avanzadas. Pero para empezar, lo que vamos a intentar es quitar los menús de la parte superior. En algunos entornos donde la resolución de pantalla es limitada, disponer del máximo espacio posible es vital para estar cómodos.

Seleccionar window:toggle-menu-bar en Atom
Nuestro primer uso a la paleta de comandos!!

Para ello, abrimos la paleta de comandos (Recuerda: Ctrl + Shift + P y buscamos Window: Toggle menu bar. Cuando esté seleccionado, aceptamos con intro. Es recomendable no escribir todo el texto de arriba. Si observáis el ejemplo de arriba, sólo con poner men ya aparece la opción que deseamos.

En la siguiente entrada tendréis más información para personalizar el editor como más os guste! Hasta entonces, ¡Un saludo!