Notificaciones personalizadas en Linux

A veces, ocurre que tenemos que ejecutar un comando de larga duración como por ejemplo, una compilación y no queremos estar constantemente volviendo a la consola a ver si el comando terminó o no. Pues bien, existe la posibilidad de beneficiarse de las notificaciones que proporciona el paquete libnotify. Este script está probado para una distribución 12.10 de Ubuntu, entiendo que instalando el paquete indicado, funcionará en otros sistemas Linux también.
Como se ha dicho, se necesita tener instalado el paquete “libnotify-dev” y añadir la siguiente función al fichero ~/.bashrc (al final del mismo, por ejemplo):

El nombre de la función es irrelevante, se puede poner el que se desee, al igual que el icono a mostrar y el contenido de los textos.
La función se ejecuta de la siguiente forma:

El script finaliza indicando el inicio y el fin de la tarea, para tener una idea del tiempo transcurrido.

Espero que os sirva, yo lo he encontrado muy útil.

El juego de la vida

El juego de la vida es un autómata celular creado por el matemático John Horton Conway y que se hizo famoso, además de por su curioso nombre, por las connotaciones filosóficas y matemáticas que trajo consigo. Conway, trató de demostrar cómo patrones o estructuras matemáticas muy complejas en forma y comportamiento podían ser producto de la interacción de un par de reglas muy sencillas.
Se le llama “juego”, pero en realidad no hay jugadores, pues consiste en un tablero o matriz inicial sobre la cual se colorean algunas de las casillas (células vivas) y se dejan en blanco el resto (células muertas). “De la vida”, se refiere a que hay determinados patrones que producen formas que se asemejan a estructuras vivas, que se reproducen y se mueven, dando la sensación de vida.

Se entiende por célula “viva” aquellas que están coloreadas y por “muerta” aquellas que no lo están. Su estado (viva o muerta) depende del concepto de vecindad, esto es, del número de células vivas que tenga alrededor una casilla del tablero. Las reglas que rigen el comportamiento en el juego original (hay muchas variantes) son:

  • Una célula muerta con exactamente 3 células vecinas vivas “nace” (al turno siguiente estará viva).
  • Una célula viva con 2 ó 3 células vecinas vivas sigue viva, en otro caso muere o permanece muerta (por “soledad” o “superpoblación”).

Para más información sobre patrones y formas curiosas o para saber más acerca del juego y de sus variantes, recomiendo consultar la página de la Wikipedia: http://es.wikipedia.org/wiki/Juego_de_la_vida.

Para esta entrada del blog y porque nos encantan las curiosidades y “frikear”, hemos desarrollado un “juego de la vida” en JavaScript, usando la librería http://raphaeljs.com/. Podéis probarlo en el siguiente enlace :)

http://www.joliworks.com/gol/

¡Un saludo y hasta pronto!

How to make a custom spinner in Android

Hi everybody! In this post, we will try to explain how to create a custom component to be included within any Android application (code included, of course ;) ).

Sometimes we face the problem of having to design a complex component, irregularly shaped and we can not solve it simply by using a ”shape” (rectangular shape), but we have to do it by hand, carefully.

Specifically, we intend to change the appearance of an object of type Spinner to make it look as follows:

As we can see, the spinner has a rectangular form terminated in an arrow shape pointing inwards. This is all about both XML and Java, so let’s get down to work.

We will need a class that inherits the functionality of the classic Android Spinner (SintoneaSpinner), an XML file in which we can declare the attributes that will allow us to customize it (such as the size of the tail), a “layout” file to place our component and some shadow effects. We also have to set our own adapter because, surely, we will need to change the font and text color options.

The first thing is to define what we mean by Spinner, so we create a class that inherits from android.widget.Spinner.

SintoneaSpinner class:

In this class, the most important methods are the builders and the method onDraw(). The second constructor, only read the object’s properties, including two specific we have defined and that we will discuss a little further down. The key thing is the method onDraw(), which will allow us to shape and color our Spinner. Basically, what we do is connect the dots and for this we use a Paint objetct. A paint object needs a path of points (Path class) and a color gradient (Shader class). The lateral shadows are made defining parallel rects to the edges using also a Paint object.

The hardest part is done, so now it only remains to indicate where to place our Spinner in the layout and give it a style format. We have considered two new parameters in addition to their own inherited from the android.widget.Spinner class, but they could have been more (like the shadow thickness) . Let’s go:

This task involves several XML files:

  • spinner_layout.xml: specifies which components are inside the spinner. In this case have only a text box indicating the type of option selected.
  • main.xml: contains the structure of our main layout (main.xml or the file where you defined the layout). Here’s how to do the bottom shadow, using a gradient (defined in a separate file). You must enter a domain or “namespace” for the attributes, in our case “sintonea” whose schema is in the path indicated in the following code..

Reached this point, it is Java’s turn to complete the task, writing the Spinner Adapter and and initializing the Spinner object itself:

SintoneaSpinnerAdapter:

SintoneaSpinner initialization:

which is carried out in the onCreate() method of our main activity.

Änd that’s all folks! Unless you want to add new features to control over the spinner, we do not need anymore.

I hope this post has been helpful and that you have been able to understand it. We are not native english speakers, so we’re doing our best to keep this blog both in english and spanish.

All code used is an older version of our first application model that was ultimately discarded. We thank stackoverflow.com for existing in this ugly world hehe. Please check this post to get more information about how to make custom UI Android elements: http://stackoverflow.com/questions/2695646/declaring-a-custom-android-ui-element-using-xml.

Regards, see you soon here!

Welcome!

Hello and be all welcome to the JoliWorks Blog! Yes, JoliWorks, that fantastic Android team of developers eager to take on the world (hehe. ..)! With this blog we intend to share our experiences with computers, music, programmation… anything related to the computers world. We will to post some tutorials, curiosities, tricks and tips… Whatever.

For questions or suggestions, do not hesitate to write us. We are nice people! hehe.