ago
23

GlobaLeaks, un progetto open source per l informazione “alternativa”

 

Tor - Onion LogoGlobaLeaks è un progetto open source per la realizzazione d’una piattaforma dedicata alla distribuzione delle notizie, in stile-WikiLeaks, sfruttando l’anonimato di Tor, FreeNet e le tecnologie peer-to-peer. L’intenzione è ambiziosa quanto difficile da concretizzare: GlobaLeaks non ha ancora rilasciato una singola stringa di codice.

La difficoltà maggiore di GlobaLeaks è quella di garantire l’anonimato dei contributori. La piattaforma dev’essere “blindata”, per tutelare la sicurezza di chi invia i documenti: concettualmente il progetto è impeccabile. Lo stesso schema potrebbe essere recuperato per finalità diverse dalla controinformazione. Sarà mai realizzato?

Le discussioni su GlobaLeaks nel frattempo continuano su IRC. Il progetto è l’unico di questo genere e può diventare fondamentale nel controllo dell’attività di governi e multinazionali: la piattaforma dev’essere di facile utilizzo. Essendo open source, GlobaLeaks potrà essere sfruttato dai portali esistenti: WikiLeaks, ad esempio.

Via | Seif Lotfy

GlobaLeaks, un progetto open source per l informazione “alternativa” é stato pubblicato su Ossblog.it alle 09:00 di martedì 23 agosto 2011.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
23

Linux 3.1 consuma troppo

 

TuxUltimamente lo sviluppo del Kernel Linux, almeno per gli utenti dei dispositivi portatili, non sembra proprio andare per il verso giusto. Nonostante gli sforzi profusi a partire dalla versione 2.6.38, detta anche versione delle meraviglie poichè integrava una patch in grado di incrementare sensibilmente la reattività del sistema, il progresso sembra essersi trasformato in una parziale ma costante involuzione per quanto riguarda i consumi di potenza.

Già dalla versione 2.6.38-39 e 3.0 i segnali erano chiari: il fabbisogno di potenza è cresciuto del 24% fino a raggiungere punte del 76% con Notebook che montano Intel Sandy Bridge. Secondo il test svolto da Phoronix il kernel 2.6.38 aveva un consumo medio di 13.2 Watt mentre già con la 2.6.39 il consumo ammontava a 13.9 Watt, non paghi del risultato, si raggiungono i 22.8 Watt con Linux 3.1.

Il problema è piuttosto controverso in quanto molti utenti Ubuntu 11.04 e Fedora 15 e di altre distribuzioni recenti ne sono affetti. Un altro test invece, dimostra che utilizzando un processore più obsoleto rispetto all’Intel Sandy Bridge come Intel Core i7 720Q, nelle versioni 3.0 e 3.1 non si riscontra la cosiddetta regressione di potenza.

Personalmente sono rimasto sorpreso da questa tendenza, il kernel Linux è ovviamente un progetto ad elevata complessità, ma dopo la patch delle meraviglie creata dallo sviluppatore Mike Galbraithnella 2.6.38, era sufficiente disabilitare ASPM per tornare ai consumi di potenza precedenti, ora sembra che il bug sia più insidioso e persistente.

Via | Phoronix

Linux 3.1 consuma troppo é stato pubblicato su Ossblog.it alle 10:01 di martedì 23 agosto 2011.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
22

MIUI conquista anche il Galaxy Tab 7

 

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
22

Linus Torvalds parla d Android come d un fork per il kernel di Linux

 

TuxLinus Torvalds è intervenuto a sostegno di una tesi molto particolare sul futuro d’Android nei riguardi del kernel di Linux: non è soltanto la Free Software Foundation a preoccuparsi di quanto sarà del prodotto di Google in seguito all’acquisizione di Motorola Mobility. Torvalds apre alla possibilità che torni nel ciclo di sviluppo.

Non prima di quattro anni, però: Torvalds guarda ad Android esplicitamente come a un fork di Linux, non solo per averne rimosso i driver. Greg Kroah-Hartman ha spiegato che le differenze riguardano un framebuffer completamente diverso e un sistema di sicurezza «bizzarro». Eppure, lo sviluppo parallelo potrebbe incontrarsi di nuovo.

