python: calendario fantalega

settembre 1, 2014 Lascia un commento

Ecco una applicazione per creare un calendario con n squadre Pari.
Non tiene conto della giornata di riposo in caso di squadre dispari!
Testandola, dovrebbe tenere conto anche del “casa”, “fuoricasa”.

codice view:

# -*- coding: utf-8 -*-#
'''VIEW Module for FantaCalendario:
Graphic library: wx
Bindings are defined under CONTROLLER Module.
''' 
import wx, os

class FrameCal(wx.Frame):
    '''Main frame for FantaPython application'''
    def __init__(self, *args, **kwargs):
        self.nsq = kwargs.pop('nsq')
        wx.Frame.__init__(self, *args, **kwargs)
        self.panel = wx.Panel(self)
        self.panel.SetBackgroundColour('Pink')
        sq_cont = 1
        xpos, ypos = 100, 20
        while sq_cont <= self.nsq:
            wx.StaticText(self.panel, wx.ID_NEW, 'squadra%s' % sq_cont,
                          pos = ((xpos - 85), ypos), size = (70, 25))
            wx.TextCtrl(self.panel, wx.ID_NEW,
                        pos = (xpos, ypos), size = (140, 25))
            ypos += 25
            sq_cont += 1
        
        self.btn_create = wx.Button(self.panel, wx.ID_NEW, 'Crea Calendario',
                                    size = (240, 25), pos = (0, (ypos)))
        self.SetSizeWH(250, (ypos + 65))
        self.Centre()
        self.Show()

class InfoMessage(wx.MessageDialog):
    '''Simple message Dialog'''
    def __init__(self, parent, message):
        wx.MessageDialog.__init__(self, parent, message, 'core info', wx.OK |
                                  wx.ICON_EXCLAMATION)
    def get_choice(self):
        '''get the state of the user choice'''
        if self.ShowModal() == wx.ID_OK:
            self.Destroy()

class ChoiceMessage(wx.MessageDialog):
    '''Simple choice message Dialog'''
    def __init__(self, parent, message):
        wx.MessageDialog.__init__(self, parent, message, 'Core question',
                                  wx.YES_NO | wx.ICON_QUESTION)
    def get_yes(self):
        '''get True if YES is clicked'''
        if self.ShowModal() == wx.ID_YES:
            return True
        else:
            self.Destroy()

class EntryDialog(wx.TextEntryDialog):            
    '''Simple Text Entry Dialog'''
    def __init__(self, parent, msg, value):
        wx.TextEntryDialog.__init__(self, parent, msg, 'Core request',
                                    defaultValue = value, style = wx.OK)
    def get_choice(self):
        '''get the state of the user choice'''
        if self.ShowModal() == wx.ID_OK:
            response = self.GetValue()
            self.Destroy()
            return response

class FileSaver(wx.FileDialog):
    '''Class for file Saver'''
    def __init__(self):
        self.f_save = None
        wildcard = "File Calendario (*.txt)|*.txt|" \
            "Tutti i files (*.*)|*.*"
        wx.FileDialog.__init__(self, None, "salva il file", os.getcwd(),
                               "", wildcard, wx.SAVE)
        if self.ShowModal() == wx.ID_OK:  
            print "...salvo il file in: %s" % (self.GetPath())
            self.output = self.GetPath()
            self.f_save = open(self.output, 'w')
        else:
            print "operazione salvataggio annullata"
            self.f_save = None
            self.Destroy()
        self.Destroy()

def main():
    '''app starter'''
    app = wx.PySimpleApp()
    n_sq = 8 # number of teams
    FrameCal(None, wx.ID_NEW, "Calendario 1.1", nsq = n_sq)
    app.MainLoop()

if __name__ == '__main__':
    main()

codice controller:

'''FantaCalendario v 2.0
   Controller Module for FantaCalendario Application:
   All the binding method to frame widget are defined here'''

import wx

from View import (FrameCal, EntryDialog, InfoMessage, FileSaver)
from copy import copy


class Team(object):
    '''A team class'''
    def __init__(self, name, status=True):
        self.name = name
        self.casa = status
        
    def set_casa(self):
        """set the status 'casa' to True"""
        self.casa = True

    def set_fuori(self):
        """set the status 'fuori' to True"""
        self.casa = False


