A custom datepicker tag for Grails based on jQuery-UI

When designing input forms within a Grails application it is sometimes necessary to handle dates. Grails offers a specific tag that one can use in a GSP page to handle dates: <g:datePicker />.
This tag will be rendered to the end user as different elements:

  • 3 separate select elements (days, months and years)
  • 1 hidden field (with the name specified in the tag with the fixed value “date.struct”, which is used by Grails to know that it will have to use the fields name_day, name_month and name_year to get / set the date.

In an application I was happily using this tag. However I decided it would be interesting to provide the user with a more graphic way of selecting a date. Since my application was already using JQuery and JQuery-UI, I though that JQuery-UI’s datepicker could be an intresting choice.

Grails gives developers the option to develope custom tags. In order to generate a custom tag, you have to generate a custom library.

I therefore created a custom library containing a single tag that I named <g:datepickerUI />.

You can see/download the implementation here: https://github.com/lturista/grails-datepickerUI

Just open JQueryUITagLib.groovy, optionally change the package name and put it put the in your grails-app/taglib folder. You can use the tag in your GSP pages, here is an example:

<g:datepickerUI name=”myDate” required=”true” value=”${myDomainClass?.myDate}” options=”{minDate:’-2Y’, maxDate:’+1Y’}” class=”form-control”/>

A custom datepicker tag for Grails based on jQuery-UI

Grails: How-to access the default H2 in-memory database

When you use Grails for a new project, the default DBMS (DataBase Management System) is H2. A cool characteristic of this DBMS is its capability to handle in-memory tables: it is possible to create a database living in the RAM memory.

This is usually not the desired behavior, since Databases are by nature persistent entities. However, when developing a new application, having the possibility to use an in-memory database may speed up the development process, given that the table structure may vary quite frequently.

Grails makes use of H2 in-memory tables by default. If you create a new application and define a new domain class, Grails will take care of creating a suitable table for your class.
Sometimes it is useful to actually see the tables that Grails generated for us. Assuming you are running your web server (e.g.: Apache) on localhost port 80 and that your app name is myApp, while running the application you can access the in-memory database browsing to: http://localhost/myApp/dbconsole/. It should be possible to login immediately by clicking on “Connect”. From there you will be able to see and manipulate your in-memory database.

If you wish your Grails application to use a different database, you can start here.

Grails: How-to access the default H2 in-memory database

Ubuntu: gedit creates files with tilde (~)

gedit is a very simple but great text editor for Linux. It comes already preinstalled in Ubuntu and most of users use this program almost daily.

There is an issue with gedit which may disturb some of us: it creates some strange files. If you are for example editing “text.txt”, gedit will create “text.txt~” . This file is hidden, so in most of the cases is not showed directly. To show it browse to the directory where the file is and use CTRL+H to see hidden files, or, if you are using terminal, go to the directory where the file is and use the ls command to list all the files.

This file is a backup file created by gedit. If we want the program not to create that file anymore:

  1. Open gedit
  2. Edit -> Preferences
  3. Select the “Editor” tab
  4. Uncheck “Create a security copy of the file before saving it” (I am not totally sure this is exactly the right sentence they use, but it should be quite near)

This will make gedit stop to produce those files.

Enjoy gedit! :)

Ubuntu: gedit creates files with tilde (~)

Digital Transmission: Hard and Soft decoding

Hi everybody,

I am sitting here in front of this PC studying Digital Transmission. This basically means that I am studying how information can be sent over a channel (ex: a cable) in a discrete way (basically using bits). Now I want to write a very short example about what hard and soft decoding is.

Coding
Before sending bits to the channel, they are usually somehow coded. By coding the bits we want to make it easier for the receiver to localize errors which are likely to occur during our transmission (the most easy case to understand is the additive noise added by the channel). It is actually also possible to correct some of these errors. But this is not the topic now.

Decoding
If we code, we of course have also to decode in order to get the original information back. When you read about decoding techniques you will find Hard Decoding and Soft Decoding. The idea behind these two was not clear for me until I read a nice explanation. I will try to report this explanation with my own words here on the blog.

Useful concepts: metrics
It is important to understand what Hamming Distance and Euclidean Distance mean, especially  applied to vectors. You can have a look at the following links:

The example

Imagine we want to send 1 bit of information, either 0 or 1, over a channel. To make our system more robust, we decide to use coding. We use a very simple and straight-forward coding technique: we just repeat the bit 4 times. So if the bit we have to send is 0, we will actually send 0000, and if it is 1 we will send 1111. We decide that on our cable we will have +1 V (volt) if the bit to send is 1, and -1 V if the bit to send is zero.

Ok, let’s assume we like the number one and we want therefore to send a bit with value 1.

What we will actually send on the cable (=channel) is [+1V, +1V, +1V, +1V], four impulses of +1 V (the duration of these impulses is not really crucial for this discussion).