Torvalds è sicuro che le strade d’Android e Linux si siano divise temporaneamente: la data del 2016, per il ritorno a un unico kernel, non ha delle basi precise. In ogni caso Torvalds non si preoccupa dell’esistenza di fork. E, a prescindere dai rami di sviluppo, tra quattro anni la differenza potrebbe essere pressoché inesistente.

Via | ZDNet

Linus Torvalds parla d Android come d un fork per il kernel di Linux é stato pubblicato su Ossblog.it alle 14:00 di lunedì 22 agosto 2011.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
22

Plugin utili per VIM

 

Logo VIMVim è l’editor dei sistemi unix-like per eccellenza (insieme ad Emacs). Non si può negare che Vim sia un editor potentissimo e molto versatile. La sua versatilità poggia sulla estrema personalizzazione e sulla possibilità di estenderne la funzionalità installando plugin appropriati.

Per questi ci viene in aiuto un interessante post che analizza le esigenze reali di un programmatore fornendoci un decalogo di consigli utili e tutorial per la corretta installazione. In breve, grazie a Pathogen si gestiscono i plugin mantenendo la .vim directory ordinata, Command-t facilita l’apertura dei file usando un minor numero di tasti, DelimitMate insieme a SuperTab forniscono l’autocompletamento, CloseTag invece implementa un modo intelligente per chiudere i Tag HTML.

Per quanto riguarda la sinstassi Python e lo schema colori si possono utilizzare Pyflakes e Solarized Colorscheme. E non poteva mancare, inoltre, il supporto per il controllo di versione integrato GIT con il plugin Fugitive.

La guida mi sembra chiara e abbastanza esaustiva. Personalmente io utilizzo anche TaskPaper per avere sempre a portata la lista delle cose da fare; voi di quali altri plugin non fareste a meno?

Plugin utili per VIM é stato pubblicato su Ossblog.it alle 13:00 di lunedì 22 agosto 2011.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
22

Google Chrome è passato dall utilizzo di ALSA a PulseAudio per Linux

 

PulseAudioGoogle Chrome inizia, finalmente, a supportare PulseAudio al posto di ALSA per la riproduzione dell’audio nella versione per Linux. Almeno per il momento non ci si deve aspettare nulla d’eccezionale: il percorso per sfruttare il server è ancora al primo passaggio e i limiti esplicitati da Google lo rendono temporaneamente “inutile”.

PulseAudio è la soluzione predefinita di GNOME e KDE (attraverso Phonon col backend di GStreamer) perciò la novità non dovrebbe penalizzare nessuno. Tuttavia, l’implementazione in Google Chrome prevede appena la modalità stereo, con due canali di riproduzione, e accede al server attraverso media.gyp anziché direttamente al runtime.

In termini più semplici, almeno in questa fase, l’utilizzo di ALSA resta comunque preferibile: soprattutto se si dispone di un impianto audio a più di due canali. Il supporto a PulseAudio migliorerà col tempo. Andrà ad aggiungersi alla possibilità d’eseguire applicazioni in C/C++ e al futuro con Wayland. Opzioni molto interessanti.

Via | Chromium

Google Chrome è passato dall utilizzo di ALSA a PulseAudio per Linux é stato pubblicato su Ossblog.it alle 11:00 di lunedì 22 agosto 2011.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
22

Wayland per la network transparency e la posizione di Martin Gräßlin

 

Wayland Display ServerMartin Gräßlin, responsabile dello sviluppo di KWin per KDE, è intervenuto sulla questione della network transparency con Wayland. Attualmente questa funzione, ovvero la trasmissione in chiaro delle attività del server grafico sulla rete, non è possibile: Gräßlin è convinto che sia soltanto un aspetto positivo almeno per il momento.

Implementare la network transparency su Wayland, infatti, può avvenire con modalità diverse da quelle già previste con X11: ad esempio, utilizzando D-Bus (richiesto da tutte le applicazioni più recenti) si corrompe il forwarding di X.Org. Perciò la soluzione è quella di trovare nuove tecnologie. Qt 5 potrebbe risolvere il problema.