class Controller(object):
    '''Controller class for MVC-like pattern'''
    def __init__(self):
        n_sq = int(EntryDialog(None, "Quante Squadre partecipano?",
                                     '8').get_choice())
        self.gui = FrameCal(None, wx.ID_NEW, "Calendario 2.0", nsq=n_sq)
        self.gui.Bind(wx.EVT_BUTTON, self.on_create)

    def on_create(self, evt):
        '''create every "team_x vs team_y" combinations possible'''
        panel = evt.GetEventObject().GetParent()
        teams = []
        err = 0
        for widget in panel.GetChildren():
            if isinstance(widget, wx.TextCtrl):
                if widget.GetValue() != '':
                    teams.append(Team(widget.GetValue()))
                else:
                    err += 1
        if err > 0:
            msg = "mancano uno o piu' nomi squadra"
            InfoMessage(panel.GetParent(), msg).get_choice()
        else:
            print teams
            crea_calendario(teams)
            self.gui.Close()


def crea_calendario(lista):
    '''crea gli accoppiamenti da una lista'''
    matrix = []
    cont = 0
    while cont < len(lista):
        matrix.append([None] * len(lista))
        cont += 1
    matrix[0] = lista  # intestazione

    # Riga Intestazione invertita meno l'ultima squadra
    row2 = copy(lista)
    row2.pop()
    row2.reverse()
    matrix[1][0:(len(lista) - 1)] = row2[0:(len(lista) - 1)]

    # Composizione tabella prima FASE
    i = 1
    while i < len(lista):
        k = 1
        for item in matrix[i]:
            try:
                matrix[i + 1][k] = item
                matrix[i + 1][0] = matrix[i + 1][(len(lista) - 1)]
                matrix[i + 1][(len(lista) - 1)] = None
                k += 1
            except IndexError:
                break
        i += 1

    # Composizione tabella seconda FASE
    row_m = 1
    while row_m < len(lista):
        for item_a in matrix[0]:
            for item_b in matrix[row_m]:
                if matrix[0].index(item_a) == matrix[row_m].index(item_b):
                    if item_a == item_b:
                        matrix[row_m][matrix[row_m].index(item_b)] = lista[-1]
                        matrix[row_m][(len(lista) - 1)] = item_b
        row_m += 1

    # Stampa giornata
    cont = 1
    fbs = FileSaver()
    outputfile = fbs.f_save
    while cont < len(lista):
        outputfile.write("\nGiornata n. " + str(cont) + "\n")
        andata = []
        for sq_a in matrix[0]:
            for sq_b in matrix[cont]:
                if matrix[0].index(sq_a) == matrix[cont].index(sq_b):
                    if sq_b not in andata or sq_a not in andata:
                        if sq_a.casa == True:
                            andata.append(sq_a)
                            andata.append(sq_b)
                            outputfile.write(sq_a.name + "-" + sq_b.name + "\n")
                            sq_a.set_fuori()
                            sq_b.set_casa()
                        else:
                            andata.append(sq_b)
                            andata.append(sq_a)
                            outputfile.write(sq_b.name + "-" + sq_a.name + "\n")
                            sq_a.set_casa()
                            sq_b.set_fuori()
        cont += 1
    outputfile.close()


def main():
    '''starter'''
    app = wx.PySimpleApp()
    Controller()
    app.MainLoop()

if __name__ == '__main__':
    main()

il funzionamento è semplicissimo:
si avvia, si sceglie il numero di squadre:
cal_1
si mettono i nomi delle squadre:
cal_2
si preme il pulsante crea e si sceglie un nome per la destinazione in txt, che poi potrà essere importata ad esempio in excel.

Giornata n. 1
A-C
B-D

Giornata n. 2
D-A
C-B

Giornata n. 3
A-B
D-C

link binario (exe)

Categorie: FantaLega, python, wxPython

Lista calciatori 2014-2015

settembre 1, 2014 Lascia un commento

la Gazzetta non ha ancora fornito i codici…

