Ubuntu: how to use a local mirror when performing a release upgrade

If you use Ubuntu, you are surely familiar with the Release upgrades. As Ubuntu gets a new version every six months, it is probable that you had to upgrade at least once.

Where I work we manage several Ubuntu machines and we decided to set up a local mirror for the updates. The mirror is synchronized daily with the official Ubuntu repositories so we always have the fresh packages at home.

When doing a release upgrade however, Ubuntu does by default not use the local mirror, relying on the official Ubuntu repository archive.ubuntu.com.

If you want to use your local mirror that already has all the needed packages for the version of Ubuntu you want to upgrade to, you have to set an environment variable to tell that it is OK to use third-party repositories. The following command will do just that:


note that the spelling is correct as it is (UPRADER).

When you issue the do-release-upgrade command, the new packages will be downloaded from you local repository and your upgrade will hopefully be much faster than usual.

Please note that you local repository should have all needed packages. An example of configuration (mirror.list) is the following. It is set to synchronize again the Ubuntu mirror provided bu the TU Dresden, Germany:

# Ubuntu Wily (15.10)
deb http://ubuntu.mirror.tudos.de/ubuntu wily main restricted universe multiverse
deb http://ubuntu.mirror.tudos.de/ubuntu wily-security main restricted universe multiverse
deb http://ubuntu.mirror.tudos.de/ubuntu wily-updates main restricted universe multiverse
deb http://ubuntu.mirror.tudos.de/ubuntu wily-proposed main restricted universe multiverse
deb http://ubuntu.mirror.tudos.de/ubuntu wily-backports main restricted universe multiverse

deb-i386 http://ubuntu.mirror.tudos.de/ubuntu wily main restricted universe multiverse
deb-i386 http://ubuntu.mirror.tudos.de/ubuntu wily-security main restricted universe multiverse
deb-i386 http://ubuntu.mirror.tudos.de/ubuntu wily-updates main restricted universe multiverse
deb-i386 http://ubuntu.mirror.tudos.de/ubuntu wily-proposed main restricted universe multiverse
deb-i386 http://ubuntu.mirror.tudos.de/ubuntu wily-backports main restricted universe multiverse

deb-src http://ubuntu.mirror.tudos.de/ubuntu wily main restricted universe multiverse
deb-src http://ubuntu.mirror.tudos.de/ubuntu wily-security main restricted universe multiverse
deb-src http://ubuntu.mirror.tudos.de/ubuntu wily-updates main restricted universe multiverse
deb-src http://ubuntu.mirror.tudos.de/ubuntu wily-proposed main restricted universe multiverse
deb-src http://ubuntu.mirror.tudos.de/ubuntu wily-backports main restricted universe multiverse

Good luck with your Ubuntu upgrade!

Ubuntu: how to use a local mirror when performing a release upgrade

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.

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.

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):


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