Ancora, nulla vieta per Gräßlin d’utilizzare il supporto legacy a X11 per la network transparency delle applicazioni via Wayland. Se ne parla da vent’anni, tuttavia ne serviranno altrettanti perché le distribuzioni rimuovano del tutto il protocollo di X11: pure OS X lo prevede ancora. Il problema, insomma, è facilmente risolvibile.

Via | Martin Gräßlin

Wayland per la network transparency e la posizione di Martin Gräßlin é stato pubblicato su Ossblog.it alle 09:00 di lunedì 22 agosto 2011.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
21

GUI Miner, uno strumento open source per guadagnare fondi su BitCoin

 

BitCoinGUI Miner è un’interfaccia grafica realizzata per il PyOpenCL BitCoin Miner, un’applicazione per guadagnare crediti nella moneta virtuale di BitCoin. Sia la GUI, sia il programma sono open source (e lo è persino il sistema di BitCoin): a dispetto del nome, GUI Miner può utilizzare backend differenti da OpenCL per generare i crediti.

BitCoin è un sistema di micro-pagamenti in valuta virtuale, paragonabile a Flattr, che si basa sul concetto del peer-to-peer. Per ottenere dei crediti esistono sostanzialmente due modalità: l’acquisto con moneta corrente, oppure la generazione attraverso il “mining”, una soluzione che deve il proprio nome all’attività dei minatori.

Non è semplicissimo capire il funzionamento di BitCoin: la valuta cambia di valore un po’ come le azioni in borsa. Il mining per accumulare crediti avviene sfruttando il potere di calcolo dei processori. Oltre a OpenCL su AMD/ATI, GUI Miner supporta CUDA su nVidia: in alternativa sfrutta la CPU. Tutte le opzioni sono configurabili.

Via | MakeUseOf

GUI Miner, uno strumento open source per guadagnare fondi su BitCoin é stato pubblicato su Ossblog.it alle 17:30 di domenica 21 agosto 2011.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
20

La Free Software Foundation parla di Android per diffondere la GPLv3

 

GPLv3 - Free As In FreedomLa Free Software Foundation ha pubblicato un articolo sull’importanza di passare dalla GPLv2, rilasciata nel 1991, alla GPLv3. L’informativa cita esplicitamente il caso d’Android, nel “mirino” per l’acquisizione di Motorola Mobility da parte di Google. Tra le righe, si riaccende la polemica con Linus Torvalds sulla licenza di Linux.

Brett Smith è intervenuto per stimolare gli sviluppatori di Android ad aggiornare la licenza di rilascio delle proprie applicazioni, evitando il rischio della «terminazione», risolto nel passaggio alla GPLv3. La Free Software Foundation, infatti, non s’aspettava un tale successo della licenza e prevedeva una cessazione dei diritti.

In pratica, qualora si riscontrassero delle violazioni ai termini di rilascio, la GPLv2 autorizza un’azione legale solo nei confronti del creatore del software e non contro le terze parti responsabili della violazione. Oltre ad Android, il problema è del kernel di Linux, che ne condivide la licenza (eccetto i firmware proprietari).

Via | Free Software Foundation

La Free Software Foundation parla di Android per diffondere la GPLv3 é stato pubblicato su Ossblog.it alle 15:30 di sabato 20 agosto 2011.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
20

Android Ice Cream Sandwich Vs Apple iOS

 

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
20

Bootstrap, la via di Twitter per disegnare pagine e applicazioni web

 

TwitterBootstrap è un nuovo strumento, messo a disposizione da Twitter, per creare applicazioni e siti web con HTML5 e CSS. Distribuito sotto licenza Apache 2.0, Bootstrap sfrutta LESS: è una soluzione per ridurre all’essenziale e assegnare delle classi di riferimento ai CSS con JavaScript e Node.js. Con tanto di reset per tutti i browser.

In sostanza, Bootstrap è lo strumento utilizzato dagli sviluppatori di Twitter per creare la “nuova” interfaccia web del popolare servizio di microblogging. Grazie alla compatibilità con tutte le piattaforme e i browser, Bootstrap riduce i tempi riservati a escogitare degli hack affinché i CSS funzionino ovunque e allo stesso modo.