portieri
ABBIATI MIL 12 
AGAZZI MIL 2 
AGLIARDI CES 2 
ANDUJAR NAP 1 
AVRAMOV TOR 1 
BARDI CHI 8 
BASSI EMP 8 
BELEC INT 1 
BENUSSI VER 1 
BERISHA LAZ 2 
BERNI INT 1 
BIGGERI EMP 1 
BIZZARRI GEN 1 
BRESSAN CES 1 
BRKIC UDI 2 
BUFFON JUV 16 
CARBONI CAG 1 
CARRIZO INT 1 
COLOMBI CAG 8 
COLOMBO NAP 1 
CONSIGLI ATA 11 
CORDAZ PAR 1 
CRAGNO CAG 2 
DA COSTA SAM 10 
DE SANCTIS ROM 15 
DIEGO LOPEZ MIL 13 
FREZZOLINI ATA 1 
FULIGNATI PAL 1 
GABRIEL MIL 1 
GILLET TOR 2 
GOLLINI VER 1 
HANDANOVIC INT 15 
IACOBUCCI PAR 1 
KARNEZIS UDI 1 
KELAVA UDI 1 
LAMANNA GEN 1 
LEALI CES 8 
LOBONT ROM 1 
LUPATELLI FIO 1 
MARCHETTI LAZ 12 
MASSOLO SAM 1 
MIHAYLOV VER 1 
MIRANTE PAR 12 
NETO FIO 13 
PADELLI TOR 11 
PEGOLO SAS 7 
PERIN GEN 12 
POLITO SAS 1 
POMINI SAS 2 
PUGGIONI CHI 2 
RAFAEL C.B. NAP 14 
RAFAEL D.A. VER 10 
ROSATI NAP 1 
RUBINHO JUV 1 
SCUFFET UDI 11 
SECULIN CHI 1 
SEPE EMP 2 
SKORUPSKI ROM 1 
SORRENTINO PAL 10 
SPORTIELLO ATA 1 
STORARI JUV 1 
STRAKOSHA LAZ 1 
TATARUSANU FIO 1 
UJKANI PAL 1 
VIVIANO SAM 3 
difensori
ABATE MIL 7 
ACERBI SAS 4 
AGOSTINI VER 5 
ALBERTAZZI MIL 3 
ALBIOL NAP 11 
ALEX MIL 14 
ALONSO FIO 3 
ANDELKOVIC PAL 5 
ANDREOLLI INT 4 
ANTEI SAS 3 
ANTONINI GEN 6 
ARIAUDO SAS 4 
ASTORI ROM 8 
AVELAR CAG 4 
BACHINI EMP 1 
BALZANO CAG 3 
BALZARETTI ROM 5 
BAMBA PAL 5 
BARBA EMP 2 
BARZAGLI JUV 14 
BASANTA FIO 6 
BASTA LAZ 13 
BELLINI ATA 2 
BELMONTE UDI 2 
BENALOUANE ATA 6 
BENEDETTI CAG 3 
BIANCHETTI EMP 3 
BIANCO SAS 3 
BIAVA ATA 8 
BIRAGHI CHI 5 
BOCHNIEWICZ UDI 1 
BONERA MIL 5 
BONUCCI JUV 12 
BOVO TOR 6 
BRAAFHEID LAZ 4 
BRITOS NAP 5 
BRIVIO ATA 5 
BUBNJIC UDI 3 
BURDISSO GEN 7 
CACCIATORE SAM 5 
CACERES JUV 6 
CAMPAGNARO INT 6 
CANA LAZ 7 
CANNAVARO SAS 7 
CAPELLI CES 5 
CAPUANO CAG 5 
CASSANI PAR 8 
CASTAN ROM 12 
CAVANDA LAZ 4 
CEPPITELLI CAG 5 
CESAR CHI 4 
CHERUBIN ATA 4 
CHIELLINI JUV 15 
CIANI LAZ 4 
CODA UDI 3 
COLE ROM 11 
COSTA PAR 4 
DAINELLI CHI 7 
D'AMBROSIO INT 5 
DANILO UDI 8 
DAPRELA' PAL 4 
DARMIAN TOR 11 
DE CEGLIE JUV 3 
DE MAIO GEN 6 
DE SCIGLIO MIL 8 
DE SILVESTRI SAM 10 
DE VRIJ LAZ 12 
DEL GROSSO ATA 4 
DODO' INT 8 
DOMIZZI UDI 7 
DONKOR INT 1 
DRAME' ATA 5 
EDENILSON GEN 5 
EDIMAR CHI 4 
ELEZ LAZ 1 
EMANUELSON ROM 7 
EMERSON PAL 4 
EVRA JUV 11 
FARAONI UDI 4 
FEDDAL PAL 2 
FELIPE PAR 4 
FORNASIER SAM 4 
FREY CHI 5 
GABRIEL SILVA UDI 11 
GAMBERINI CHI 5 
GASTALDELLO SAM 9 
GASTON SILVA TOR 3 
GAZZOLA SAS 4 
GENTILETTI LAZ 5 
GHOULAM NAP 6 
GLIK TOR 10 
GOBBI PAR 7 
GONZALEZ VER 5 
GONZALEZ G. PAL 4 
HEGAZI FIO 2 
HENRIQUE NAP 8 
HEURTAUX UDI 9 
HYSAJ EMP 4 
IZZO GEN 4 
JANSSON TOR 4 
JONATHAN INT 10 
JUAN JESUS INT 8 
KONKO LAZ 5 
KOULIBALY NAP 5 
KRAJNC CES 4 
LAURINI EMP 3 
LAZAAR PAL 5 
LICHTSTEINER JUV 16 
LONGHI SAS 5 
LUCARELLI PAR 9 
LUCCHINI CES 6 
LUNA VER 6 
MAGGIO NAP 6 
MAGNUSSON CES 2 
MAICON ROM 15 
MAKSIMOVIC TOR 6 
MANFREDINI SAS 5 
MANOLAS ROM 10 
MANTOVANI PAL 4 
MARCHESE GEN 8 
MARIO RUI EMP 3 
MARQUES VER 4 
MARQUEZ VER 8 
MARTIC VER 4 
MARTINELLI EMP 1 
MASIELLO TOR 4 
MBAYE INT 4 
MESBAH PAR 4 
MESTO NAP 4 
MEXES MIL 5 
MILANOVIC MILAN PAL 3 
MOLINARO TOR 9 
MONTELEONE PAL 1 
MORAS VER 6 
MORETTI TOR 7 
MORGANELLA PAL 4 
MOTTA JUV 3 
MUNOZ PAL 6 
MURRU CAG 6 
NAGATOMO INT 13 
NALDO UDI 3 
NICA CES 3 
NOVARETTI LAZ 4 
OGBONNA JUV 5 
PALETTA PAR 10 
PAPP CHI 3 
PARENTE GEN 1 
PASQUAL FIO 12 
PASQUALE UDI 3 
PEDRO MENDES PAR 3 
PELUSO SAS 6 
PERICO CES 4 
PIRIS UDI 5 
PISANO E. PAL 6 
PISANO F. CAG 5 
PORTANOVA GEN 4 
RADU LAZ 8 
RAIMONDI ATA 4 
RAMI MIL 11 
RANOCCHIA INT 12 
REGINI SAM 6 
RENZETTI CES 6 
RISPOLI PAR 4 
RISTOVSKI PAR 5 
RODRIGUEZ GON. FIO 14 
RODRIGUEZ GUI. VER 5 
ROMAGNOLI ROM 4 
RONCAGLIA FIO 5 
ROSI GEN 6 
ROSSETTINI CAG 6 
RUGANI EMP 7 
SALAMON SAM 3 
SAMPIRISI GEN 4 
SANTACROCE PAR 2 
SARDO CHI 5 
SAVIC FIO 9 
SCALONI ATA 2 
SILVESTRE INT 3 
SORENSEN VER 2 
STENDARDO ATA 7 
STRUNA PAL 1 
TERRANOVA SAS 8 
TERZI PAL 5 
TOMOVIC FIO 8 
TONELLI EMP 6 
TOROSIDIS ROM 6 
VESOVIC TOR 2 
VIDIC INT 13 
VINICIUS LAZ 2 
VITIELLO PAL 2 
VOLTA CES 4 
VRSALJKO SAS 7 
WAGUE UDI 2 
ZACCARDO MIL 3 
ZAPATA C. MIL 6 
ZAPPACOSTA ATA 3 
ZUKANOVIC CHI 6 
ZUNIGA NAP 12 
centrocampisti
ACQUAH PAR 6 
ADRYAN CAG 4 
ALHASSAN UDI 3 
ALHASSAN MORO GEN 1 
ALLAN UDI 10 
ALVAREZ INT 10 
ANTONELLI GEN 8 
AQUILANI FIO 16 
ARMERO MIL 7 
ASAMOAH JUV 9 
BADU UDI 11 
BARELLA CAG 1 
BARRETO PAL 9 
BASELLI ATA 6 
BASHA TOR 4 
BELLOMO CHI 5 
BENASSI TOR 6 
BENTIVOGLIO CHI 4 
BERTOLACCI GEN 7 
BIABIANY PAR 14 
BIDAOUI PAR 5 
BIGLIA LAZ 7 
BIONDINI SAS 7 
BIRSA CHI 7 
BOLZONI PAL 5 
BONAVENTURA ATA 15 
BORJA VALERO FIO 19 
BRIENZA CES 5 
BRIGHI SAS 8 
BRILLANTE FIO 3 
CABRERA CAG 3 
CAIO RANGEL CAG 3 
CAMPANA SAM 4 
*CAMPANHARO VER 2 
CANDREVA LAZ 19 
CAPELLO CAG 3 
CARMONA ATA 7 
CASCIONE CES 7 
CATALDI LAZ 3 
CAZZOLA CES 5 
CHIBSAH SAS 4 
CHOCHEV PAL 4 
CHRISTODOULOPOULOS VER 7 
CIGARINI ATA 10 
COFIE GEN 4 
COMAN JUV 2 
CONTI CAG 10 
COPPOLA CES 4 
COSSU CAG 8 
CRISETIG CAG 4 
CRISTANTE MIL 4 
CROCE EMP 4 
CUADRADO FIO 22 
D'ALESSANDRO ATA 5 
DE FEUDIS CES 4 
DE GUZMAN NAP 9 
DE JONG MIL 10 
DE ROSSI ROM 13 
DE VITIS SAM 1 
DELLA ROCCA PAL 3 
DESSENA CAG 5 
DI GENNARO PAL 5 
DONADEL NAP 3 
DONSAH CAG 2 
DUNCAN SAM 5 
DZEMAILI NAP 13 
EDERSON LAZ 5 
EKDAL CAG 7 
EL KADDOURI TOR 12 
EMBALO PAL 1 
ERIKSSON CAG 3 
ESSIEN MIL 3 
ESTIGARRIBIA ATA 6 
FARNERUD TOR 6 
FELIPE ANDERSON LAZ 6 
FERNANDES UDI 13 
FERNANDEZ FIO 9 
FETFATZIDIS GEN 8 
FLORENZI ROM 15 
GAGLIARDINI ATA 3 
GALLOPPA PAR 5 
GARGANO NAP 5 
GAZZI TOR 4 
GIORGI CES 6 
GONZALEZ LAZ 7 
GRASSI ATA 1 
GRECO GEN 7 
GUANA CHI 4 
GUARENTE EMP 6 
GUARIN INT 12 
GUILHERME UDI 5 
HALLBERG UDI 3 
HALLFREDSSON VER 10 
HAMSIK NAP 20 
HERNANES INT 16 
HETEMAJ CHI 7 
HONDA MIL 9 
IAGO GEN 5 
ILICIC FIO 13 
IMPROTA GEN 5 
INLER NAP 11 
IONITA VER 4 
IZCO CHI 6 
JAADI UDI 1 
JADSON UDI 2 
JANKOVIC B. VER 8 
JOAQUIN FIO 10 
JORGINHO NAP 14 
JORQUERA PAR 4 
KEITA ROM 7 
KONE UDI 11 
KOVACIC INT 11 
KRHIN INT 4 
KRSTICIC SAM 7 
KUCKA GEN 9 
KUPISZ CHI 2 
KURTIC SAS 8 
KUZMANOVIC INT 4 
LAXALT EMP 3 
LAZAREVIC CHI 5 
LAZZARI FIO 5 
LEDESMA LAZ 8 
LODI PAR 11 
LUCAS SOUZA PAR 2 
LULIC LAZ 13 
MAGNANELLI SAS 5 
MAIELLO NAP 2 
MANGANI CHI 5 
MARCHIONNI SAM 7 
MARCHISIO JUV 16 
MARESCA PAL 7 
MARIN FIO 11 
MARRONE JUV 4 
MASTOUR MIL 2 
MAURI J. PAR 1 
MAURI S. LAZ 12 
MEDEL INT 8 
MENEZ MIL 16 
MERTENS NAP 22 
MIGLIACCIO ATA 4 
MISSIROLI SAS 6 
MOLINA ATA 4 
MONTOLIVO MIL 10 
MORALEZ ATA 13 
MORO EMP 3 
MUNTARI MIL 8 
MURONI CAG 1 
MUSSIS GEN 4 
M'VILA INT 7 
NAINGGOLAN ROM 12 
NGOYI PAL 3 
NOCERINO TOR 8 
OBBADI VER 6 
OBI INT 3 
OBIANG SAM 8 
OCTAVIO FIO 3 
ONAZI LAZ 6 
PADOIN JUV 4 
PALOMBO SAM 8 
PAREDES ROM 4 
PAROLO LAZ 14 
PEPE JUV 3 
PEREIRINHA LAZ 4 
PEREYRA JUV 11 
PEREZ TOR 3 
PEROTTI GEN 10 
PINZI UDI 7 
PIRLO JUV 16 
PIZARRO FIO 10 
PJANIC ROM 18 
POGBA JUV 18 
POLI MIL 7 
PUCCIARELLI EMP 5 
PULZETTI CES 5 
QUAISON PAL 3 
RADOSEVIC NAP 2 
RADOVANOVIC CHI 4 
RAGUSA GEN 6 
RIERA UDI 6 
RIGONI PAL 10 
RINCON GEN 6 
RIZZO SAM 2 
ROMULO JUV 10 
SALA VER 5 
SANCHEZ MINO TOR 7 
SANTANA GEN 5 
SAPONARA MIL 6 
SCHELOTTO CHI 5 
SESTU CHI 4 
SIGNORELLI EMP 4 
SORIANO SAM 10 
SPINAZZOLA ATA 2 
STROOTMAN ROM 16 
STURARO GEN 7 
TABANELLI CES 4 
TACHTSIDIS VER 6 
UCAN ROM 5 
VALDIFIORI EMP 5 
VALOTI VER 1 
VALZANIA CES 1 
VARGAS FIO 11 
VAZQUEZ PAL 10 
VECINO EMP 6 
VERDI EMP 7 
VIDAL JUV 20 
VIVES TOR 5 
WIDMER UDI 6 
WOLSKI FIO 4 
WSZOLEK SAM 4 
YABRE CES 1 
ZAPATA A. UDI 4 
ZE' EDUARDO CES 4 
ZIELINSKI UDI 5 
attaccanti
AGUIRRE EMP 10 
AMAURI PAR 16 
BABACAR FIO 13 
BARRETO TOR 10 
BELECK FIO 6 
BELFODIL PAR 14 
BELOTTI PAL 16 
BENTIVEGNA PAL 1 
BERARDI SAS 26 
BERGESSIO SAM 18 
BERNARDESCHI FIO 11 
BIANCHI ATA 11 
BOAKYE ATA 12 
BORRIELLO ROM 13 
BOTTA CHI 8 
CALLEJON NAP 25 
CASSANO PAR 23 
CERCI TOR 23 
CERRI PAR 3 
CHANTURIA VER 10 
DEFREL CES 11 
DENIS ATA 23 
DESTRO ROM 24 
DI NATALE UDI 29 
DJORDJEVIC LAZ 17 
DJURIC CES 6 
DYBALA PAL 15 
EDER SAM 20 
EL SHAARAWY MIL 21 
FARIAS CAG 8 
FEDATO SAM 9 
FLOCCARI SAS 13 
FLORO FLORES SAS 14 
GABBIADINI SAM 19 
GARRITANO CES 10 
GERVINHO ROM 23 
GHEZZAL PAR 5 
GIOVINCO JUV 14 
GLIOZZI SAS 2 
GOMEZ M. FIO 29 
GOMEZ T. VER 14 
HIGUAIN NAP 34 
IAKOVENKO FIO 8 
IBARBO CAG 15 
ICARDI INT 25 
INSIGNE NAP 15 
ITURBE ROM 21 
KEITA LAZ 18 
KLOSE LAZ 20 
LARRONDO TOR 11 
LJAJIC ROM 16 
LLORENTE JUV 27 
LOI CAG 1 
LONGO CAG 13 
MACCARONE EMP 14 
MARILUNGO CES 13 
MARTINEZ TOR 12 
MATRI GEN 19 
MAXI LOPEZ CHI 14 
MCHEDLIDZE EMP 6 
MEGGIORINI CHI 12 
MICHU NAP 16 
MONCINI CES 1 
MORATA JUV 20 
MURIEL UDI 17 
NENE' VER 14 
NIANG MIL 11 
NICO LOPEZ VER 12 
OKAKA SAM 16 
OSVALDO INT 18 
PALACIO INT 27 
PALLADINO PAR 12 
PALOSCHI CHI 20 
PANDEV NAP 15 
PAVOLETTI SAS 11 
PAZZINI MIL 18 
PELLISSIER CHI 11 
PEREA LAZ 9 
PINILLA GEN 14 
POZZI PAR 8 
QUAGLIARELLA TOR 20 
RIBAS GEN 4 
RODRIGUEZ CES 9 
ROSSETI ATA 8 
ROSSI FIO 32 
ROVINI EMP 4 
SANABRIA ROM 6 
SANSONE G. SAM 13 
SANSONE N. SAS 15 
SAU CAG 19 
SHEKILADZE EMP 3 
SUCCI CES 10 
TAVANO EMP 16 
TEVEZ JUV 35 
THEREAU UDI 16 
TONI VER 26 
TOTTI ROM 23 
TOUNKARA LAZ 4 
ZAPATA D. NAP 13 
ZAZA SAS 17 
Categorie: Fantacalcio, FantaLega

