La qualità dei contenuti

25 Maggio 2007

Stamattina ho fatto ordine nel mio feed reader (Vienna), decidendomi finalmente ad eliminare un paio di feed su cui rimuginavo da tempo: quello di Punto Informatico e quello del prof. Fuggetta.

La spiegazione per il blog di Alfonso Fuggetta è semplice: feed incompleti. La bontà degli spunti proposti non si discute, ma sono stufo di leggere quattro righe e dover aprire il browser per avere il resto dell’articolo (il tempo è poco, va ottimizzato).
Aggiornamento: a quanto pare il feed adesso è completo (vedi commento).

Per Punto Informatico la situazione è un po’ più complessa: da un lato capita sempre più spesso di ritrovarsi nel feed gli stessi articoli ripetuti a distanza di poche ore (magari è un problema solo mio…), dall’altro la qualità dei contenuti, venuta progressivamente meno. Non parliamo poi del forum e dei commenti alle notizie: il regno del troll dislessico.

Un tempo Punto Informatico produceva approfondimenti interessanti, ora capita sempre più spesso di trovare articoli approssimativi (esempio, mai corretto), notizie “vecchie” oppure copia/incolla da blog e siti web.

A questo punto vorrei estendere il ragionamento ai network di blog italiani. Non frequento quello BlogoSfere ma ho diversi blog tematici di Blogo nel mio aggregatore. Peccato che alla fine i blog in questione si limitino a fare del news mastering riportando in italiano notizie diffuse da blog e siti di news stranieri: se l’inglese fosse più diffuso e i lettori un po’ più “svegli”, in grado di recuperare le fonti originali, probabilmente il successo di questo network andrebbe pesantemente ridimensionato.

In alcuni casi i contenuti proposti sono interessanti e originali, ma questo costituisce l’eccezione, non la regola: ancora una volta non conta la piattaforma o il network, conta chi scrive. Forse varrebbe la pena ridurre il numero di autori e cercare di selezionare (e retribuire adeguatamente) quelli più capaci, per il momento sembra che stia prevalendo la strada opposta.

Spero che il Sole 24 Ore, del cui probabile network di blog si vocifera ormai da settimane, tragga spunto dagli errori altrui: ad esempio, per quanto mi riguarda, il network oneBlog creato da html.it è stato deludente, forse mi aspettavo troppo vista l’indiscussa qualità di <edit>. Da un lato si è deciso di evitare quello che sta facendo Blogo (news mastering), dall’altro i contenuti prodotti sono ridotti.


È da ieri sera che ho in mente questo post, peccato sia difficile scegliere le parole in modo da non offendere nessuno (che si sa i blogger, io in primis, sono facili alla polemica).

Pur non rientrando tra i 100 blogger invitati inizialmente, io all’incontro con Cisco ci sarei anche andato volentieri, ma non di lunedì e soprattutto non per un paio d’ore (che si sa, i blogger c’avrebbero anche da lavorare): per questi motivi ho deciso di non aderire alla seconda chiamata, nonostante l’invito di Lele Dainesi (a proposito, in bocca al lupo 😉 ).

Premesso questo, ho atteso con un certo interesse il post aperitivo Cisco: sono stati invitati 100 blogger, come minimo un centinaio di blog all’attivo (che si sa, i blogger quando ci prendono gusto ne aprono 3 o 4 di blog), chissà quanto ci sarà da leggere! Al contrario il post aperitivo Cisco è stato decisamente deludente: qualche resoconto, qualche foto, discussioni poche.

Forse gli invitati sono ancora in fase di elaborazione (vedi post promesso da Elena), messi ko dal ristorante giapponese, oppure sono tutti esclusi dal mio feed reader

Ecco una serie di argomenti che avrei voluto leggere:

  • tralasciando i contatti umani, ne è valsa la pena?
  • siete usciti da quell’incontro con la consapevolezza di avere “guadagnato” qualcosa?
  • cosa è stato clamorosamente sbagliato e cosa da migliorare?

Resto in attesa, sperando che i 100 blogger stiano solo rimuginando o digerendo (che si sa, i blogger a volte son lenti); per quanto mi riguarda, i miei dubbi sono stati ben riassunti da Keper.

