mercoledì 9 dicembre 2009

Inserire punti di interesse nelle mappe Tom Tom

Per inserire dei punti di interesse (PDI) nella mappe del Tom Tom basta copiare i files con estensione ov2 e bmp nella cartella delle mappe.
Appariranno miracolosamente nei pdi del software.
Esistono delle utilities per creare i files ov2 da file csv, anche online
il pdi nel file csv del negozio Ikea di Milano Corsico deve avere questo formato:
"45.428305, 9.080812, ""IKEA MILANO CORSICO"""
Quindi creare pdi personalizzati aiutandosi con Google Maps è decisamente facile.

Ottenere coordinate GPS da google maps

Per ottenere le coordinate GPS di un punto trovato su google maps occorre:
fare clic con il tasto destro nel punto desiderato e scegliere "Centra la mappa qui"
incollare nella barra degli indirizzi la seguente stringa:
javascript:void(prompt('',gApplication.getMap().getCenter()));
una finestra popup mostrerà le coordinate GPS.

sabato 21 novembre 2009

Creare un plugin per XBMC parte 3


Nel caso a qualcuno possa servire, ho messo su googlecode il plugin delle dirette di Rai.tv lo si può trovare qui.
E' solo un esercizio, i canali degli streaming sono inseriti direttamente nel codice e non sono ricavati ogni volta dalla pagina web di conseguenza potrebbe non funzionare nel futuro.


lunedì 16 novembre 2009

Lotus notes e gli allegati lnk

Pratica spesso comune è quella di creare un collegamento sul desktop per un facile ritrovamento delle cartelle più utilizzate.
Alcune versioni di notes "soffrono" però, di un inconveniente fastidioso:
quando si allega un documento ad un messaggio di posta elettronica, nella finestra "Crea allegati" se si apre un collegamento ad una cartella, non si entra in questa, ma viene allegato il collegamento stesso (es. Documenti.lnk).
Per rimediare occorre inserire nel file notes.ini la seguente riga:
Shell_Links=1
e concludere il file con un ritorno a capo.
Riferimenti si possono trovare qui.

giovedì 12 novembre 2009

Il calcio è un gioco maschio

Pasquale Bruno, Montero e altri il vostro trono è conteso dalle nuove leve:
Un nuovo astro nascente, Elizabeth Lambert che gioca nel New Mexico Lobos si stava facendo strada.
Stava perchè sembra sia stata squalificata a tempo indeterminato.

giovedì 22 ottobre 2009

Chiusura di patchmate.net



Non sarà una notizia di prima mano, ma oggi mi sono accorto che il sito di patchmate.net che preparava dei cd con tutti gli aggiornamenti di Windows XP pronti per l'installazione, è stato chiuso!

mercoledì 21 ottobre 2009

Incorporare sottotitoli a video avi