Fantalega 2014-2015

agosto 27, 2014 Lascia un commento

ALBO D’ORO FANTALEGA

2006-2007 STELLA BLU KATIVERIA

2007-2008 PIPPO

2008-2009 MIDDLESBORON

2009-2010 STELLA BLU KATIVERIA

2010-2011 STELLA BLU KATIVERIA

2011-2012 U.S.LU PINNACCHIO

2012-2013 PLUTO (PIPPO)

2013-2014 CIOPPERSSON (CIOPPI)

ALBO D’ORO FANTACHAMPIONS

2006-2007 NIZZI

2007-2008 PIPPO

2008-2009 PIPPO

2009-2010 CIOPPERSSON

2010-2011 CIOPPERSSON

2011-2012 U.S.LU PINNACCHIO

2012-2013 F.C.DELIRIO

2013-2014 F.C.DELIRIO

LISTA PARTECIPANTI:

Dallo-Banco: CIOPPISUCA

Lello: IN CULO A TUTTI

Pippo: CIOMPINO

Luciano: Trinidad Moruga Scorpion

Michele-Pino: F.C.DELIRIO

Cento: CENTO Mega

Riccardo: SHALKE 051

Nizzi: Nizzi

Luca: L-Team

Team10:

giornate

Data ASTA:

02/09/2014 ore 21

Link file excel Fantalega 2013-2014

Categorie: Fantacalcio, FantaLega

Python: current trace calculator

luglio 30, 2014 Lascia un commento

la formula approssimata per il calcolo della corrente massima su una pista di spessore ‘thickness’, larghezza ‘width’, tenendo conto del delta termico ‘t_diff’ è:

I = k_layer * t_diff^0.44 * A^0.725

dove k_layer assume i valori di 0.024 per gli inner layer e 0.048 per i layer esterni.

Il codice python è il seguente:

import Tkinter as Tk
import ttk
import tkMessageBox as Mb

CENTER = Tk.N + Tk.S + Tk.W + Tk.E


class View(object):
    def __init__(self):
        self.root = Tk.Tk()
        self.root.title('Current trace calculator')
        self.rb_var = Tk.IntVar()
        self.thickness_var = Tk.StringVar()
        self.current_var = Tk.StringVar()
        self.t_diff_var = Tk.StringVar()
        self.width_var = Tk.StringVar()

    def build_ui(self):
        """Build the UI with all widgets"""
        frame = Tk.Frame(self.root)
        frame.pack(fill=Tk.BOTH)

        ##### Radio buttons
        rb_inner = Tk.Radiobutton(frame, text='Inner', variable=self.rb_var,
                                  value=1)
        rb_inner.grid(sticky=CENTER, row=0, column=0, padx=5)
        rb_ext = Tk.Radiobutton(frame, text='External', variable=self.rb_var,
                                value=2)
        rb_ext.grid(sticky=CENTER, row=0, column=1, padx=5)

        ttk.Separator(frame).grid(sticky=CENTER, row=1, column=0,
                                  columnspan=2, padx=2, pady=2)
        ##### Thickness
        Tk.Label(frame, text='* Cu thickness (um)').grid(
            sticky=CENTER, row=2, column=0, padx=2, pady=2)
        en_thickness = Tk.Entry(frame, textvariable=self.thickness_var)
        en_thickness.grid(sticky=CENTER, row=2, column=1, padx=2, pady=2)
        ttk.Separator(frame).grid(sticky=CENTER, row=3, column=0,
                                  columnspan=2, padx=2, pady=2)

        ##### T_diff
        Tk.Label(frame, text='* delta temp.(max - Ta)', width=25).grid(
            sticky=CENTER, row=4, column=0, padx=2, pady=2)
        en_t_diff = Tk.Entry(frame, width=5, textvariable=self.t_diff_var)
        en_t_diff.grid(sticky=CENTER, row=4, column=1, padx=2, pady=2)

        ttk.Separator(frame).grid(sticky=CENTER, row=5, column=0,
                                  columnspan=2, padx=2, pady=2)
        ##### width box
        Tk.Label(frame, text='* Trace width (mils)', width=25).grid(
            sticky=CENTER, row=6, column=0, padx=2, pady=2)
        en_width = Tk.Entry(frame, textvariable=self.width_var)
        en_width.grid(sticky=CENTER, row=6, column=1, padx=2, pady=2)
        ttk.Separator(frame).grid(sticky=CENTER, row=7, column=0,
                                  columnspan=2, padx=2, pady=2)

        ##### current box
        Tk.Label(frame, text='Current max (A)', width=25).grid(
            sticky=CENTER, row=8, column=0, padx=2, pady=2)
        en_current = Tk.Label(frame, bg='yellow',
                              textvariable=self.current_var, anchor='w')
        en_current.grid(sticky=CENTER, row=8, column=1, padx=2, pady=2)
        ttk.Separator(frame).grid(sticky=CENTER, row=9, column=0,
                                  columnspan=2, padx=2, pady=2)

        ##### buttons
        self.btn_gen = Tk.Button(frame, text='Calculate!')
        self.btn_gen.grid(sticky=CENTER, row=10, column=0, padx=2, pady=2)
        btn_quit = Tk.Button(frame, text='Quit', command=self.root.destroy)
        btn_quit.grid(sticky=CENTER, row=10, column=1, padx=2, pady=2)
        self.rb_var.set(2)

    def start(self):
        """Start the mainloop"""
        self.root.mainloop()