Twitter segue l’esempio virtuoso di Facebook, Google, ecc. aprendo i sorgenti delle soluzioni realizzate al proprio interno. Bootstrap s’aggiunge a TwUI, il framework per creare interfacce su Mac OS X, e Storm, l’alternativa ad Hadoop di BackType. Twitter spera d’estendere le funzionalità di Bootstrap col contributo della comunità.

Via | Twitter

Bootstrap, la via di Twitter per disegnare pagine e applicazioni web é stato pubblicato su Ossblog.it alle 11:30 di sabato 20 agosto 2011.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
20

MI-ONE? Roba da non credersi!

 

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
19

Il passaggio della ISS via RSS

 

Il programma che ho scritto nelle ultime ore, permette di creare dei feed RSS (quelli che si sottoscrivono solitamente per ricevere notizie da varie fonti) che ci informano del passaggo della ISS (ovvero della Stazione Spaziale Internazionale) sopra la nostra testa.
Una volta inseriti nel file i link reperibili sul sito dell ESA (Agenzia Spaziale Europea) il programma genererà i feed rss e li pubblicherà su un piccolo server web privato.
Il programma contiene molte opzioni, ed è facilmente configurabile (ho pure messo un discreto numero di
commenti stavolta :) ).
E importante (soprattutto se permettete agli altri di accedere al server web) creare una cartella adhoc dove posizionare il programma, in quanto verranno condivisi tutti i file e le cartelle presenti.
Il programma necessita della libreria BeautifulSoup.

Per qualsiasi dubbio o problema potete, come sempre, lasciarmi un commento.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright 2011 Francesco Frassinelli
#
#  This program is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
### Configurazione - Inizio
# N.B.: Tutti i tempi sono espressi in secondi
 
# Questa lista contiene tutti i link relativi alle posizioni
# Link presi da: http://esa.heavens-above.com/countries.aspx
# Per prendere un nuovo link bisogna:
#  1. Andare su http://esa.heavens-above.com/countries.aspx
#  2. Selezionare la nazione
#  3. Digitare il nome del paese
#  4. Premere  Submit 
#  5. Premere sul link del paese (solitamente il primo a sinistra)
#  6. Copiare il link  ISS  (si trova tra le previsioni a dieci giorni)
#  7. Incollare il link nella lista sottostante, similmente agli altri
urls = (
    'http://esa.heavens-above.com/PassSummary.aspx?satid=25544&lat=43.800&lng=7.650&loc=Vallecrosia&alt=53&tz=CET',
    'http://esa.heavens-above.com/PassSummary.aspx?satid=25544&lat=43.950&lng=8.133%20&loc=Marina+di+Andora&alt=0&tz=CET',
    'http://esa.heavens-above.com/PassSummary.aspx?satid=25544&lat=45.483&lng=9.367&loc=Vignate&alt=110&tz=CET',
)
 
# A chi voui fare vedere i feed?
# Impostare host su  0.0.0.0  per renderli visibili a tutti
host =  localhost 
 
# Porta del server
# Su Unix solitamente le porte minori di 1024 sono riservate
port = 1912
 
# Tempo di refresh dei feed
interval = 60*60
 
# Tempo dell auto riavvio del server in caso di problemi di rete
autoReboot = 60
 
# Le informazioni contenute in ogni elemento del feed
# Puoi utilizzare tutte le parole chiave presenti in self.keys
rssItem = (
    '  <item>
 ,
    '   <title>[%(date)s - %(start_time)s]'
        ' Magnitudine apparente: %(magnitude)s</title>
 ,
    '   <description>
 ,
          Evento di magnitude %(magnitude)s%(br)s
  ,
          Inizio previsto alle %(start_time)s 
          in direzione %(start_azimuth)s%(br)s
 ,
          Altezza massima previta alle %(max_time)s 
          in direzione %(max_azimuth)s%(br)s
 ,
          Fine prevista alle %(end_time)s 
          in direzione %(end_azimuth)s%(br)s
 ,
    '   </description>
 ,
    '   <link>%(link)s</link>
 ,
    '  </item>
 ,
)
### Configurazione - Fine
 