Purtroppo sembra essere defunta la mia freevobox che utilizzavo per gustarmi films ed altro in tv.
Per poter seguire le mie serie preferite (Big Bang Theory, Legend of Seeker, ed altro) ho dovuto collegare un portatile alla tv, e la cosa è molto scomoda da fare in continuazione. Visto che ho un lettore DVD-Divx posso sempre farmi dei dvd (abitudine tra l'altro abbandonata) per vedere i filmati senza sbattimenti. Un problema però c'è: ho bisogno dei sottotitoli in quanto le mie serie tv preferite o non sono ancora trasmesse in Italia (Legend of the Seeker, consigliatissimo) oppure hanno un doppiaggio da far rizzare i capelli (Big Bag Theory), ed il mio lettore dvd non li supporta.
La soluzione è quella, in attesa di ripristinare la freevobox, di incorporare i sottotitoli nei file avi così da evitare continui collegamenti e scollegamenti del portatile alla tv.
Ho provato vari software, ma il più pratico e veloce mi è sembrato mencoder.
Ecco un esempio di come ottenere il risultato voluto:

mencoder -oac copy -ovc xvid -xvidencopts fixed_quant=3 -sub Legend.Of.The.Seeker.s01e13.srt -subfont-text-scale 3 -subalign 2 -o test.avi Legend.of.the.Seeker.S01E13.avi

in sintesi i parametri passati a mencoder:
-oac copy (copia il flusso audio)
-ovc xvid -xvidencopts fixed_quant=3 (converti il video in xvid con qualità da 1 a 5)
-sub file dei sottotitoli da inserire
-subfont-text-scale la dimensione dei font da 1 a 5
-subalign dove posizionare il sottotitolo 0 in alto, 1 al centro, 2 in basso
-o file di destinazione
il file sorgente

Da notare che dalle prove che ho fatto non è possibile passare -ovc copy (che avrebbe risparmiato tempo) in quanto il filmato finale non incorpora i sottotitoli.
Per alcuni, il fatto di essere un programma a linea di comando può rappresentare un limite.
Per utilizzare un programma ad interfaccia grafica si può andare su avidemux, a mio parere più lento di mencoder.
Dimenticavo, sia mencoder che avidemux sono disponibili per Linux, Mac e Windows, e qui tutto lo scibile sulle opzioni di mencoder sui sottotitoli

martedì 6 ottobre 2009

sudo: timestamp too far in the future!


D'accordo, me la meritavo: ho pasticciato un po' troppo con le date....
La mia linuxbox che uso come mediacenter collegata ad un televisore
(ha su freevo) non mi consentiva più di fare sudo.
Il messaggio era:
sudo: timestamp too far in the future .....
Non avevo creato altri utenti, si poteva accedere solo tramite ssh e solo con quell'utente.
Per fortuna non avevo disabilitato root e ho potuto fare su - per loggarmi come root.
I metodi per resettare il timestamp 'sudo -k' o 'sudo -K' funzionavano una cippa.
Da qualche parte però era segnato il timestamp di sudo, bisognava solo trovarlo.
Dopo un po' di ricerche eccolo in /var/run/sudo
Rimuovendo la directory (rm -rf /var/run/sudo/username) si tornava al familiare messaggio iniziale che si ha la prima volta usando sudo:

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

Password:

Tutto è bene ciò che finisce bene!
P.S.
L'immagine è proprio il modello di dvd player che ho sventrato per metterci il computer e collegarlo alla TV

venerdì 25 settembre 2009

XP e il refresh del contenuto di cartelle condivise

Proprio vero che non si smette mai di incontrare stranezze.
Un client xp aveva problemi con il ridisegno delle finestre con alcune cartelle condivise.
Se l'utente creava un file nella cartella condivisa questo non appariva finchè la finestra non era chiusa e riaperta. E non c'era alcun F5 che tenesse.
A quanto pare è un problema noto e Microsoft ha anche rilasciato un hotfix che però va richiesto e non è disponibile liberamente.
Fortunatamente c'è anche un altro rimedio più semplice:
  • creare una DWORD in HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoSimpleNetIDList
  • assegnarli il valore 1
  • riavviare
Magicamente il refresh delle cartella condivise funziona.

Modificare l'intervallo di tempo delle presentazioni del visualizzatore immagini e fax di Windows

Dovrò far girare una serie di foto in una conferenza con il visualizzatore immagini e fax di Windows.
Il mio naso mi dice che l'intervallo di default di rotazione delle immagini non andrà bene agli organizzatori che mi chiederanno di cambiarlo, quindi meglio portarsi avanti.
Non c'è un menu, un qualcosa per modificare le preferenze di default dall'interno del programma, mi sa che bisogna intervenire nel registro.
Una rapida ricerca con google fornisce il modo:
  • modificare una chiave di registro, la HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/ShellImageView
  • creare una DWORD di nome Timeout con base Decimale
  • inserire come valore un intervallo di tempo in millisecondi che regolerà la transizione tra un'immagine e l'altra. (10.000 = 10 secondi).
  • Confermare le modifiche
  • riavviare il sistema.

Grazie a twisterspace.blogspot.com

mercoledì 26 agosto 2009

Stampante samba e cpu al 100%

Nel caso in cui utilizzando una stampante condivisa tramite samba il client (windows) non riesca a stampare e la cpu del server schizzi al 100% senza mai scendere (neanche riavviando il daemon smbd), occorre:
eliminare il file tdb dalla cache di samba.
Nel mio caso la stampante che faceva i capricci si chiamava PDF e quindi ho eliminato
/var/cache/samba/printing/PDF.tdb

venerdì 7 agosto 2009

Capricci dhcp

Un server ubuntu non riusciva ad ottenere un ip prestabilito (da un server dhcp Windows) in base alle regole stabilite per il suo mac adddress.
Nei log del server dhcp risultava il mac address, ma l'indirizzo non era mai quello voluto.
Ho messo mano per la prima volta in vita mia al file /etc/dhclient.conf.
Inserendo la stringa:
send dhcp-client-identifier xx:xx:xx:xx:xx:xx:xx;
(dove le xx rappresentavano il mac address) il server dhcp finalmente assegnava l'ip desiderato.
Devo ammettere che dhclient.conf contiene anche altre cosette interessanti.

sabato 27 giugno 2009

Firefox ed il tasto backspace

Sono abituato ad utilizzare il tasto backspace per tornare indietro nelle pagine, ma i signori di Firefox hanno pensato bene di impostarlo per un'altra funzione.
Per impostare il tasto come piace a me occorre:
  • aprire una finestra di firefox
  • digitare nell'indirizzo about:config
  • permere il pulsante "ok so cosa sto facendo"
  • nella barra del filtro inserire back e premere invio
  • modificare con un doppio clic la voce browser.backspace_action
  • inserire il valore 0
  • chiudere la finestra.
Se non funziona immediatamente riavviare Firefox.

MacBook Pro Ubuntu: NetworkManager - wifi -dhcp

Ho installato l'ultima ubuntu (9.04) a 64 bit su un MacBook Pro, che convive allegramente con Mac OS X. Ho avuto difficoltà nell'utilizzare la scheda wireless (una Broadcom): si associava all'access point, ma non otteneva poi l'indirizzo.
Tra le varie prove che ho fatto per porre rimedio una ha funzionato: disattivare apparmor (croce e delizia di questa distribuzione).
Le soluzioni a questo punto erano due: disattivare apparmor o cercare un fix.
Una rapida ricerca ha portato al bug #342235 in cui è indicata la soluzione.
Con i permessi di root occorre:
  • modificare il file /etc/apparmor.d/sbin.dhclient3
  • posizionarsi nella sezione dove si trova "/usr/lib/NetworkManager/nm-dhcp-client.action"
  • inserire sopra a "/usr/lib/NetworkManager/nm-dhcp-client.action mr," la stringa "/var/run/dbus/system_bus_socket w,"
  • salvare e chiudere il file,
  • riavviare apparmor (/etc/init.d/apparmor restart) o riavviare il computer.
Ecco come deve apparire la sezione modificata:
/usr/lib/NetworkManager/nm-dhcp-client.action {
#include <abstractions/base>
#include <abstractions/dbus>
/var/run/dbus/system_bus_socket w,
/usr/lib/NetworkManager/nm-dhcp-client.action mr,
}
Ora la scheda wireless funziona senza problemi con NetworkManager.

mercoledì 24 giugno 2009

Formattare in fat32 da winxp

Formattare in fat32 un disco usb esterno, tramite l'interfaccia di "Gestione Computer" -> "Gestione Disco" sembra essere impossibilie. Ci viene in aiuto la console (il prompt dei comandi) alla vecchia maniera:
format (lettera unità) /FS:FAT32
es: format e: /FS:FAT32
Pur con le limitazioni di fat32, ci garantiamo la portabilità con tutti i sistemi operativi del disco esterno.
Attenzione: non formatta volumi superiori a 32 GB. Per farlo si può ricorrere a utility esterne:
Fat32Format o SwissKnife.
Se però hai a disposizione un mac o un linux (che non hanno questi limiti di capienza) l'operazione è velocissima ed il disco viene riconosciuto da XP.

giovedì 11 giugno 2009

Drivers e aggionamenti per Windows XP

Queste me le devo assolutamente segnare:

dove posso trovare una grossa collezione di drivers per windows?

Basta recarsi presso nodevice.com.

Come faccio a capire quali periferiche non sono state riconosciute?

Seguo il metodo indicato qui

Ovvero apro Gestione Periferiche, seleziono la periferica con il punto di domanda, con il tasto destro scelgo proprietà e alla voce dettagli cerco l'id ed il vendor della periferica (il vendor dovrebbe trovarsi dopo la stringa VEN e l'id del device dopo la string DEV)