Our channel will introduce distortions, additive noise (AWGN) and all possibile mess. At the end, what we receive is [+1.1, -0.2, -0.1, -0.1]. Now, based on this, in the receiving phase we have to decide weather we sent a 1 or a 0. here is how the two decoders will act:

  • Hard decoder: it treats all bits separately. basically the received sequence is though to [+1, -1, -1, -1] and based on this we use Hamming metric to find out which sent sequence is nearer. As we basically have more negative values than positive ones, we conclude that the sent bit was a zero;
  • Soft decoder: it does not make a decision on each bit. First it sums up all the single bit values, obtaining +0.7. After this, the decoder looks which bit is, in an Euclidean way, nearer to this value. In this case of course +1 V is nearer to 0.7 V than -1 V. We therefore conclude that the sent bit was a one.

Both decoders use a Maximum Likelihood principle. They just use different metrics.

As we can see in this small example the soft decoder is able to decode the sent bit correctlym, while the hard decoder fails. It is usually true that soft decoders have better performance than hard decoders, but they are also usually more difficult to implement in practice.

Hope this helps somebody to understand better these concepts. I think I got it right now! :)

Digital Transmission: Hard and Soft decoding

How-to: Start using LaTeX

I am right now starting to write my bachelor thesis in Telecommunication Engineering. The main topic of the thesis will be Reversible Data Hiding. But this is not the intresting news nor is the main topic of this post.

When I went to see my relator teacher he said to me “ok, you now have an argument for your thesis. How are you going to write it? For me it does not really matter, choose the system which suits more to you”. After this I started to think about which possibilities I had and after a quick research I found three ways:

- Using OpenOffice: writing as everybody probably does, through a normal WYSIWYG (what you see is what you get) editor;
– Using Lyx (http://www.lyx.org): something in between a normal text editor and pure LaTeX;
– Latex.

After carefully thinking, after looking for useful info online for several days, after some trials I decided to write it in pure Latex.

What is LaTeX
To be short, LaTeX is a markup language widely used in the scientific community. It can be regarded as something similar to HTML, where the elements of the webpage are described through tags.  For a more formal definition, have a look at Wikipedia: http://en.wikipedia.org/wiki/LaTeX

Why LaTeX
The best thing that LaTeX offers for writing a complex document like a thesis is the fact that it lets you focus on the content rather than on the visual aspect of your work. Something like HTML and CSS, if you are familiar to that. 100% distachment. This is maybe the main reason because I decided to use it for the thesis work. I have some previous experience with common Word Processors (MS Word and OpenOffice) and complex documents… I got quite pissed off when the images were floating around all the time like a fish in an aquarium.

At the beginning Lyx looked to me like a very nice alternative. It is probably a good alternative for someone who wants to start approaching the LaTeX way of writing without modifying too much his/her habits. The problem I encountered with Lyx is that I did not feel really “free” to control the document. Maybe I did not like the user interface… I do not know. But do not discard Lyx directly if you have to chose. Give it a try, it may me something for you.

How LaTeX
You need basically to understand just a concept: the document you write in LaTeX is commonly stored with the extension *.tex and needs to be compiled by a compiler in order to give you a nice PDF, DVI or PS output file. Assuming this, what you need to work with LaTeX are two things:
An Editor: you can take whichever text-editor, like for example gedit. What I suggest you to do is to use an editor which is though for writing in LaTeX as it will give you some facilities (some functions, or some code-highlight) which can help you a lot in writing your document. On Linux I personally use Kile (http://kile.sourceforge.net/) which has a nice interface and lets me compile my .tex file with an easy keyboard shortcut. I have no experience in writing in LaTeX under Windows. What I can suggest you to do is just try to search “Latex editor windows” or something like that. Try some programs, have a look into some forums, and you will quickly find a nice editor.

- The LaTeX binaries: here you have the compiler, the style sheets and so on which tell the compiler how your document should look like. For example tex-live (http://www.tug.org/texlive/, but mostly likely you can get it from a repository) for Linux and MiKTeX (http://www.miktex.org)  for Windows.

Wanna try?
LaTeX can be used to prepare slides, too! There are so many guides to LaTeX on the internet that is totally unuseful for me to write some basics about it. What I can do is to suggest you Wikibooks, which has a great guide to LaTeX which can lead you through your very first document to quite tricky issues. Start from here: http://en.wikibooks.org/wiki/LaTeX/ . You can also download the guide in PDF, very nice!

Enjoy and write a comment here about how it was to try out LaTeX!

How-to: Start using LaTeX

Multidimensional arrays in MATLAB

Today I feel like writing something about MATLAB. I am using it for some projects in the Univerisity. Among all other projects, one very important to me is related to Digital Image Processing, as it is the topic of my Bachelor Degree Thesis, which should be ready in a couple of months. Anyway, dealing with images and MATLAB means dealing with arrays. If you have an image you can import it in MATLAB using the command

imread(‘filename.tiff’); %or whatever extension your image has (jpg, bmp, gif,…)

MATLAB will create of course an array out of this but which kind of array? In case of grayscale images it is clear: the resul will just be a matrix with pixel intensities. What about if the input is an RGB image (color image)=? As each pixel is characterized by three components, RGB (Red, Green, Blue), you will get a 3D array of size height x width x 3. You can think about this array like three matrices one behind another. Maybe this image can make it clearer:

Think about this cube, but change the size to height x width x 3.

Setting / Reading the elements of multidimensional arrays

Now we will see briefly how MATLAB implements 3D (and in general, multidimensional) arrays. Let’s call our test variable a. In our pratical case with color images, the way you have to think the matrix is the following:

a = (rows, cols, channel)

where channel=1 means RED, channel=2 means GREEN and channel = 3 means BLUE.

Setting / Reading a single value in a single channel

Let’s image you want to set a single element of this 3D array. For example, in the RGB contest, you want to set the Green component of the pixel which has coordinates (3,2) to 231 (image it is a 8-bit per channel image: all the values of the matrix will be in the range 0-255):

a(3,2,2)=231;

This approach works of course for all the elements of the multidimensional matrix.

Note: If you for example take an empty variable and set: a(100,100,3)=1; , this will create a 100x100x3 matrix, full of zeros and the last element, (100,100,3), equal to one.

Setting / Reading the RGB value of a pixel

Imagine now you want to set/read not only one value of the 3D matrix, but, let’s say, the RGB value for a specific pixel. Imagine you are interested in the pixel which has coordintes (2,2). Then you have to do following:

a(2,2,:)=[100, 200, 255];

here the “:” sign means “use the vector the user is giving me in the direction “channels””. 100 is the RED, 200 is the GREEN and 255 is the BLUE component.

Setting / Reading a whole channel (color)

Another think you maybe need to do is to set a whole plane, let’s say to set the R component for the whole image. This means that you want to set the whole first plane to some values you have in a matrix, which of course has the same size as the image:

a(:,:,1)=[100 120; 200 250]; %In case of a 2×2 image

Very basic stuff, as you can see. Hope this helps somebody.

Multidimensional arrays in MATLAB

Remove old Kernels from Ubuntu

If you are reading this you have probably been using Ubuntu for a while, updating it quite regularly. You mostly likely use GRUB (www.gnu.org/software/grub/) to handle a dual boot, because on your computer you have a Dual Boot or simply you use GRUB to handle your start-up, because Ubuntu keeps old kernels and you never know if the newest one will crash your machine or work perfectly. That’s a nice feature because it brings you stability and choice, but after a while it may get useless and totally superfluous.

After a while, you can end up with many entries in your GRUB menu and you maybe dislike this situation. The solution is very simple. Here are the steps you have to follow in order to clean up you GRUB menu and remove your old kernels for your computer:

  1. Open a terminal and type uname -r. This will show you which kernel you are actually using. If you boot your system normally, like 99,9% of the users do, you will be using the newest kernel, let’s say  2.6.24-23-generic.
  2. OK, now you know that you need to keep 2.6.24-23-generic. As I mentioned above, is a good thing not to remove the last two kernels, expecially if the one you are using is very new (ex: you downloaded it today).
  3. Open Synaptic (System->Administrator-> Package Manager Synaptic). Use the search button and search for linux-image-2. This will show you all the package named linux-image-2* where * means “something”. Some of these packages will have a GREEN box at the beginning of the corresponding row, some will have a WHITE box. The green box tells you that the package on that row is installed in your system. I think you can guess alone what the white box means…
  4. Among all the installed packages, locate your current kernel, ex: 2.6.24-23-generic. This is the package you do not want to remove. As we said above, we want to keep another version. So, starting from the row of your actual kernel, go upwards and find the newest version which was installed before the actual one you are using. For example: 2.6.24-22-generic.
  5. Now you want to uninstall everything which is not 2.6.24-23-generic or 2.6.24-22-generic. So, locate all the other GREEN boxes, representing older kernels, click with the right button of your mouse on the corresponding line an select Mark for removal. The line will get very RED, telling you that it will be removed. Repeat this option for all the other old kernels you do not want to keep;
  6. Once you are done, simply click on the apply button. Synaptic will remove all the old kernels you do not need anymore, giving you some more free space on your disk and cleaning the GRUB menu. Yes, the GRUB menu should update automatically.

In case for some reason, after rebooting your system, the GRUB menu did not change, you can manually edit the configuration file. Open a terminal and type:

sudo gedit /boot/grub/menu.lst

scrolling down this file will show you your menu. It is quite intuitive so I do not explain how it looks like. Simply remove the rows referring to the OLD kernels, remembering not to remove the new ones. Once you are done, click on save and reboot your system.

This should clean up both your hard disk and your GRUB menu from old kernels you do not need anymore. Hope this helps.

Remove old Kernels from Ubuntu