.: HosiriS :.

Informatica e non solo

Archive for aprile 2011

Algoritmo di delineazione ECG basato su wavelet per elaborazioni in linea a 32 bit

Posted by hosiris su aprile 9, 2011

Sin dal primo delineatore per elettrocardiogramma (ECG) basato su trasformata wavelet (WT) presentato da Li et al. nel 1995, è stato dedicato un notevole sforzo di ricerca allo sfruttamento di questo metodo. La sua capacità di delineare correttamente i componenti principali della forma d’onda (onda mono o bi-fasica P, QRS, e onda mono o bi-fasica T) lo renderebbe un candidato idoneo per un’efficace elaborazione dei segnali ECG in ambito ambulatoriale. Purtroppo, le implementazioni precedenti a questo metodo risultavano computazionalmente impegnative a causa degli operatori non lineari.

Il lavoro presentato in questo articolo mostra l’utilizzo di un algoritmo basato sull’elaborazione dei dati tramite interi a 32 bit.

FONTE: www.biomedical-engineering-online.com

Posted in Ingegneria Biomedica, NewsOfTheDay | 1 Comment »

Usare Python per interrogare Google Maps

Posted by hosiris su aprile 7, 2011

Come possiamo reperire informazioni da Google Maps senza utilizzare Javascript?
La potenza di Python e di JSON ci vengono in aiuto, rendendo questa operazione molto semplice. Vogliamo creare una picola applicazione che ci fornisce i dati di un indirizzo.
Iniziamo con le librerie necessarie:

import urllib
import urllib2
import json
import pprint
import gtk

Creiamo una funzione che ci permetterà di eseguire la query alle API:

def fetch_json(query_url, params={}, headers={}):
     encoded_params = urllib.urlencode(params)
     url = query_url + encoded_params
     request = urllib2.Request(url, headers=headers)
     response = urllib2.urlopen(request)
     return (url, json.load(response))

La funzione è molto semplice da comprendere e mi sembra inutile scendere nei particolari. Adesso creiamo le variabili necessarie:

STATUS_OK = 200
QUERY_URL = 'http://maps.google.com/maps/geo?'
pp = pprint.PrettyPrinter(indent=4)
params = {
    'q': 'Roma',
    'sensor': 'false',
    'output': 'json',
    'oe': 'utf8',
    'll': '',
    'spn': '',
    'gl': '',
}

Sfruttiamo la funzione definita prima per avere le informazioni richieste:

url, response = fetch_json(self.QUERY_URL, params=params)
status_code = response['Status']['code']
if status_code != self.STATUS_OK:
    print 'Errore'
else:
    pp.pprint(response)

Il risultato sarà il seguente:

{
    u'Placemark': [ {
        u'AddressDetails': {
            u'Accuracy': 4,
            u'Country': {
                u'AdministrativeArea': {
                    u'AdministrativeAreaName': u'Lazio',
                    u'SubAdministrativeArea': {
                        u'Locality': { u'LocalityName': u'Roma'},
                        u'SubAdministrativeAreaName': u'RM'
                    }
                },
                u'CountryName': u'Italia',
                u'CountryNameCode': u'IT'
            }
        },
        u'ExtendedData': {
            u'LatLonBox': {
                u'east': 12.994561900000001,
                u'north': 42.160691900000003,
                u'south': 41.629133299999999,
                u'west': 11.9700867
            }
        },
        u'Point': {
            u'coordinates': [ 12.4823243, 41.895465600000001, 0]
        },
        u'address': u'Rome, Italy',
        u'id': u'p1'
    }],
    u'Status': { u'code': 200, u'request': u'geocode'},
    u'name': u'Roma'
}

Posted in Programmazione, Python | 2 Comments »

Problemi con aircrack

Posted by hosiris su aprile 5, 2011

Il caro Crusher in questa guida ci ha spiegato come eseguire degli attacchi per vedere se la nostra rete può essere accessibile alle persone. Con la quantità di script-kiddie che girano questa è una cosa ormai inevitabile.

Purtroppo la suite utilizzata non sempre è esente da problemi. Può capitare che aireplay restituisca il seguente errore:

mon0 is on channel -1, but the AP uses channel x

Per risolvere il problema è necessario inserire una patch. I passi sono semplici e brevi (a parte la compilazione infinita :P). Apriamo un terminale ed eseguiamo i seguenti comandi:

$ wget http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2010-10-16.tar.bz2
$ tar -jxf compat-wireless-2010-10-16.tar.bz2
$ cd compat-wireless-2010-10-16
$ wget http://patches.aircrack-ng.org/mac80211.compat08082009.wl_frag+ack_v1.patch
$ patch -p1 < mac80211.compat08082009.wl_frag+ack_v1.patch
$ wget http://patches.aircrack-ng.org/channel-negative-one-maxim.patch
$ patch ./net/wireless/chan.c channel-negative-one-maxim.patch
$ gedit scripts/update-initramfs
-- sostituire KLIB=/lib/modules/2.6.31-wl/build con KLIB=/lib/modules/$(uname -r)/build
$ make
$ sudo make install
$ sudo make unload
$ sudo reboot

