ForumFree Chat - Blog tecnico

  1. Utenti e sessioni

    By Hannibal_Smith il 24 Sep. 2011
    0 Comments   46 Views
    .
    Il progetto webchat è uno dei sottoprogetti di FFIRCd che ha come suo obiettivo l'offrire una chat sempre visibile a attiva all'interno di ForumFree
    Nel corso della realizzazione di FFIRCd 2 è stato questo progetto a modellare molte delle funzionalità della nuova versione

    Cosa differenzia principalmente Facebook da ForumFree visto dal nostro punto di vista?



    Facebook non carica mai una nuova pagina web
    La stessa pagina viene modificata continuamente (Ajax) a seconda di ciò che si richiede

    Questo oltre a rendere più veloce l'aprire un link/risorsa, aiuta elementi come la sua chat di rimanere permanenti e senza perdita di stato

    ForumFree invece funziona nella classica maniera di tutti i siti web: si aprono continuamente nuove pagine e non è possibile far mantenere dal browser lo stato di qualcosa tra un cambio di pagina

    Cosa ha comportato questa differenza?



    Ha pilotato lo sviluppo di FFIRCd 2 all'avere utenti indipendenti dal numero di sessioni
    In altri server viene associato a una connessione un determinato utente, da noi un utente più avere più connessioni contemporaneamente

    Per andare avanti è utile specificare cosa noi intendiamo per utente e sessione:

    • Utente è il singolo account di ForumFree, ForumCommunity o BlogFree

    • Sessione è la connessione effettuata sia da un client IRC che dalla webchat


    Non solo posso essere collegato tramite più client IRC contemporaneamente (molto utile se si usa uno smartphone, tablet, o ancora nel caso di debug di un bot), ma sopratutto posso essere chattare contemporaneamente sia da ForumFree tramite la webchat che da quanti client IRC mi pare

    Sarà il server a capire come gestire al meglio i vari client e protocolli che sto utilizzando insieme



    Inoltre il server mantiene sincronizzato tra tutti i client indipendentemente dal protocollo
    Posso iniziare una query dalla webchat su ForumFree e finirla dal mio tablet con AndChat

    Edited by Hannibal_Smith - 24/9/2011, 17:09
    Last Post by Hannibal_Smith il 24 Sep. 2011
    .
  2. Record[Bot]
    come funziona?

    Tags
    bot
    irclib
    pickle
    python
    By Ltk_Sim il 9 Sep. 2011
    0 Comments   29 Views
    .
    Come avete visto ultimamente è stato creato Record[Bot]. In questo topic vi andrò a spiegare il funzionamento e la programmazione dello stesso.

    L'ho creato usando il software Eclipse un progetto dell'Eclipse Foundation con il modulo Pydev.

    Per svliluppare questo Bot sono serviti due moduli, che si sono rivelati molto utili: Python IRC library e pickle.
    Il primo offre tutte le funzioni IRC (che offrirebbe un client IRC) restituendo tutti i dati che scaturiscono o coinvologono o servono per avviare una funzione. Il secondo è un potente e comodo modulo (e ringrazio Hannibal per avermelo consigliato) che permette di lavorare su dei dizionari salvati un file (nel nostro caso records.pkl).

    Ma passiamo al codice. I più volenterosi ed esperti possono studiarselo al seguente indirizzo: https://gist.github.com/1202671
    Se volete vedere anche l'indendazione del codice andate su github.

    Si inizia importando due moduli fondamentali:
    QUOTE
    from irclib import SimpleIRCClient
    import pickle

    Il primo importa un semplice clientIRC in Python da irclib e il secondo importa pickle.
    Fino a def_run sono istruzioni per la connessione e si definiscono variabili vuote che però serviranno in seguito.
    def on_invite è la funzione che viene eseguita se si invita il bot. Richiede che siano passati tre elementi. Nel nostro caso ci servirà (oltre che self che è sempre indispensabile) la variabile e: e.arguments()[0] che prende il canale dell'invito. A questo punto il bot può entrare nel canale e scrivere che in caso di aiuto si può digitare %­helpr.

    def on_namreply e def on_endofnames servono sia per il part sia per il record di utenti.
    Nel primo caso se message == '%­partr' vuol dire che qualcuno ha dato il comando di uscire dal canale al Bot, però questo comando può essere eseguito se e solo se l'utente è un operatore. Viene quindi salvato l'utente, il canale e il comando e inviato un names che:
    QUOTE
    if self.part['messaggio'] == '%­partr':
    nick = self.part['user']
    nick=nick.lower().split('!')
    lista_utenti = e.arguments()[2].lower().split(' ')
    utente = [x for x in lista_utenti if '@' + nick...

    Read the whole post...

    Last Post by Ltk_Sim il 9 Sep. 2011
    .
  3. MongoDB, consigli per l'uso

    Tags
    mongodb
    By Hannibal_Smith il 28 June 2011
    0 Comments   105 Views
    .
    MongoDB che da sempre è stato con noi fin dai primi prototipi di FFIRCd in questo anno di lavoro ci ha dato molti spunti di riflessione su come comprenderlo meglio e plasmarlo a seconda delle nostre necessità.
    Questo messaggio fa parte di una serie di guide dedicate al database iniziate con la precedente Teniche di backup con MongoDB

    Il nostro contesto è: gestire un database di 2,8GB con una media di 100 query al minuto su di un server cloud Windows con 2GB di ram

    Utilizzare una interfaccia web da associare al client mongo:
    MongoDB non ha alcuna controparte ala phpMyAdmin e questo non è un problema ;)
    Gestire MongoDB è veramente facile, i comandi sono pochi e nella sua normale gestione quelli ricorrenti sono circa 5. Dove pecca il client standard testuale? Nella visualizzazione delle query ovviamente
    E' per questo che i client MongoDB visuali si concentrano più sulla visualizzazione e modifica dei dati che non nell'amministrazione del server
    Noi facciamo uso di RockMongo per via della sua facilità di utilizzo e configurazione. Richiede un webserver con il supporto a php 5

    Limitare la ram utilizzata:
    MongoDB è stato creato per essere veloce e per far questo sfrutta il più possibile la ram come cache. La gestione della ram è quindi delegata interamente al sistema operativo e non esiste alcuna impostazione per limitarne l'uso
    Come facciamo noi con un unico server a far andare insieme database, demone chat e IIS? Come facciamo a non far monopolizzare la ram dal database?
    Bisogna sfruttare gli strumenti che l'OS mette a disposizione ;)
    Linux purtroppo pare non abbia modo di limitare quanta ram un processo più utilizzare e si fa uso della virtualizzazione. Noi fortunatamente usiamo Windows che fornisce nativamente uno strumento per limitare l'utilizzo delle risorse da parte di un processo.
    Se non fosse per i costi di licenza Windows come server non è male ;)

    Quanta ram deve avere il mio server idealmente?
    Tanta quanta da contenere l'intero database più tutto il resto (il sistema operativo e gli altri processi)
    Se questo non fosse possibile si consiglia almeno di avere spazio a sufficienza per tenere gli index

    La dime...

    Read the whole post...

    Last Post by Hannibal_Smith il 28 June 2011
    .
  4. ffircd.NET ovvero FFIRCd 2

    By Hannibal_Smith il 5 April 2011
    0 Comments   124 Views
    .
    FFIRCd 1.0 nasceva dall'idea di creare un server di chat che permettesse di sistemare tutti i vari problemi che la mia esperienza su un network di IRC dava gestendo il canale #ForumFree

    Account, forum e blog di ForumFree, ForumCommunity e BlogFree integrati nella chat
    Semplificare i gradi di op ed eliminare channel mode ritenuti obsoleti
    Rendere il meno necessario possibile ricorrere ai service per fare modifiche (è tutt'ora un processo che si vuole mandare avanti)
    L'esistenza di un canale /staff per ogni forum e blog
    La possibilità di settare channel mode e topic permanenti senza dover ricorrere a ChanServ
    Il cambio di prospettiva dell'akick, vista come una seconda banlist dove inserire ban permanenti e senza il tipico flood creato da ChanServ (notifica agli op, kick pubblico, set di un nuovo ban)
    La gestione dei ban privata esattamente come lo sono gli akick
    Eliminazione del ghost automatica

    Questo è l'inizio e come tutti i punti di partenza, aiuta a capire cosa si è fatto male

    Abbiamo passato un brutto periodo su FFIRCd 1.0 a causa dell'aumento dell'utenza, arrivando a quota 380/430 utenti online nei momenti di punta FFIRCd iniziava a mostrare i suoi limiti tecnici con comandi che fallivano o nel peggiore dei casi con un crash del demone
    Voglio dire che io come ogni utente, perchè mi considero un utente, ho odiato questa situazione

    Il buon senso mi portò dopo alcuni mesi dal completamento di FFIRCd 1.0 a rendermi conto degli errori fatti, dei problemi che ho avuto con Python, della architettura della chat che non avrebbe permesso di aggiungere funzionalità che vorremmo offrire (più o meno a breve termine) senza rendere il codice illeggibile.

    La decisione che presi fu quella che fa parte della vita di ogni software, partendo dalla esperienza della prima versione riscrivere tutto

    Questa volta però volevo un linguaggio staticamente tipato. E' stata una scelta che ha influenzato molto, in maniera positiva FFIRCd 2
    Passare a un linguaggio staticamente tipato da uno dinamico come Python mi ha permesso di riscrivere il demone molto più velocemente (grazie all'autocompletamento), di avere trovare errori già alla fase di compilazione e sopratutto di effettuare refactoring del codice senza avere una enorme batteria di unit test dietro
    E' stata la scelta forse migliore fatta per FFIRCd 2.0 - oggi non tornerei mai indietro ad un linguaggio dinamico per progetti mediamente complessi (FFIRCd 2.0 conta circa 7.000 righe di codice effettivo)

    La scelta in quale linguaggio riscrivere FFIRCd non fu una scelta facile. In un primo momento la strada da prendere sembrava quella di un linguaggio funzionale (Haskell oppure F#) ma dover imparare un nuovo paradigma di programmazione ne avrebbe rallentato troppo l'opera di riscrittura
    Volevo però un linguaggio orientato agli oggetti (quindi non C), che gestisse lui la memoria e che non sia troppo ...

    Read the whole post...

    Last Post by Hannibal_Smith il 5 April 2011
    .
  5. Come nasce una nuova versione

    Tags
    DVCS
    workflow
    By Hannibal_Smith il 23 Nov. 2010
    0 Comments   42 Views
    .
    Ci siamo, gli utenti chiedono a gran voce che sia possibile vedere il loro stato su irc.forumfree.it senza dovver usare BNC o bot appositi ed il team di chat.forumfree.it si mette al lavoro :B):

    La proposta viene passata su #chat.ff/staff per poi essere discussa tra i vari op. In questa fase viene discussa in maniera più precisa come dovrà funzionare la visualizzazione dello stato di un utente, dei possibili problemi e dei tempi e priorità rispetto alle altre cose da farsi
    E' una delle fasi più interessanti (capita spesso di parlare di più cose insieme in maniera deltutto naturale :shifty:) e si conclude con il parere di Vash SD al riguardo
    Se negativo, non si vedrà mai questa funzionalità integrata in FFIRCd ;)

    Se la proposta è piaciuta, chi si dedica dello sviluppo decide a seconda degli impegni a chi affidare lo sviluppo di questa nuova funzionalità
    Abbiamo milestone, ma non abbiamo tabelle di marcia.

    FFIRCd per tutto il ciclo di vita della 1.0 ha fatto uso del (magnifico) Git e Github (account commerciale per repository privati)

    Git è un file system che permette di tenere traccia di ogni modifica fatta ad un file a cui viene associato un commento,
    condividere il suo contenuto al di fuori del proprio pc e gestire quasi autonomamente le modifiche apportate dai vari sviluppatori in modo che
    vengano fuse (merge) tra di loro

    Non abbiamo mai usato funzionalità avanzate (e possibilmente dannose) di Git come rebase, ma abbiamo fatto di tutto con neanche 6 comandi di Git
    Git è facile per chi sa usarlo

    Il workflow di FFIRCd è il seguente

    Repository principale:
    nico159/FFIRCd-1
    Rami di sviluppo fissi:
    |->master (stabile)
    |->integration (dove finiscono le modifiche da apportare prima di master)
    Rami di sviluppo on-demand:
    |->next (sviluppo)
    |->novità-gestione-ban (sviluppo singola funzionalità)
    |->...

    Repository altri sviluppatori:
    LightStyle/FFIRCd-1
    Rami di sviluppo fissi:
    |->master (che equivale alla next di nico159/FFIRCd-1)
    Rami di sviluppo on-demand:
    |->webstatus
    |->bug-cloni
    |->...

    Ogni ramo di sviluppo (branch) non è altro che una copia esatta del repository principale (ramo master) risalente alla data
    di creazione del branch

    Ogni sviluppatore ha due copie (fork) di nico159/FFIRCd-1
    Una pubblica accessibile a tutti i membri del team su Github del tipo LightStyle/FFIRCd-1 più una copia privata nel proprio
    pc con i vari branch creati da LightStyle a seconda di quello a cui sta lavorando (tipo un ipotentico branch webstatus)

    Le modifiche (commit) fatte nel fork situato ne...

    Read the whole post...

    Last Post by Hannibal_Smith il 23 Nov. 2010
    .
  6. ForumFree Chat non è un network

    Tags
    confronti
    scelte
    By Hannibal_Smith il 24 Sep. 2010
    3 Comments   200 Views
    .
    Hypnotize su FFMagazine ha scritto un articolo (bello a mio parere) dove viene paragonata la chat di ForumFree al network IRC Azzurra: http://ffmagazine.forumfree.it/?t=50769482

    Una delle cose che mi va di chiarire è il perchè FFIRCd non prevede alcun concetto di network IRC

    Cosa significa che FFIRCd non è un network IRC mentre Azzurra sì?
    Azzurra è composta da più server IRC sparsi per l'Italia collegati tra di loro, ogni utente può scegliere a quale server del network collegarsi oppure farsene assegnare uno in maniera casuale. Al contrario la chat di ForumFree è composta da un unico server IRC che serve tutti gli utenti

    Immagino già determinate persone blaterale buzzword come High availability! Web scalable! The network is the computer! :woot:
    La mia risposta è YAGNI ;)

    "Always implement things when you actually need them, never when you just foresee that you need them."



    Abbiamo circa 150 utenti online negli orari serali, un singolo server IRC con buona connettività ed un ottimo demone IRC può gestire anche 30.000 utenti, molti di più degli utenti che Azzurra ha mai avuto online.
    irc.forumfree.it potrebbe gestire senza problemi, sul suo unico server, tutta l'utenza formata da 1.500/2.000 utenti online della rete Azzurra ;)

    Sul lato economico, la chat è un servizio che ha i suoi costi mensili di mantenimento e che viene offerto agli utenti Di ForumFree.it, ForumCommunity.net e BlogFree.net senza alcuna forma di pubblicità. Avere più server senza un reale motivo è insensato.
    Anche Azzurra è offerto senza alcuna forma di pubblicità, come fanno?
    Il server irc.forumfree.it è un server di proprietà di ForumFree.it, Azzurra al contrario non è proprietaria dei server IRC che compongono la sua rete, sono server donati a scopo pubblicitario da compagnie telefoniche come Telecom e chi fornisce servizi di hosting come Seeweb

    Azzurra garantisce tramite la rete distribuita che non ci saranno mai down?
    La risposta è no
    Avete una rete distribuita porta ad altri problemi che noi usando un singolo server non abbiamo: i netsplit
    Inoltre in caso di aggiornamento del server, gli utenti di quel server cadranno esattamente come quando noi mettiamo giù il server per circa 40s per gli aggiornamenti.
    A mio avviso avere un singolo server porta a meno downtime

    La rete è debole sotto attacchi DoS?
    Purtroppo ancora sì, e sto buttando giù alcune idee su co...

    Read the whole post...

    Last Post by Hypnotize il 12 Oct. 2010
    .
  7. Tecniche di backup con MongoDB

    Tags
    gestione
    mongodb
    By Hannibal_Smith il 8 Sep. 2010
    0 Comments   71 Views
    .

    Ripeti con me: "Il backup e' Bello, Il Backup e' Buono, Il Backup mi fa dormire sereno alla notte..."



    image



    A seconda delle proprie necessità i database offrono varie soluzioni di backup, le principali sono: backup della directory che contiene il database, usare un tool di esportazione oppure la classica configurazione Master/Slave.

    Noi non abbiamo un secondo server da destinare come slave e non usiamo alcun tool di esportazione ^_^

    Quindi qual'è la nostra strategia di backup? Mettere il database in read only ed effettuare il backup solo della directory dbpath, ovvero dove sono contenuti i file del database

    Perchè non usiamo mongodumps?
    CITAZIONE
    mongodump operates through the normal mongo query mechanism, so it's
    essentially doing a query to get every single document and then
    dumping the results. as you can imagine, that can be pretty time
    consuming.

    In poche parole, è inutile :woot:

    Di seguito una piccola guida ;)

    Mettere in modalità read only il database:
    CITAZIONE
    root@irc.forumfree.it:~# mongo
    MongoDB shell version: 1.6.2
    connecting to: chat
    > use admin
    switched to db admin
    > db.runCommand({fsync:1, lock:1})
    {
    "info" : "now locked against writes, use db.$cmd.sys.unlock.findOne() to unlock",
    "ok" : 1
    }
    > exit
    bye

    Copiare la dbpath sul vostro nastro di backup/NFS/FTP/Rysync
    Se non conoscete qual'è il vostro dbpath, aprite il file /etc/mongo.conf e cercate
    CITAZIONE
    dbpath=/...

    Di default è:
    CITAZIONE
    /var/lib/mongodb

    Se avete avviato mongod senza specificare il file di configurazione, il dbpath predefinito è:
    Last Post by Hannibal_Smith il 8 Sep. 2010
    .
  8. Blog tecnico autogestito sulla ForumFree chat

    By Hannibal_Smith il 8 Sep. 2010
    2 Comments   76 Views
    .
    In questo blog verrà trattato da me, e forse qualche altro, del lato tecnico della Chat di ForumFree.


    E' una occasione per parlare del dietro la quinte dello sviluppo, condividere informazioni utili, discutere in che direzione di evolverà la chat

    Edited by Hannibal_Smith - 8/9/2010, 11:00
    Last Post by hyphen il 9 Nov. 2010
    .