class Controller(object):
    def __init__(self):
        self.view = View()
        self.view.build_ui()
        self.view.thickness_var.set('35')
        self.view.t_diff_var.set('15')

    def run_app(self):
        """Start the View (UI) mainloop"""
        self.view.start()

    def bind_widgets(self):
        """Bind the view widgets to the callbacks"""
        self.view.btn_gen.configure(command=self.on_calculate)

    def on_calculate(self):
        """Calculate Button callback, calculate the max current"""
        try:
            t_diff = float(self.view.t_diff_var.get())
            thickness = float(self.view.thickness_var.get())
            width = float(self.view.width_var.get())
        except (TypeError, ValueError):
            alert("Fill [*] with numbers not literals!")
        else:
            k_layer = 0.024 if self.view.rb_var.get() == 1 else 0.048
            current = calculate_current(width, thickness, t_diff, k_layer)
            self.view.current_var.set(str(current))


def calculate_current(width, thickness, t_diff, k_layer):
    """Calculate the max current for a trace of width=width.
       formula: I = k_layer * t_diff^0.44 * A^0.725
       A is measured in mils^2
    """
    section = thickness / 25.4 * width
    return k_layer * t_diff**0.44 * section**0.725


def alert(message):
    """Return a MessageBox with "string" message passed as argument"""
    Mb.showinfo(title='Alert!', message=message, icon=Mb.INFO)