Purtroppo al cambiamento del kernel dovrete rifare tutto in quanto queste modifiche non vengono replicate.
Buon divertimento

Fonte: ubuntu forum

Posted in Informatica, Linux, Ubuntu | 39 Comments »

Tips: Diagramma delle classi a partire dai sorgenti

Posted by hosiris su aprile 3, 2011

Vi è capitato mai di dover analizzare il codice scritto da altri, che magari non sanno cosa sono i commenti? A me fin troppe volte (anche perché molte delle cose che ho imparato derivano da studi sul codice) e quindi mi sono messo a cercare degli strumenti che mi aiutassero a comprendere.

Pyreverse è una piccola applicazione che prende in pasto dei programmi scritti in Python e genera il class diagram associato. Per installarlo è sufficiente dare il seguente comando:

$ sudo apt-get install pylint graphviz

Per utilizzarlo posizioniamoci nella cartella del sorgente e digitiamo:

$ pyreverse -o png - p SOMETHING project_dir/

Dopo l’elaborazione verrà generato un file immagine che ci darà le informazioni necessarie.

Posted in Programmazione, Python | 1 Comment »

Capire JSON

Posted by hosiris su aprile 1, 2011

Credo che non sia necessario spiegare cosa sia JSON, ma voglio raccogliere le tecniche di accesso a questo tipo di dato da diversi tipi di linguaggio.
Essendo derivato da javascript il metodo più semplice di accedere agli oggetti JSON è attraverso uno script js come mostrato di seguito:

var myvarJSON = { "persone":[
    {"nome":"giovanni",
     "cognome":"ruta",
     "sito":"https://hosiris.wordpress.com"},
    {"nome":"carlo",
     "cognome":"denaro",
     "sito":"http://www.grayhats.org"}
     ]
  }

Per accedere ai dati si utilizza la seguente notazione:

document.writeln(myvarJSON.persone[0].nome) // restituisce giovanni

E’ facile capire che un metodo così compatto di presentare i dati torna utilissimo in AJAX. Un esempio utilizzando jQuery potrebbe essere:

$.ajax({
  url: 'json.php',
  type: 'GET',
  dataType: 'json',
  success: function(oggetto) {
        var sito = $(oggetto).home;
        var url = $(oggetto).link;
        var aree = $(oggetto).aree;
        //...
    }
});

Adesso vediamo come generare ed interpretare questo tipo di dato utilizzando un linguaggio lato server (a cui arrivano le richieste asincrone): PHP, Python.

JSON in PHP
PHP dalle versione 5.2 viene distribuito con il supporto nativo a JSON. I metodi messi a disposizione sono 2:

  • json_encode( mixed value )
  • json_decode( string json [, bool assoc] )

Vediamo un esempio di trasferimento di dati, creiamo il file fruits.php:

<?php
$dsn = "mysql:host=localhost;dbname=[DATABASE NAME HERE]";
$username = "[USERNAME HERE]";
$password = "[PASSWORD HERE]";
$pdo = new PDO($dsn, $username, $password);
$rows = array();
if(isset($_GET['fruitName'])) {
    $stmt = $pdo->prepare("SELECT variety FROM fruit WHERE name = ? ORDER BY variety");
    $stmt->execute(array($_GET['fruitName']));
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
echo json_encode($rows);
?>

Scriviamo il codice javascript che gestirà questi dati:

function populateFruitVariety() {
    $.getJSON('/fruit-varities.php', {fruitName:$('#fruitName').val()}, function(data) {
        var select = $('#fruitVariety');
        var options = select.attr('options');
        $('option', select).remove();
        $.each(data, function(index, array) {
            options[options.length] = new Option(array['variety']);
        });
    });
}
$(document).ready(function() {
    populateFruitVariety();
    $('#fruitName').change(function() {
            populateFruitVariety();
    });
});

Python e JSON
Anche Python offre supporto al JSON, tramite una miriade di package (qui potete trovare un confronto). Io preferisco simplejson che elabora il JSON tramite le seguenti funzioni:

  • simplejson.dumps( python_object )
  • simplejson.loads( json_object )

Un possibile esempio di utilizzo è il seguente:

import simplejson, urllib
APP_ID = 'YahooAPIKey'
SEARCH_BASE = 'http://search.yahooapis.com/WebSearchService/V1/webSearch'
    
class YahooSearchError(Exception):
    pass
    
def search(query, results=20, start=1, **kwargs):
    kwargs.update({
        'appid': APP_ID,
        'query': query,
        'results': results,
        'start': start,
        'output': 'json'
    })
    url = SEARCH_BASE + '?' + urllib.urlencode(kwargs)
    result = simplejson.load(urllib.urlopen(url))
    if 'Error' in result:
        raise YahooSearchError, result['Error']
    return result['ResultSet']

Si può intuire la funzionalità del metodo: tramite Yahoo effettua delle ricerche che vengono restituite nel formato json.

Posted in Javascript, Programmazione | 1 Comment »