A me sembra pochino per un incontro così. Non vedo i contenuti, anzi mi sembra un barcamp fatto da 100 blogger. La gita di terza media. Forse mi aspettavo troppo io, ma ’sti 100 blogger che cosa si sono detti con Cisco?

Probabilmente sono io che non ho trovato molte info e probabilmente non ho capito la portata dell’evento.

Forse ho sopravvalutato Cisco e l’evento, oppure sto sopravvalutando i blogger 😉

Tag Technorati:

Come richiesto espressamente da Maurizio, in questo post vi spiegherò con dovizia di particolari come ho ottenuto l’immagine presente in questo post 😛

L’idea

L’idea di base è semplice: realizzare un’immagine in grado di rappresentare le relazioni che collegano i miei amici (friends) in Twitter e gli “amici degli amici”, in pratica due livelli di twitter-relazioni a partire dal sottoscritto.

Doverosa premessa: non sono un programmatore, queste sono le prime righe che scrivo in Python e non ho mai frequentato i grafi in vita mia 😉

Python

Ecco un elenco dei software indispensabili (nel mio caso il tutto è stato realizzato su Mac Os X):

  • Python: l’ultima versione è la 2.5.1, per Mac Os X è disponibile un comodo installer
  • Setuptools
  • Python Twitter comprensivo di semplici istruzioni di installazione

Generazione del file .dot

Per la generazione del file .dot ho scritto qualche riga di codice in Python (è la volta buona che mi costringo ad impararlo…).

#!/usr/bin/python

import twitter, simplejson, time
class ApiEstesa (twitter.Api):
  ''' Estende Api per recuperare i friends di un user diverso dal proprio '''

  def __init__(self):
      twitter.Api.__init__(self)

  def GetAnotherOneFriends(self, username, password, identificativo):
      url = 'http://twitter.com/statuses/friends/'+str(identificativo)+'.json'
      json = self._FetchUrl(url, username=username, password=password)
      data = simplejson.loads(json)
      return [twitter.User.NewFromJsonDict(x) for x in data]

def aggiungi_soggetti (utenti, relazioni, id):
  '''Aggiunge gli id dei friends dell'utente con identificativo ID al dizionario id_soggetti'''

  try:
    friends = api.GetAnotherOneFriends(user, password, id)
  except:
    print 'Errore nel recupero dei dati da Twitter: attendo 10 secondi e riprovo'
    time.sleep(10)
    friends = api.GetAnotherOneFriends(user, password, id)

  for friend in friends:
    utenti.setdefault(friend.id, friend.screen_name)
    relazioni.append('  '+str(id)+' -- '+str(friend.id)+'n')

api = ApiEstesa()

user = 'vostro_user'
password= 'vostra_password'
identificativo = 'vostro_id'
screen_name = 'vostro_nome_visualizzato'

# Recupero i friends del soggetto principale
friends = api.GetFriends(user, password)

# Uso un dizionario per evitare la duplicazione degli utenti; aggiungo subito il soggetto principale
id_utenti = {}
id_utenti.setdefault(identificativo, screen_name)
relazioni = []

for friend in friends:
    # Aggiungo i friends del soggetto principale al dizionario id_utenti
    id_utenti.setdefault(friend.id, friend.screen_name)
    # Aggiungo le relazioni del soggetto principale
    relazioni.append('  '+identificativo+' -- '+str(friend.id)+'n')
    # Aggiungo i friends e le relazioni del friend che sto controllando
    aggiungi_soggetti(id_utenti, relazioni, friend.id)
    print 'Aggiungo soggetto e relazioni di '+friend.screen_name

lista_utenti = id_utenti.items() # Trasformo il dizionario in una lista
inizio_file = '''graph relazioni_twitter {
  graph [bgcolor=black, overlap="scale", ratio="auto"];
  node [fontcolor="white", fontsize="10", shape="circle", color="antiquewhite"];
  edge [color="gold1"];n'''

f = open('grafico_prova.dot','w')

# Scrivo su file la parte iniziale del grafo
f.writelines(inizio_file)

# Scrivo la label del nodo root (soggetto principale)
f.writelines('  %s [label="%s", root="1", fontcolor="red",shape="circle"];n' % (identificativo, screen_name))