from BeautifulSoup import BeautifulSoup
from cgi import escape, parse_qs
from os import devnull, execl
from urllib2 import urlopen, urlparse
from SimpleHTTPServer import SimpleHTTPRequestHandler
from socket import error
from SocketServer import TCPServer
from sys import argv, executable, exit, stdout
from threading import Thread, Event
from time import localtime, sleep, strftime, strptime
 
def debug(message):
    print(   .join((strftime( [%d/%m/%y - %H:%M:%S] ), message)))
 
class UpdateFeed(Thread):
    def __init__(self, urls, interval):
        Thread.__init__(self)
        self.event = Event()
        self.urls = urls
        self.interval = interval
        self.keys = [
             magnitude ,
             start_time ,
             start_altitude ,
             start_azimuth ,
             max_time ,
             max_altitude ,
             max_azimuth ,
             end_time ,
             end_altitude ,
             end_azimuth ,
        ]
        self.tags = { br :escape('<br />')}
    def shutdown(self):
        self.event.set()
    def run(self):
        while 1:
            if self.event.isSet():
                return
            self.task()
            self.event.wait(self.interval)
    def task(self):
        for url in self.urls:
            args = parse_qs(urlparse.urlparse(url).query)
            args = dict((key, value[0]) for key, value in args.iteritems())
            name = [part.capitalize() for part in args[ loc ].split()]
            args[ loc ] =    .join(name)
            data = self.getPasses(url, args)
            if data == None:
                break
            with open( %(loc)s.xml  % args,  wb ) as feed:
                self.xmlOutput(feed, data, args)
            debug( Aggiornato il feed %(loc)s.xml  % args)
    def getPasses(self, url, args):
        try:
            raw = urlopen(url).read()
        except:
            debug( Errore di rete )
            reboot()
        soup = BeautifulSoup(raw)
        for row in soup.findAll( tr , { class :[ lightrow ,  darkrow ]}):
            elements = row.findAll( td )
            values = [item.string for item in elements[1:]]
            result = dict(zip(self.keys, values))
            result[ date ] = elements[0].a.string
            escaped = escape(dict(row.td.a.attrs)[ href ])
            result[ link ] = urlparse.urljoin(url, escaped)
            event =    .join((
                strftime( %Y ),
                args[ tz ],
                result[ date ],
                result[ end_time ]
            ))
            eventTime = strptime(event,  %Y %Z %d %b %H:%M:%S )
            if eventTime < localtime():
                continue
            yield result
    def xmlOutput(self, feed, data, args):
        lines = (
            '<?xml version="1.0" encoding="UTF-8"?>
 ,
            '<rss version="2.0"'
                ' xmlns:atom="http://www.w3.org/2005/Atom">
 ,
            ' <atom:link href="http://dallas.example.com/rss.xml"'
                ' rel="self" type="application/rss+xml" />
 
            ' <channel>
 ,
            '  <title>Guarda la ISS da %(loc)s</title>
 ,
            '  <link>http://frafra.eu</link>
 ,
            '  <description>Tutti i passaggi visibili della ISS'
                ' nei prossimi dieci giorni</description>
 ,
        )
        feed.writelines((string % args for string in lines))
        for result in data:
            result.update(self.tags)
            feed.writelines((string % result for string in rssItem))
        feed.writelines((
            ' </channel>
 ,
            '</rss>
 ,
            ))
 
