Spanish Synonyms Finder for Alfred

I installed Alfred yesterday and bought the power pack to be able to use the workflows feature. I started playing with it and found out a piece of functionality that I couldn’t find: a Spanish Thesaurus. For English, I found one quickly. However, for Spanish, I was unable to find any, so I decided to build one myself.

My strategy to accomplish this:

  • Find out how to use JS (and NodeJS) inside Alfred.
  • Find a service that provides an API for Spanish (surprisingly there is none, or I couldn’t find one).
  • As there was no API, I’d have to do some web scrapping. I found an excellent page to do so https://www.sinonimosonline.com/, and I hope I am not transgressing any law by doing so. If so, please let me know…

My pseudo code looks like this:

  • Get the {query} to be searched for
  • Request the URL with the {query}
  • Parse the response
  • Get the results in an array
  • Send that to Alfred for display.

I found alfy a nice library that facilitates the creation of Alfred workflows with JS. and based my efforts from there. The documentation is straightforward on how to use it. Before alfy I used axios to make the request but moved back to alfy to reduce dependency.

The final product looks like this:

Is very simple to use. You call Alfred and then type sps (Spanish Synonym). Then you write the word you are looking for, and a series of synonyms appear. You can enter in any of them, and it will take you to the sinonimosenlinea.com page. You can type shift to see a previous as well.

The code is here: https://github.com/sindresorhus/alfy)
The packal site here: http://www.packal.org/workflow/spanish-synonyms

My first open source contribution for a while. Hope someone finds it useful.

“El Experto”

Hace algunos años se hizo popular el siguiente video, que muestra un problema muy recurrente a la hora de ejecutar proyectos, e ilustra el distanciamiento que áreas técnicas y de negocio pueden llegar a tener:

 

En software cualquier cosa se puede hacer. O casi cualquier cosa. La pregunta real no es sí una cosa puede hacerse o no, la pregunta real es si vale la pena hacerse. Esto cambia mucho el ángulo desde el cual se aborda el problema, ya que si suponemos que algo puede hacerse, dejamos de pensar en el cómo para enfocarnos más en el qué y sobre todo en el por qué.

Read more “El Experto”

Patron Adaptador – Pattern Adapter – Patrones de diseño

adaptadorEl patrón estructural que ahora vamos a analizar es muy eficaz así como sencillo. Se puede utilizar en muchos contextos y es de especialidad utilidad cuando se utilizan códigos o librerías ajenos al que estamos utilizando y sobre el que no tenemos control. Este patrón se le conoce como adaptador o adapter en inglés, aunque algunos lo llaman también wrapper, que viene siendo como envoltorio. Ambos nombres tienen bastante sentido y explican el por qué de este patrón.

Read more Patron Adaptador – Pattern Adapter – Patrones de diseño

El ejemplo del constructor

albanilHace ya algunos años lei por primera vez este texto. Quisiera poner la referencia del autor, pero no encontré quien lo pudo haber escrito,  así que si alguien me dice a quién darle el crédito, con gusto se lo daremos 🙂 Aparte de lo gracioso en sí mismo, ahora que lo leo años después, desafortunadamente es muy acertado. Digo desafortunadamente, porque tenemos que cambiar la manare de hacer proyectos de software. Urgentemente. Nuevas metodologías, nuevas herramientas, nuevos paradigmas. Actualmente el proceso de hacer software es más complicado de lo que, en mi humilde opinión, debería ser. ¿Qué piensan?

Read more El ejemplo del constructor

NTR: No Te Repitas (DRY: Don’t Repeat Yourself)

funny_hatchetHace algunos años ya me topé con el libro “Pragmatic Programmer”  de Andrew Hunt y David Thomas. Aconsejo a todos los que tengan la oportunidad que adquieran el libro y le den una buena leída. Muestra de manera clara muchas verdades que conocemos, pero que realmente pocas veces aplicamos. Algún día escribiré un post del libro. Pero hoy quiero enfocarme en el DRY Principle. A este principio se le conoce también como “single point of thruth” o “punto único de verdad”.

El principio establece que, en un entorno informático, la información no debe repetirse. Es decir, el conocimiento almacenado en un programa informático debe mantenerse en un, y sólo en un, lugar. De primas a primeras, el principio parece evidente, pero cuando investigamos algunas piezas de código, incluso las nuestras, nos damos cuenta que constantemente violamos el principio.

Read more NTR: No Te Repitas (DRY: Don’t Repeat Yourself)

Patrones estructurales (structural patterns)

spiderVimos ya los patrones creacionales más importantes. No son todos, en el futuro veremos más, pero son los más usados y los más importantes. Ahora comenzamos con una nueva fase: Los patrones estructurales. Los patrones estructurales (structural patterns) podrían llamarse patrones de relaciones, o algo parecido, porque su principal función es facilitar y mejorar las relaciones entre objetos.

En el mundo de objetos, la creación de instancias es muy importante, pero tan importante como la creación, es la manera en la que instancias de objetos se comunican entre sí. Un diseño estandarizado y bien pensado puede facilitar mucho las cosas durante el desarrollo de un sistema grande. En ocasiones nos ponemos a realizar nuestras soluciones a la medida, pero generalmente estas solucionen decaen en construcciones extrañas que serán difíciles de entender para futuros desarrolladores, e incluso para nosotros mismos una vez que dejemos de ver el código.

Read more Patrones estructurales (structural patterns)

Prototype Pattern – Patron Prototipo — Patrones de diseño

cloningYa casi terminando con los patrones creacionales, vamos a hablar hoy sobre el prototype pattern, o patrón prototipo. Como los demás patrones creacionales, este patrón sustituirá para el cliente la palabra clave new por otra forma de crear objetos. En este caso específico la creación se hará sobre objetos que son complicados de crear, que para evitar usar new  serán clonados a partir de una instancia ya existente. Afortunadamente crear objetos no crea ningún tipo de reparo moral, porque este patrón de eso se trata: de clonar, de pasar el ADN de un objeto a otro.  Es decir cada instancia del objeto se obtendrá a partir de un prototipo (sí, de ahí el nombre del patrón!). 

Read more Prototype Pattern – Patron Prototipo — Patrones de diseño

Builder Pattern, Interfaces Fluidas– Patrones de diseño

lego

El builder pattern, o patrón de construcción, es uno más de los patrones creacionales de diseño. En términos generales un builder esconde los detalles de la creación de un objeto final que se llama producto. Hay varios métodos para lograr esto, y por ello hay varias “implementaciones” de este patrón que en nada coinciden , salvo en el nombre. El clásico, usado en el GoF es un poco más complejo del que vamos a ver ahora, pero no se asusten, ya tendremos la oportunidad de aprenderlo. En esta ocasión nos vamos a enfocar en un builder que se llaman interfaces fluídas (fluid interfaces). Read more Builder Pattern, Interfaces Fluidas– Patrones de diseño

Singleton Pattern — Patrones de diseño

singletonEstamos abordando ahora un tercer patrón creacional, o de creación. El Singleton Pattern, a diferencia de los dos que ya hemos visto y los que veremos, no se encarga de la creación de objetos en sí, sino que se enfoca en la restricción en la creación de un objeto. Este patrón es ampliamente utilizado por muchos frameworks, y también es uno de los más fáciles de aprender y utilizar. 

Read more Singleton Pattern — Patrones de diseño