Una volta ottenute le informazioni vado su pcidatabase.com e consulto il loro database.

Trovato modello e produttore, cerco di scaricare dal sito del produttore i drivers aggiornati (procedura consigliata), oppure vado sul sito di nodevice.com e li cerco lì.

(grazie a spippolazione.net)


Voglio un cd con tutti gli aggiornamenti di Windows XP ed installarli automaticamente?

La risposta l'ho trovata da tuttovolume.net.

Quei benefattori di patchmate.net preparano dei cd pronti al bisogno.

Aggiornamento: il sito è stato chiuso!

domenica 31 maggio 2009

rsync di cartelle windows su linux

Ho avuto bisogno di fare delle copie sincronizzate e periodiche di un server nt su un server linux (red hat) ed ho messo in crontab questo script:


#!/bin/sh

if df | grep -q -w /mnt/nt

then

echo "nt C$ gia' montato"

else

mount -t smbfs -o username=nt\\administrator,password=password,ro //nt/c\$ /mnt/nt &> /dev/null

echo "nt C$ montato ora"

fi

#ricontrolliamo prima di iniziare rsync

if df | grep -q -w /mnt/nt

then

echo "inizio backup "

rsync -avz --delete /mnt/nt/Program\ Files/IBM/* /home/nt/IBM/

echo "smonto le condivisioni...."

umount /mnt/nt

echo "terminato"

else

echo "errore nel montare nt C$"

fi

umount /mntnt

Particolarmente interessante è:

if df | grep -q -w (punto di mount)

che restituisce true o false a seconda che la condivisione sia montata o meno....

venerdì 22 maggio 2009

Un pulsante vale più di mille spiegazioni

Mi sono trovato più volte nella situazione di spiegare come esportare i contatti presenti nella rubrica di lotus notes in excel. Stanco di ripeterle ho googlato un po' ed ho creato un file di excel con bel un pulsante "Importa i contatti".
Nella prima riga ho inserito le intestazioni di colonna:

Title, LastName, FirstName, MiddleInitial, MailAddress, AltFullName, AltFullNameLanguage, PhoneNumber, CellPhoneNumber, HomeFAXPhoneNumber, HomeAddress, StreetAddress, City, JobTitle, OfficePhoneNumber, OfficeFAXPhoneNumber, CompanyName, OfficeStreetAddress , OfficeCity , OfficeState , OfficeZIP, State, AreaCodeFromLoc, Suffix, PhoneNumber_6, WebSite, BusinessAddress, Zip, OfficeCountry, country, Location, Spouse, Department, Children, Manager, Assistant, Birthday, FullName, Categories. 


Ho creato poi una routine in vba come segue:

Sub Importa_Rubrica_Notes()


Dim DomDir As NotesDatabase

Dim DomContacts As NotesView

Dim DomDoc As NotesDocument

Dim StrName As String

Dim myRange As Range

Dim DomSession As NotesSession

Dim StrTestDomSession As String

Set DomSession = CreateObject("Lotus.NotesSession")

DomSession.Initialize

Set DomDir = DomSession.GetDatabase("", "names.nsf")

Set DomContacts = DomDir.GetView("Contatti")

Set DomDoc = DomContacts.GetFirstDocument

Dim tot As Integer

tot = 2


While Not (DomDoc Is Nothing)

Cells(tot, 1).Value = DomDoc.GetItemValue("Title")(0)

Cells(tot, 2).Value = DomDoc.GetItemValue("LastName")(0)

Cells(tot, 3).Value = DomDoc.GetItemValue("FirstName")(0)

Cells(tot, 4).Value = DomDoc.GetItemValue("MiddleInitial")(0)

Cells(tot, 5).Value = DomDoc.GetItemValue("MailAddress")(0)

Cells(tot, 6).Value = DomDoc.GetItemValue("AltFullName")(0)

Cells(tot, 7).Value = DomDoc.GetItemValue("AltFullNameLanguage")(0)

Cells(tot, 8).Value = DomDoc.GetItemValue("PhoneNumber")(0)

Cells(tot, 9).Value = DomDoc.GetItemValue("CellPhoneNumber")(0)

Cells(tot, 10).Value = DomDoc.GetItemValue("HomeFAXPhoneNumber")(0)

Cells(tot, 11).Value = DomDoc.GetItemValue("HomeAddress")(0)

Cells(tot, 12).Value = DomDoc.GetItemValue("StreetAddress")(0)

Cells(tot, 13).Value = DomDoc.GetItemValue("City")(0)

Cells(tot, 14).Value = DomDoc.GetItemValue("JobTitle")(0)

Cells(tot, 15).Value = DomDoc.GetItemValue("OfficePhoneNumber")(0)

Cells(tot, 16).Value = DomDoc.GetItemValue("OfficeFAXPhoneNumber")(0)

Cells(tot, 17).Value = DomDoc.GetItemValue("CompanyName")(0)

Cells(tot, 18).Value = DomDoc.GetItemValue("OfficeStreetAddress ")(0)

Cells(tot, 19).Value = DomDoc.GetItemValue("OfficeCity ")(0)

Cells(tot, 20).Value = DomDoc.GetItemValue("OfficeState ")(0)

Cells(tot, 21).Value = DomDoc.GetItemValue("OfficeZIP")(0)

Cells(tot, 22).Value = DomDoc.GetItemValue("State")(0)

Cells(tot, 23).Value = DomDoc.GetItemValue("AreaCodeFromLoc")(0)

Cells(tot, 24).Value = DomDoc.GetItemValue("Suffix")(0)

Cells(tot, 25).Value = DomDoc.GetItemValue("PhoneNumber_6")(0)

Cells(tot, 26).Value = DomDoc.GetItemValue("WebSite")(0)

Cells(tot, 27).Value = DomDoc.GetItemValue("BusinessAddress")(0)

Cells(tot, 28).Value = DomDoc.GetItemValue("Zip")(0)

Cells(tot, 29).Value = DomDoc.GetItemValue("OfficeCountry")(0)

Cells(tot, 30).Value = DomDoc.GetItemValue("country")(0)

Cells(tot, 31).Value = DomDoc.GetItemValue("Location")(0)

Cells(tot, 32).Value = DomDoc.GetItemValue("Spouse")(0)

Cells(tot, 33).Value = DomDoc.GetItemValue("Department")(0)

Cells(tot, 34).Value = DomDoc.GetItemValue("Children")(0)

Cells(tot, 35).Value = DomDoc.GetItemValue("Manager")(0)

Cells(tot, 36).Value = DomDoc.GetItemValue("Assistant")(0)

Cells(tot, 37).Value = DomDoc.GetItemValue("Birthday")(0)

Cells(tot, 38).Value = DomDoc.GetItemValue("FullName")(0)

Cells(tot, 39).Value = DomDoc.GetItemValue("Categories")(0)


Set DomDoc = DomContacts.GetNextDocument(DomDoc)

tot = tot + 1

Wend


End Sub


Ho collegato la funzione al pulsante, salvato e voilà:
adesso mi basta inviare il file a chi me lo chiede....

OpenPMA e altoparlante interno


Dopo l'installazione di openPMA nel mio Archos PMA400 mi ero trovato con l'altoparlante interno disattivato. Non l'ho mai utilizzato, ma desideravo comunque fosse attivo.
Il bug era conosciuto e la soluzione è presente sul sito pointlisse.com nella sezione troubleshooting:
dopo l'aggiornamento del firmware il mixer di default è il microfono interno. Basta aprire l'applicazione Registrazione audio e cambiare la fonte di input in una qualsiasi.
La possibilità di utilizzare l'altoparlante interno ora è abilitata.

giovedì 21 maggio 2009

Vernice online

In questa foto, scattata qualche tempo fa sul lungo lago di Arona, c'è un errore......



Installazione openPMA


Da qualche anno sono un felice possessore di un Archos PMA400, un Personal Digital Assitant - Portable Media Player linux based (Linux Qtopia), hard disk 30 GB, wifi e tante altre belle cosette (un antesignano dell'iPod Touch, insomma). Ora è fuori produzione. Essendo basato su linux, naturalmente è stata creata una versione "community" che implementa e migliora il s.o. presente sul dispositivo. Ho deciso di sostituire il s.o. fornito dalla Archos con openPMA.
La procedura è stata abbastanza semplice ed indolore:
basta seguire le istruzioni contenute nell'official openPMA installation guide per installare ed integrare con le applicazioni già presenti openPMA.
Per prima è necessario scaricare ed installare il bootloader alternativo qui.
Avvenuta l'installazione del package nel PMA400 del boothack si lancia l'applicazione dal tab Impostazioni e si preme OK (è possibile anche fare il restore del bootloader ufficiale successivamente).
Si scarica e scompatta su un computer l'ultima versione di openPMA (giraffe).
Si spegne il palmare, lo si collega spento al computer tramite il cavo usb e finalmente lo si accende.
Si può procedere ora in due direzioni.
la prima, avendo sufficientemente spazio libero (6 GB):


  1. si esegue il chkdsk del disco

  2. lo si deframmenta

  3. ci si reca nella cartella System

  4. si rinomina aimage.img (il s.o.) ad esempio in aimage.archos

  5. si copiano i files aimage.img e openpma.img scaricati da opempma.org in questa cartella.
La seconda invece consiste:


  1. backup completo dei dati presenti sul palmare

  2. formattazione in fat32 del palmare

  3. si scompatta e si copia nel palmare formattato il PMA400 recovery già presente nell'archos ma comunque scaricabile dal sito di Archos

  4. ci si reca nella cartella System

  5. si rinomina aimage.img (il s.o.) ad esempio in aimage.archos

  6. si copiano i files aimage.img e openpma.img scaricati da opempma.org in questa cartella.

  7. se si vuole mantenere eventuali programmi installati precedentemente sul palmare copiare in questa cartella il file progfs.img dal backup effettuato.

Solo a questo punto si deve:


  1. smontare correttamente il PMA400 dal computer e senza staccare il cavo con una graffetta effettuare lo spegnimento del palmare agendo nell'apposito buco alla base (reset pin hole).

  2. a palmare spento scollegare il cavo usb e procedere all'accensione.
Il nuovo sistema operativo procederà quindi al processo di installazione consistente nella creazione di una partizione nascosta di 512 Mb ed al merge dei due files progfs.img e di openpma.img, contenenti le applicazioni.
Se tutto va a buon fine avremo il nostro nuovo sistema operativo funzionante.
Purtroppo, nonostante avessi 12 GB liberi, ho dovuto optare per la seconda scelta in quanto avevo sempre un errore durante la creazione della partizione nascosta. E' stato un procedimento più lungo, ma che mi ha anche consentito di fare un po' di pulizia.

Impressioni: il sistema mi sembra migliore e più stabile di quello fornito di fabbrica, ho a disposizione tramite terminale molte più funzioni e programmi, e se per qualche motivo volessi tornare indietro potrei farlo seguendo le istruzioni a ritroso della prima direzione, rinominando aimage.img in aimage.openpma e aimage.archos in aimage.img, verificando la presenza del file progfs.img (il file immagine contente le applicazioni installate di default da Archos), resettando e accendendo il palmare. Se volessi invece eliminare anche la partizione nascosta dovrei a questo punto tramite un pc eliminarla, formattare l'unità in fat32, copiare il PAM recovery, resettare e accendere il palmare.
L'unico difetto per ora ho riscontrato è stato la disattivazione dell'altoparlante interno, ma onestamente non ho ancora verificato se ci sono dei work-around.
Devo anche verificare se funziona il collegamento al televisore, la registrazione audio - video ed il telecomando.

lunedì 18 maggio 2009

Creare un plugin per XBMC parte 2


Scriviamo ora il plugin di XBMC per vedere le dirette web del sito rai.tv.

Abbiamo bisogno di:

i link degli streaming,

le icone della Rai e dei canali trasmessi,

le regex per l'estrazione degli url dai files asx.

I link degli streaming li abbiamo, le icone dei canali trasmessi le recuperiamo dal file xml scaricato (è il valore di <imageUnit name="nome canale - logo videowall" type="RaiTv RollOver Image"><image>/dl/images/nome icona.png</image>), mentre l'immagine della Rai la recuperiamo dal sorgente del sito (http://www.rai.tv/dl/RaiTV/images/logo_raitv.png).

Procediamo scaricando l'immagine della Rai nella directory del plugin rinominandola in default.tbn.

Editiamo il file default.py

nella routine CATEGORIES() inseriamo:

addDir('Rai1','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983',2,'http://www.rai.it/dl/images/1233832365974RaiUno_02.png')

addDir('Rai2','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=984',2,'http://www.rai.it/dl/images/1233832404832RaiDue02.png')

addDir('Rai3','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=986',2,'http://www.rai.it/dl/images/1233832447578RaiTre_02.png')

addDir('RaiNews24','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=1',2,'http://www.rai.it/dl/images/1233841893415RaiNews24_02.png')

addDir('RaiSport+','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4145',2,'http://www.rai.it/dl/images/1233856927849raisport_.png')

addDir('RaiStoria','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24269',2,'http://www.rai.it/dl/images/1233857018728raistoria.png')

addDir('RaiEdu','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24268',2,'http://www.rai.it/dl/images/1233837355373RaiEdu1_02.png')

ovvero aggiungi un menu directory, con il nome Rai1, imposta il link http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983, imposta il mode 2, utilizza la funzione VIDEOLINKS() per l'elaborazione della regex e la creazione del menu con il link allo streaming, utilizza questa immagine come logo.

Nella routine VIDEOLINKS(url,name) inseriamo:

req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

response = urllib2.urlopen(req)

link=response.read()

response.close()

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link)

for url in match:

addLink(name,url,'')

ovvero apri una connessione all'url specificato, modifica lo User-Agent con quello di Mozilla di Ubuntu, calcola la regex, e crea il menu con l'url ricavato e il nome passato alla funzione.

Il nostro plugin è pronto e funzionante.

Lanciamo XBMC nella sezione Video scegliamo Plugin Video e successivamente Rai.tv e godiamoci la diretta!

Per completezza ecco il sorgente completo (trattandosi di python bisogna fare attenzione all'indentazione):

import urllib,urllib2,re,xbmcplugin,xbmcgui


__scriptname__ = "XBMC Video Plugin"

__author__ = 'fabrintosh [http://fabrintosh.blogspot.com]'

__date__ = '18-05-2009'

__version__ = "r001"


def CATEGORIES():

addDir('Rai1','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983',2,'http://www.rai.it/dl/images/1233832365974RaiUno_02.png')

addDir('Rai2','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=984',2,'http://www.rai.it/dl/images/1233832404832RaiDue02.png')

addDir('Rai3','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=986',2,'http://www.rai.it/dl/images/1233832447578RaiTre_02.png')

addDir('RaiNews24','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=1',2,'http://www.rai.it/dl/images/1233841893415RaiNews24_02.png')

addDir('RaiSport+','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4145',2,'http://www.rai.it/dl/images/1233856927849raisport_.png')

addDir('RaiStoria','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24269',2,'http://www.rai.it/dl/images/1233857018728raistoria.png')

addDir('RaiEdu','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24268',2,'http://www.rai.it/dl/images/1233837355373RaiEdu1_02.png')

def INDEX(url):

req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

response = urllib2.urlopen(req)

link=response.read()

response.close()

match=re.compile('').findall(link)

for thumbnail,url,name in match:

addDir(name,url,2,thumbnail)


def VIDEOLINKS(url,name):

req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

response = urllib2.urlopen(req)

link=response.read()

response.close()

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link)

for url in match:

addLink(name,url,'')


def get_params():

param=[]

paramstring=sys.argv[2]

if len(paramstring)>=2:

params=sys.argv[2]

cleanedparams=params.replace('?','')

if (params[len(params)-1]=='/'):

params=params[0:len(params)-2]

pairsofparams=cleanedparams.split('&')

param={}

for i in range(len(pairsofparams)):

splitparams={}

splitparams=pairsofparams[i].split('=')

if (len(splitparams))==2:

param[splitparams[0]]=splitparams[1]

return param





def addLink(name,url,iconimage):

ok=True

liz=xbmcgui.ListItem(name, iconImage="DefaultVideo.png", thumbnailImage=iconimage)

liz.setInfo( type="Video", infoLabels={ "Title": name } )

ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=url,listitem=liz)

return ok



def addDir(name,url,mode,iconimage):

u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)

ok=True

liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)

liz.setInfo( type="Video", infoLabels={ "Title": name } )

ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=True)

return ok



params=get_params()

url=None

name=None

mode=None


try:

url=urllib.unquote_plus(params["url"])

except:

pass

try:

name=urllib.unquote_plus(params["name"])

except:

pass

try:

mode=int(params["mode"])

except:

pass


print "Mode: "+str(mode)

print "URL: "+str(url)

print "Name: "+str(name)


if mode==None or url==None or len(url)<1:

print ""

CATEGORIES()

elif mode==1:

print ""+url

INDEX(url)


elif mode==2:

print ""+url

VIDEOLINKS(url,name)


xbmcplugin.endOfDirectory(int(sys.argv[1]))


domenica 17 maggio 2009

Creare un plugin per XBMC parte 1


Creare un plugin per XBMC come avevo spiegato (male) è semplice. Scendiamo nel pratico:

voglio  vedere la diretta web dei canali rai con XBMC.

Dopo avere scaricato il tutorial dal sito di XBMC lo scompattiamo e creiamo una cartella dal nome Rai.tv in:

~/.xbmc/plugins/video/ (Linux)

~/Library/Application Support/XBMC/plugins/video/ (Mac)

c:\Program Files\XBMC\plugins\video\ (Windows).

copiamo il file default.py ed il file test.py presenti nel tutorial nella cartella che abbiamo creato. 

Come già indicato in numerosi post come ad esempio qui recuperiamo la lista dei link che ci occorrono.

Se non vogliamo correre rischi ed utilizzare la lista più recente, si può, spulciando il sorgente della pagina www.rai.tv, cercare la variabile channelXmlPath che ci fornirà il link del file xml che contiene gli indirizzi delle dirette (sottochiave <url> di <videoUnit name="nome del canale - full" type="RaiTv Diretta Full Video">).

Per verificare il collegamento apriamo con un editor il file test.py. 

Alla variabile url assegnamo  un link (ad esempio Rai1) http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983 e aggiungiamo dopo la riga response.close() la riga print link affinchè test.py sia così:


import urllib2,urllib,re


url='http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983'


req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3')

response = urllib2.urlopen(req)

link=response.read()

response.close()

print link

match=re.compile('Regular expression here').findall(link)

print match


Salviamo, apriamo il terminale (o il prompt dei comandi) ci rechiamo nella directory del plugin (cd ~/Library/Application Support/XBMC/plugins/video/Rai.tv)

digitiamo python test.py e vediamo cosa stampa su schermo la nostra print:

<ASX VERSION="3.0">     <ENTRY>        <REF HREF="http://www.banneradmin.rai.it/ads/siparietti/buona_visioneMed_Progautopromo.wmv" />     </ENTRY>  </ASX>

Se proviamo ad aprire con vlc il link ottenuto (http://www.banneradmin.rai.it/ads/siparietti/buona_visioneMed_Progautopromo.wmv) vedremo solo un banner di buona visione e  null'altro. Questo perchè dobbiamo anche modificare lo User Agent inviato al sito della rai utilizzando quello di Mozilla di una qualsiasi distribuzione linux:

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

Otterremo questa risposta:

<ASX VERSION="3.0">  <ENTRY><REF HREF="mms://livestream.rai.it.edgestreams.net/reflector:64084?auth=daEcyc4agdPaTcNbSaGbAdPcKb6d4aldjdV-bkecTK-b4-ElxuxHo&aifp=V001" />  </ENTRY>  </ASX>

Abbiamo ottenuto un link mms!

Per estrarre il link mms della diretta da comunicare al plugin di XBMC dobbiamo utilizzare una regex, ma prima solitamente elimino spazi, tabulatori, ritorni a capo superflui per potermi concentrare sulla espressione più agevolmente. Quindi procediamo a sostituire la riga link=response.read() con:

link = ''

for line in response.read().split( '\n' ):

    link += line.lstrip().rstrip()

link = link.replace( '\r', '' ).replace( '\t', '' ).replace( '\n', '' )

Otterremo così:

<ASX VERSION="3.0"><ENTRY><REF HREF="mms://livestream.rai.it.edgestreams.net/reflector:64084?auth=daEcfd4cgdEatbAblddaQbEb8azdhdqaVae-bkec_a-b4-FmxwxHn&aifp=V001" /></ENTRY></ASX> che è molto più leggibile.

L'espressione che fa al caso nostro è <ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX> e la inseriamo nella funzione re.compile('expr').findall(link)

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link) e estraiamo il link trovato.

if match:

for url in match:

print url + '\r'

eliminiamo le righe print link e print match. test.py dovrebbe ora avere la seguente fisionomia:


#!/usr/bin/python


import urllib2,urllib,re


url='http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983'


req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

response = urllib2.urlopen(req)

link = ''

for line in response.read().split( '\n' ):

    link += line.lstrip().rstrip()

link = link.replace( '\r', '' ).replace( '\t', '' ).replace( '\n', '' )

response.close()

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link)

if match:

for url in match:

print url + '\r'

(in grassetto le parti modificate del file test.py originale).

python test.py  stamperà sullo schermo mms://livestream.rai.it.edgestreams.net/reflector:64084?auth=daEcfd4cgdEatbAblddaQbEb8azdhdqaVae-bkec_a-b4-FmxwxHn&aifp=V001 che possiamo provare ad aprire con vlc per verificare il collegamento.

Ora che abbiamo link e regex possiamo passare alla sviluppo del plugin vero e proprio.....

XBMC ed i plugins


A casa ho due vecchi computer  che svolgono la funzione di HTPC. 

Hanno  installato Freevo che è a mio parere il migliore software HTPC open source esistente.

Freevo è scritto in python, utilizza massivamente mplayer (anche se supporta vlc e xine), gira principalmente su Linux  e  non ha particolari richieste hardware, consentendo quindi di avere un ottimo sistema di home theatre a costi contenuti.

Nel mio caso utilizzo un PIII ed un PIV.

E'  estensibile grazie a  numerosi plugins. Ne ho scritto qualcuno anch'io e uno di questi è nella distribuzione ufficiale, per la precisione quello di wwitv.  

Installare freevo sul mio MacBook con Mac OS X è una operazione fattibile anche se non semplicissima, e per ora non ho abbastanza tempo libero per farlo.

Ho provato quindi XBMC, finalmente in versione Intel e PPC, bello pronto da installare con il suo file dmg.

Le richieste hardware sono decisamente più elevate, rendendolo inutilizzabile sui due  htpc che ho in casa, ma la grafica è decisamente carina, si interfaccia agevolmente con i server UPnP (il sistema che utilizzo per condividere musica, film foto e quant'altro) e fa lui stesso da server UPnP.

E' estensibile tramite plugins, e indovinate un po' in che linguaggio? Python!

Ho provato subito a scriverne uno di prova, e sono rimasto piacevolmente colpito dalla presenza di:

un soddisfacente tutorial, una maggiore documentazione, uno scheletro di plugin con cui partire, poche routines chiare ed accessibili.

Creare un plugin video in XBMC può addirittura consistere nel trovare la giusta regex in una pagina web ed passare i risultati a  

addDir(name,url,mode,thumbnail)o addLink(name,url,tumbnail)

Quindi come spiegato nell'ottimo tutorial, inserendo in CATEGORIES() 

addDir("MOVIES","http://www.tvdash.com/movies.html",1," http://reggiebibbs.files.wordpress.com/2007/12/the-movies360-crop.jpg") 

avremo un menu di tipo cartella "Movies" il cui clic  invocherà la routine INDEX() passando come argomento l'url http://www.tvdash.com/movies.html.

Compito della funzione INDEX sarà quello di scaricare la pagina web ed applicare la regex desiderata per poi passare a addLink(name,url) i links dei video trovati, creando dei sotto menu "links" che avranno il compito di lanciare il player collegandosi all'url del video specificato.

Decisamente veloce e semplice.

sabato 16 maggio 2009

The Big Bang Theory 2

Ho visto una decina di episodi di  "The Big Bang Theory" e devo dire che lo trovo veramente carino.
Nulla a che vedere con IT Crowd, i miei miti, questi sono fisici con i cosiddetti e non hanno nulla in comune con me.
I dialoghi sono più difficili rispetto a IT Crowd e senza l'aiuto di ITASA (Italian Subs Addicted) avrei capito ben poco.
Grazie ITASA!

CAMPIONI!

Vabbè dai, l'Inter è campione d'Italia, senza neanche l'emozione di giocarsela....
Come direbbe il presidente: "simpatica squadra l'Udinese"  ;-)

sabato 2 maggio 2009

The Big Bang Theory

Sono un fan sfegatato di IT Crowduna fantastica sitcom britannica trasmessa da Channel 4, con protagonisti due "standard nerds" del reparto IT ed il loro capo (una donna a digiuno di informatica) di una grossa società inglese.
La serie non è ancora trasmessa in Italia, e vista la qualità delle sitcom trasmesse nel nostro paese non mi sorprendo neanche un po' a non trovarla da noi.
Senza ricorrere a qualche torrent si possono gustare spezzoni delle puntate presso il loro sito ufficiale, su youtube o anche su siti di fans  dove addirittura troviamo le puntate intere.
Sembra che la serie sia una risposta inglese alla serie americana The Big Bang Theory (il sito ufficiale è questo) dove i protagonisti sono invece due fisici ed una bella ragazza. 
Potevo forse farmela scappare? 
Sto quindi iniziando a gustarmi The Big Bang Theory (in originale, naturalmente)... Questa serie è stata trasmessa in Italia, ma Antonio Genna, sicuramente più esperto di me nel campo delle traduzioni, sostiene ne abbiano stravolto le voci, i caratteri ed i dialoghi, ed io ci credo. 
Vedremo se è allo stesso livello di IT Crowd.
Stay tuned

Il campi dell'Abruzzo

Continuo a non capire (o forse invece capisco) la quasi totale omogeneità delle notizie che ci giungono dall'Abruzzo, non una voce fuori dal coro, grande soddisfazione per l'efficacia ed efficienza  nella gestione da parte del governo e protezione civile del dramma.
Insomma, passato il dolore, sembra diventata una vacanza in campeggio o per i più fortunati al mare in albergo a spese del governo.
E' importante diffondere il più possibile le testimonianze che ci giungono direttamente dall'Abruzzo per rendersi conto della reale situazione e poter offrire un aiuto mirato a chi ne ha bisogno.
Testimonianze della vita quotidiana e dei bisogni si possono trovare da Miss Kappa e terremoto09.

domenica 26 aprile 2009

Primo Post

Da tempo volevo raccogliere le mie considerazioni, esperienze, il materiale utile che non sarei stato in grado di recuperare più e anche le tante cose che sto perdendo (gli anni passano e la memoria non è più quella di una volta) e che magari a qualcuno interessano ancora....
Di sicuro non riprenderò troppo notizie già pubblicate da troppe fonti, in fin dei conti non mi piace trovare troppe ripetizioni nei blog.
E' un primo tentativo di utilizzare un blog, ed ho iniziato con blogspot per poi magari passare a qualcosa di più strutturato.
Spero che questo post non lo legga nessuno ;-).... è solo un modo per iniziare.
Buon inizio!