def startServer(host, port):
    httpd = TCPServer((host, port), SimpleHTTPRequestHandler)
    debug( Server attivo sulla porta %s aperto a %s  % (port, host))
    debug( Server disponibile su http://localhost:%s/  % port)
    httpd.serve_forever()
 
def reboot():
    debug( Riavvio il programma tra %d secondi  % autoReboot)
    stdout = open(devnull, a )
    try:
        sleep(autoReboot)
    except KeyboardInterrupt:
        debug( Programma terminato )
        exit(1)
    python = executable
    execl(python, python, *argv)
 
if __name__ ==  __main__ :
    refresh = UpdateFeed(urls, interval)
    refresh.start()
    try:
        startServer(host, port)
    except KeyboardInterrupt:
        debug( Server disattivato )
    except error:
        debug( Errore nell attivazione del server )
        reboot()
    finally:
        refresh.shutdown()
        debug( Programma terminato )

Il programma è abbastanza robusto, ma non va per il sottile se la connessione diventa instabile o non disponibile, ovvero si limita ad autoriavviarsi nella speranza che questa torni a funzionare.

Per chiuderlo, basta il classico [CTRL] + [C]
Per rimuovere i feed non più utilizzati, bisogna cancellare i relativi file *.xml.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
19

Notifiche via RSS del passaggio della ISS

 

Il programma che ho scritto nelle ultime ore, permette di creare dei feed RSS (quelli che si sottoscrivono solitamente per ricevere notizie da varie fonti) che ci informano del passaggo della ISS (ovvero della Stazione Spaziale Internazionale) sopra la nostra testa.
Una volta inseriti nel file i link reperibili sul sito dell ESA (Agenzia Spaziale Europea) il programma genererà i feed rss e li pubblicherà su un piccolo server web privato.
Il programma contiene molte opzioni, ed è facilmente configurabile (ho pure messo un discreto numero di
commenti sta volta :) ).
Il programma necessita della libreria BeautifulSoup.

Per qualsiasi dubbio o problema potete, come sempre, lasciarmi un commento.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright 2011 Francesco Frassinelli
#
#  This program is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
### Configurazione - Inizio
# N.B.: Tutti i tempi sono espressi in secondi
 
# Questa lista contiene tutti i link relativi alle posizioni
# Link presi da: http://esa.heavens-above.com/countries.aspx
# Per prendere un nuovo link bisogna:
#  1. Andare su http://esa.heavens-above.com/countries.aspx
#  2. Selezionare la nazione
#  3. Digitare il nome del paese
#  4. Premere  Submit 
#  5. Premere sul link del paese (solitamente il primo a sinistra)
#  6. Copiare il link  ISS  (si trova tra le previsioni a dieci giorni)
#  7. Incollare il link nella lista sottostante, similmente agli altri
urls = (
    'http://esa.heavens-above.com/PassSummary.aspx?satid=25544&lat=43.800&lng=7.650&loc=Vallecrosia&alt=53&tz=CET',
    'http://esa.heavens-above.com/PassSummary.aspx?satid=25544&lat=43.950&lng=8.133%20&loc=Marina+di+Andora&alt=0&tz=CET',
    'http://esa.heavens-above.com/PassSummary.aspx?satid=25544&lat=45.483&lng=9.367&loc=Vignate&alt=110&tz=CET',
)
 
# A chi voui fare vedere i feed?
# Impostare host su  0.0.0.0  per renderli visibili a tutti
host =  localhost 
 
# Porta del server
# Su Unix solitamente le porte minori di 1024 sono riservate
port = 1912
 
# Tempo di refresh dei feed
interval = 60*60
 
# Tempo dell auto riavvio del server in caso di problemi di rete
autoReboot = 60
 
# Le informazioni contenute in ogni elemento del feed
# Puoi utilizzare tutte le parole chiave presenti in self.keys
rssItem = (
    '  <item>
 ,
    '   <title>[%(date)s - %(start_time)s]'
        ' Magnitudine apparente: %(magnitude)s</title>
 ,
    '   <description>
 ,
          Evento di magnitude %(magnitude)s%(br)s
  ,
          Inizio previsto alle %(start_time)s 
          in direzione %(start_azimuth)s%(br)s
 ,
          Altezza massima previta alle %(max_time)s 
          in direzione %(max_azimuth)s%(br)s
 ,
          Fine prevista alle %(end_time)s 
          in direzione %(end_azimuth)s%(br)s
 ,
    '   </description>
 ,
    '   <link>%(link)s</link>
 ,
    '  </item>
 ,
)
### Configurazione - Fine
 
from BeautifulSoup import BeautifulSoup
from cgi import escape, parse_qs
from os import devnull, execl
from urllib2 import urlopen, urlparse
from SimpleHTTPServer import SimpleHTTPRequestHandler
from socket import error
from SocketServer import TCPServer
from sys import argv, executable, exit, stdout
from threading import Thread, Event
from time import localtime, sleep, strftime, strptime
 
def debug(message):
    print(   .join((strftime( [%d/%m/%y - %H:%M:%S] ), message)))
 