def main():
    c = Controller()
    c.bind_widgets()
    c.run_app()


if __name__ == '__main__':
    main()

curtracecalc

Categorie: Kubuntu, python

Kubuntu Amarok shoutcast

luglio 17, 2014 Lascia un commento

Per attivare shoutcast su Amarok procedere come segue.

Accedere al gestore degli script:

Impostazioni, Configura Amarok, Script

premere il bottone Gestisci gli script

nella entry di ricerca digitare

SHOUTcast

ed installare SHOUTcast service

SHOUTcast1

Confermare, chiudere e riavviare Amarok.
Tornare in:

Impostazioni, Configura Amarok, Script

e attivare lo script installato in precedenza:

SHOUTcast2

Ora dal pulsante Internet sarà possibile ascoltare “in shoutcast”!

SHOUTcast3

Categorie: Kubuntu

Kubuntu: connettere dispositivo MTP Android

giugno 23, 2014 Lascia un commento

Ho trovato la soluzione in questo sito, per connettere il mio dispositivo android
via MTP, al mio Kubuntu 13.10.

Trattasi di HUAWEI G510.
Vi sarete accorti che con Android 4.1.1 ci sono difficoltà nel connettere il dispositivo via USB, ebbene procedere come segue, aprire terminale ed installare i seguenti pacchetti:

