giovedì 20 gennaio 2011

Wake on lan con Ubuntu

Certe volte può essere necessario accendere da remoto un pc collegato alla nostra rete LAN. Per fare ciò è necessario anzitutto abilitare il pc che vogliamo accendere a fare il boot qualora esso riceva un particolare segnale sull'interfaccia di rete.
Entriamo quindi nel bios e cerchiamo qualcosa di simile a: "Remote wake up", oppure "Wake on lan" e abilitiamolo come mostrato nell'immagine che segue.
A questo punto è necessario conoscere il MAC address (indirizzo fisico) dell'interfaccia di rete del pc che vogliamo accendere. Se il pc in questione ha ubuntu, possiamo reperire tale dato con il comando:
ifconfig
Generalmente l'interfaccia che ci interessa ha come nome eth0 e l'indirizzo MAC è quello presente alla voce "HWaddr". Se invece stiamo usando window$, possiamo dare da terminale il comando:
ipconfig /all
Il dato che ci interessa è sotto la voce "Indirizzo fisico".
Segnamoci il dato e passiamo ora ad Ubuntu.
Installiamo il pacchetto wakeonlan a meno che non sia già installato con il comando:
sudo apt-get install wakeonlan
Fatto ciò sempre da terminale diamo il comando:
wakeonlan 11:22:33:44:55:66
dove ovviamente 11:22:33:44:55:66 sarà l'indirizzo MAC del pc che intendiamo accendere e il gioco è fatto. La risposta del programma sarà la seguente:
Sending magic packet to 255.255.255.255:9 with 11:22:33:44:55:66
e vedremo come per magia il pc accendersi automaticamente.

martedì 18 gennaio 2011

Traduzione in italiano della label "Algorithm" in LyX

Durante la stesura di un documento in LyX, sia essa una semplice relazione, oppure una tesi, può capitare di dovere inserire il listato di un programma. Per fare questo si seleziona il menu Inserisci > Oggetti flottanti > Algoritmo. Dall'interno della nuova area creata, selezioniamo quindi la voce listato di programma dal menu Inserisci e si procede alla scrittura del codice che ci interessa e dell'eventuale didascalia.
Procedendo poi con la compilazione, scopriamo l'amara sorpresa: nel file .pdf generato, la label è in inglese!
Listato di esempio con label in inglese.
La soluzione del problema è più semplice di quanto si possa pensare. Andiamo nel menu Documento > Impostazioni e nella nuova finestra selezioniamo dalla parte sinistra la voce Preambolo di LaTeX. Nella parte destra della finestra possiamo inserire il nostro preambolo LaTeX personalizzato. Inseriamo quindi il seguente codice:
\usepackage{algorithmic}
\floatname{algorithm}{Listato}
In questo caso ho scelto di sostituire la parola "Algorithm" con "Listato" perchè la ritenevo più adeguata alla trattazione del documento che stavo scrivendo. Naturalmente la scelta è del tutto soggettiva ed è sufficiente modificare il contenuto dell'ultima coppia di parentesi graffe per adattare l'output di LyX alle proprie necessità.
La soluzione al problema della label.
Facciamo quindi click su Applica e poi su Chiudi. A questo punto proviamo a compilare nuovamente il file e a generare il pdf per verificare il risultato ottenuto.
Listato corretto con label in italiano.
Il problema è causato dal fatto che la traduzione in italiano di LyX non è completa al 100%. In ogni caso, per tradurre anche altre label che si comportano allo stesso modo (Teorema, Lemma, ecc...), il tipo di approccio da adottare è sempre lo stesso.

martedì 14 dicembre 2010

How to send a dinamically generated file in a Rails 3 application

Sometimes can be useful to send a file to the user instead of rendering a page. When you have a fixed location for the file you simply achieve this with a link to the file inside the view, but there may be some cases in wich you have to dinamically generate the file to send. To do this you have to add a new custom action to the controller in wich you want to add the download.
In this example I suppose to have a simple blog application where the user can download the content of a post in text format. So, in the posts controller we add the following action:
class PostsController < ApplicationController

...

def download
  @post = Post.find(params[:id])
  send_data @post.body, :filename => @post.title
end

...

end
After this we have to add a new line into our config/routes.rb file to make this action accessible with a get request:
...
resources :posts do
  member do
    get 'download'
  end
end
...
Now we can add a simple link in our view:
<%= link_to 'Download', download_post_path(@post), :title => 'Download post' %>
Here we suppose to have the instance variable @post created somewhere (i.e. in the show action).
Now we can display our page and download the post as a text file.
Hope this helps, have fun with Ruby on Rails!

mercoledì 17 novembre 2010

PUF: a wget-like url fetcher

PUF stands for parallel url fetcher is a beautyful download tool for UNIX-like systems. It is similar to GNU wget, but with puf you have the ability to download many files in parallel. To install it on Debian-based linux (like Ubuntu) simply type to the command line:
sudo apt-get install puf
The usage is very simple. For example, to download many files in parallel, you should type:
puf file1 file2 file3
and so on...
More info: http://sourceforge.net/projects/puf/ or simply by typing from the terminal:
man puf

Enjoy!

giovedì 11 novembre 2010

Case insensitive uniqueness validation in rails 3

The default uniqueness validation (using sexy validations) in Rails 3 is case sensitive. This means that if you wrote the following class, with the following validation:
Class User < ActiveRecord::Base

  validates :username, :presence => true, :uniqueness => true

end
these usernames will pass the validation and will be stored in the database:
foo, Foo, fOo, fOO, ...
To avoid this problem you should make a change to the previous model in order to make the uniqueness validation case insensitive. To acheive this you have to pass an hash of parameters to the uniqueness validator. The new code may look like this:
Class User < ActiveRecord::Base

  validates :username, :presence => true, :uniqueness => {:case_sensitive => false}

end
Hope this helps :)