class UpdateFeed(Thread):
    def __init__(self, urls, interval):
        Thread.__init__(self)
        self.event = Event()
        self.urls = urls
        self.interval = interval
        self.keys = [
             magnitude ,
             start_time ,
             start_altitude ,
             start_azimuth ,
             max_time ,
             max_altitude ,
             max_azimuth ,
             end_time ,
             end_altitude ,
             end_azimuth ,
        ]
        self.tags = { br :escape('<br />')}
    def shutdown(self):
        self.event.set()
    def run(self):
        while 1:
            if self.event.isSet():
                return
            self.task()
            self.event.wait(self.interval)
    def task(self):
        for url in self.urls:
            args = parse_qs(urlparse.urlparse(url).query)
            args = dict((key, value[0]) for key, value in args.iteritems())
            name = [part.capitalize() for part in args[ loc ].split()]
            args[ loc ] =    .join(name)
            data = self.getPasses(url, args)
            if data == None:
                break
            with open( %(loc)s.xml  % args,  wb ) as feed:
                self.xmlOutput(feed, data, args)
            debug( Aggiornato il feed %(loc)s.xml  % args)
    def getPasses(self, url, args):
        try:
            raw = urlopen(url).read()
        except:
            debug( Errore di rete )
            reboot()
        soup = BeautifulSoup(raw)
        for row in soup.findAll( tr , { class :[ lightrow ,  darkrow ]}):
            elements = row.findAll( td )
            values = [item.string for item in elements[1:]]
            result = dict(zip(self.keys, values))
            result[ date ] = elements[0].a.string
            escaped = escape(dict(row.td.a.attrs)[ href ])
            result[ link ] = urlparse.urljoin(url, escaped)
            event =    .join((
                strftime( %Y ),
                args[ tz ],
                result[ date ],
                result[ end_time ]
            ))
            eventTime = strptime(event,  %Y %Z %d %b %H:%M:%S )
            if eventTime < localtime():
                continue
            yield result
    def xmlOutput(self, feed, data, args):
        lines = (
            '<?xml version="1.0" encoding="UTF-8"?>
 ,
            '<rss version="2.0"'
                ' xmlns:atom="http://www.w3.org/2005/Atom">
 ,
            ' <atom:link href="http://dallas.example.com/rss.xml"'
                ' rel="self" type="application/rss+xml" />
 
            ' <channel>
 ,
            '  <title>Guarda la ISS da %(loc)s</title>
 ,
            '  <link>http://frafra.eu</link>
 ,
            '  <description>Tutti i passaggi visibili della ISS'
                ' nei prossimi dieci giorni</description>
 ,
        )
        feed.writelines((string % args for string in lines))
        for result in data:
            result.update(self.tags)
            feed.writelines((string % result for string in rssItem))
        feed.writelines((
            ' </channel>
 ,
            '</rss>
 ,
            ))
 
def startServer(host, port):
    httpd = TCPServer((host, port), SimpleHTTPRequestHandler)
    debug( Server attivo sulla porta %s aperto a %s  % (port, host))
    debug( Server disponibile su http://localhost:%s/  % port)
    httpd.serve_forever()
 
def reboot():
    debug( Riavvio il programma tra %d secondi  % autoReboot)
    stdout = open(devnull, a )
    try:
        sleep(autoReboot)
    except KeyboardInterrupt:
        debug( Programma terminato )
        exit(1)
    python = executable
    execl(python, python, *argv)
 
if __name__ ==  __main__ :
    refresh = UpdateFeed(urls, interval)
    refresh.start()
    try:
        startServer(host, port)
    except KeyboardInterrupt:
        debug( Server disattivato )
    except error:
        debug( Errore nell attivazione del server )
        reboot()
    finally:
        refresh.shutdown()
        debug( Programma terminato )

Il programma è abbastanza robusto, ma non va per il sottile se connessione diventa instabile o non disponibile, ovvero si limita ad autoriavviarsi nella speranza che questa torni a funzionare.

Per chiuderlo, basta il classico [CTRL] + [C]
Per rimuovere i feed non più utilizzati, bisogna cancellare i relativi file *.xml.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
19

File Batch Renaming

 

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

top