# Scrivo su file tutti i soggetti raccolti in lista_utenti
print '%s nodi, %s relazioni' % (str(len(lista_utenti)),str(len(relazioni)))

for utente in lista_utenti:
  f.write('  %s [label="%s"];n' % utente)

f.writelines('n')

for relazione in relazioni:
  f.write(relazione)

f.writelines('}n')
f.close()

Primo problema: per qualche strano motivo il modulo per Twitter non prevede una funzione per leggere i friends di un utente diverso dal proprio, funzionalità prevista dalle API di Twitter. A questo punto è stato necessario estendere la classe originaria con una nuova funzione: getAnotherOneFriends.

Descrizione del codice (qui lo potete scaricare come file di testo):

  • creo delle variabili con il mio identificativo, il mio user, la mia password e il mio screen_name (nome visualizzato)
  • ottengo una lista dei miei friends (friends)
  • scorro la lista: ogni friend viene aggiunto al dizionario id_utenti e, tramite la funzione aggiungi_soggetti, aggiungo i suoi friends al dizionario e le relazioni alla lista omonima
  • alla fine non resta che scrivere su file l’elenco dei nodi e le relazioni (questo è file .dot generato)

L’algoritmo è volutamente semplice: così come è strutturato, ad esempio, non sarebbe in grado di rilevare delle relazioni di terzo grado senza generare una marea di ripetizioni inutili. Il time.sleep(10) serve ad evitare che un down di Twitter (già verificatosi 3 volte stasera) blocchi completamente la generazione 😉

Appena ho un attimo di tempo conto di ristrutturare il codice in modo da permettere di analizzare le relazioni per n-livelli (anche se in quel caso il problema sarà il grafo…)

Generazione del grafo

Questa è la parte più complicata e, al momento, parzialmente irrisolta. Per Mac Os X esiste un ottimo software che però è vecchio e non più supportato (il che significa, tra le altre cose, che funziona in emulazione con Rosetta sul mio iMac Core 2 Duo). Sullo schermo riuscivo chiaramente a leggere i nomi sui nodi, nell’esportazione in png il file è stato ridimensionato drasticamente rendendo i nomi invisibili. Per generare l’immagine ho comunque utilizzato PixelGlow con l’impostazione Energy Minimized.

Al momento sto provando a ricreare un grafico usando neato e twopi da linea di comando ma incontro qualche problema: segmentation fault ed errori simili, che elimino solo impostando delle dimensioni inferiori per il grafo, peccato solo che rendano i nodi incomprensibili.

In queste ore sto anche provando a generare il grafo sul PowerBook G4 con PixelGlo; stamattina sul P4 3.0Ghz in ufficio (Windows XP) sono arrivato ad occupazioni di memoria di 3GB senza ottenere grandi risultati.

Domande in sospeso

  1. Avete suggerimenti per la realizzazione del grafo? Sbaglio qualcosa nella sintassi del file .dot?
  2. Python: qualcuno è in grado di spiegarmi perché, pur utilizzando un dizionario e setdefault, mi ritrovo un nodo (quindi una chiave) ripetuto per ben 3 volte? Il nodo incriminato è quello del soggetto principale.

Da sabato scorso sto facendo qualche prova con Python, le API di Twitter e GraphViz: per il momento sono riuscito ad ottenere un’immagine, incomprensibile ma affascinante 😛

L’idea di fondo è semplice: rappresentare i miei amici (friends) e gli amici dei miei amici (amici di 2° grado). Sembrano pochi dati, in realtà siamo già ad un file di testo di 8160 righe.

Ecco il risultato:

Gli amici degli amici (TwitterSfera)

L’utente in fondo a destra che genera una raggiera di relazioni è TheMacPack 😉

Tag Technorati: ,

Il noto pensatore

20 Maggio 2007

Dopo San JTheo, è il turno di eio

eiolampadina.jpg

Che poi l’avevo pubblicata anche sul mio tumblr, ma ci è poca gente che lo legge quel coso…

P.S. se avete cinque minuti, contribuite come il sottoscritto al CanzonFincipit. Nel frattempo cerco di togliermi dalla testa l’immagine del libraio barbuto

Tag Technorati: ,

Canon EOS 350D, Sigma 24-70mm ƒ2.8, mano libera

Free Climbing