sudo apt-get install mtpfs mtp-tools

creare la dir dove verrà montato il dispositivo:

sudo mkdir /media/MTPHuawei

dare i permessi necessari:

sudo chmod 775 /media/MTPHuawei

connettere il dispositivo android e nella schermata proposta per la connessione, scegliere MTP, poi tornando sul terminale del PC:

sudo mtpfs -o allow_other /media/MTPHuawei

Ricordarsi di smontare al termine delle operazioni effettuate con:

sudo umount mtpfs

Se vogliamo creare una regola per udev, in modo che il dispositivo venga riconosciuto e montato in automatico, da terminale con dispositivo connesso:

mpt-detect

appuntarsi IDVendor (VID) e IDProduct (PID)
aprire con editor di testo:

sudo kate /etc/udev/rules.d/51-android.rules

e scrivere la seguente riga

SUBSYSTEM=="usb", ATTR{idVendor}=="<vendorId>", ATTR{idProduct}=="<productId>", MODE="0666"

dove sostituiremo al posto di vendorId e productId, i valori precedentemente appuntati.
Salviamo e chiudiamo il file e riavviamo udev:

sudo service udev restart
Categorie: Kubuntu, Linux

Lubuntu Virtualbox unica risoluzione monitor 640×480

giugno 3, 2014 2 commenti

Una volta installata la distro su Virtualbox, quando si va in preferenze > impostazioni del monitor, per modificare la risoluzione del monitor, ci si accroge che è presente solo la 640×480.

schermo_def

Per aggiustare le cose, oltre ad installare le guest-addition, entrare nel terminale ed installare i seguenti pacchetti:

sudo apt-get install virtualbox-guest-utils virtualbox-guest-x11 virtualbox-guest-dkms

riavviando sarà possibile scegliere la risoluzione desiderata.

schermo_def2

alternativamente:

sudo apt-get install virtualbox-ose-guest-utils virtualbox-ose-guest-x11 virtualbox-ose-guest-dkms

Ricordarsi di dare al proprio utente l’appartenenza al gruppo vboxusers!!

sudo usermod -G vboxusers -a $USER
Categorie: Lubuntu, VirtualBox
Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 26 follower