quinta-feira, maio 27, 2010

8 técnicas para gerar gráficos apenas com css

http://sixrevisions.com/css/css_techniques_charting_data/

Boa leitura!

--
Atenciosamente

--
=========================
Alexandre Andrade
Hipercenter.com

domingo, maio 23, 2010

Ciclo de relase do OpenBSD


O vídeo completo pode ser visto aqui:

http://www.youtube.com/watch?v=i7pkyDUX5uM&feature=player_embedded

Mas basicamente, o segredo do BSD para as versões saírem sempre na data programada é:

- no início do período, se definem as correções e pequenas melhorias em relação à versão anterior, os novos recursos e as grandes mudanças são incluídas no ínicio.

- Gerar snapshots completos todo dia, dessa forma sempre se pode testar o estágio atual de desenvolvimento, e os problemas vão sendo corrigidos e a versão evolui.

- no final do período, estabelece-se um período de lock-in, a partir do qual são apenas alguns ajustes finos.
- todas as datas de lock e unlock são surpresas, porque pessoas avisadas são mais preguiçosas. Se não avisadas, as pessoas buscam terminar a tarefa e os testes o quanto antes.
- desenvolvedores com baixo nível de testes são punidos.


--
Atenciosamente

--
=========================
Alexandre Andrade
Hipercenter.com

quinta-feira, maio 20, 2010

Script to generate web2py schema (models) from mysql

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#script to generate schemas from dbs
#by Alexandre Andrade alexandremasbr@gmail.com
#www.hipercenter.com

#place your config here
passwd="mypass"
user="myuser"
host="localhost"
db = 'mydb'
port='3306'

import MySQLdb
bd=MySQLdb.connect(host=host,user=user,passwd=passwd,db = db, use_unicode=True)

def query(bd,sql):
bd.query(sql)
r = bd.store_result()
rows = r.fetch_row(maxrows=0,how=1)
return rows

def get_tables():
rows = query(bd,'show tables')
tables=[]
for row in rows:
tables.append(row['Tables_in_'+db])
return tables

#tables()

def get_fields(table):
print table
rows = query(bd,'show fields from '+ table)
fields=[]
for row in rows:
#print row
fields.append(row)
return fields

def field_type(field):
if field['Type'][0:7]=='varchar':
tipo = ",'string'"
elif field['Type'][:8]=='longtext':
tipo = ",'text'"
elif field['Type'][:3]=='int':
tipo = ",'integer'"
elif field['Type'][:4]=='date':
tipo = ",'date'"
elif field['Type'][:7]=='tinyint':
tipo = ",'int'"
elif field['Type'][:11]=='mediumtext':
tipo = ",'text'"
elif field['Type'][:4]=='char':
tipo = ",'text'"
else:
print field['Type'][0:10]
return tipo

def primarykey(field):
if field['Extra']=='auto_increment':
pk = True
else:
pk = False
return pk

def define_table(table):
fields = get_fields(table)
result = []
head = 'db = DAL("mysql://'+ user+ ':'+passwd+'@'+host+':'+port+'/'+db+'", pool_size=10)\r\r'

line = "db.define_table('"+table+"'"
result.append(line)
for field in fields:
if primarykey(field) == True:
pk =field['Field']
#print pk
tipo = field_type(field)
line = " Field('"+field['Field']+"'"+tipo+")"
result.append(line)
line
try:
line = " primarykey=['"+pk+"']"
result.append(line)
except:
pass
out = ',\r'.join(result)
output = head + out + '\r)'
print output
return output

def define_db():
tables = get_tables()
r = []
for table in tables:
r.append(define_table(table))
result = '\r \r'.join(r)
return result

r = define_db()
f = open('db_'+db+'.py', 'w')
f.write(r)
f.close()

Finally I have done it. 

It can be improved to a form in appadmin, use the model to another db (postgresql, etc), and generate the file in /models.

You can see the code below: 

----------------------------------------------------------

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#script to generate schemas from dbs
#by Alexandre Andrade alexandremasbr@gmail.com

#config it here
passwd="mypass"
user="myuser"
host="localhost"
db = 'mydb'
port='3306'


def query(bd,sql):
    bd.query(sql)
    r = bd.store_result()
    rows = r.fetch_row(maxrows=0,how=1)
    return rows
    
def get_tables():
    rows = query(bd,'show tables')
    tables=[]
    for row in rows:
        tables.append(row['Tables_in_'+db])
    return tables
    
#tables()

def get_fields(table):
    print table
    rows = query(bd,'show fields from '+ table)
    fields=[]
    for row in rows:
        #print row
        fields.append(row)
    return fields
    
def field_type(field):
    if field['Type'][0:7]=='varchar':
        tipo = ",'string'"
    elif field['Type'][:8]=='longtext':
        tipo = ",'text'"
    elif field['Type'][:3]=='int':
        tipo = ",'integer'"
    elif field['Type'][:4]=='date':
        tipo = ",'date'"
    elif field['Type'][:7]=='tinyint':
        tipo = ",'int'"
    elif field['Type'][:11]=='mediumtext':
        tipo = ",'text'"
    elif field['Type'][:4]=='char':
        tipo = ",'text'"
    else:
        print  field['Type'][0:10]
    return tipo
    
def primarykey(field):
    if field['Extra']=='auto_increment':
        pk = True
    else:
        pk = False
    return pk

def define_table(table):
    fields =  get_fields(table)
    result = []
    head = 'db = DAL("mysql://'+ user+ ':'+passwd+'@'+host+':'+port+'/'+db+'", pool_size=10)\r\r'

    line = "db.define_table('"+table+"'"
    result.append(line)  
    for field in fields:
        if primarykey(field) == True:
            pk =field['Field']
            #print pk
        tipo = field_type(field)
        line = "    Field('"+field['Field']+"'"+tipo+")"
        result.append(line)
        line
    try:
        line = "    primarykey=['"+pk+"']"
        result.append(line)
    except:
        pass
    out = ',\r'.join(result)
    output = head + out + '\r)'
    print output
    return output

def define_db():
    tables = get_tables()
    r = []
    for table in tables:
        r.append(define_table(table))
    result = '\r \r'.join(r)
    return result

r = define_db()
f = open('db_'+db+'.py', 'w')
f.write(r)
f.close()

-----------------------------------------------------------

--
Atenciosamente

--
=========================
Alexandre Andrade
Hipercenter.com



--
Atenciosamente

--
=========================
Alexandre Andrade
Hipercenter.com

terça-feira, maio 04, 2010

Dica: VLC permite ver dvds em .iso ou .nrg sem montar

É isso mesmo. Antes de saber disso, eu montava os arquivos .iso com ferramentas como o Daemon Tools ou gmount para ver os dvds.

No Linux o problema era maior, porque os players do linux acessam diretamente os dispositivos, e não  diretório montado.

Com o VLC, isso ficou mais simples:  basta ir em abrir, e abrir o arquivo .iso ou .nrg.

Mais fácil, impossível.

--
Atenciosamente

--
=========================
Alexandre Andrade
Hipercenter.com

segunda-feira, maio 03, 2010

Gestão Pública do Esporte

Estou trabalhando há dois meses com a área de Esportes no Setor Público.


Onde trabalho se faz uma divisão em três tipos de esportes para políticas públicas:


  1. Esporte educacional – Políticas desenvolvidas em conjunto com a área educacional, focam essencialmente o ensino básico e médio

  2. Esporte de participação – Políticas desenvolvidas com o objetivo da prática esportiva para lazer e saúde, basicamente.

  3. Esporte de rendimento – Políticas para o esporte de competição amador.


Não percebi um esforço estruturado para profissionalizar o esporte, embora o esporte profissional seja o grande chamariz para a prática esportiva.


Também pouco se fez para estimular o Esporte como um setor da economia, como o Turismo ou até mesmo a Cultura.


É fato que trabalhar com esporte envolve atender a diversos públicos, com objetivos distintos, e normalmente com recursos muito escassos.


Quem for trabalhar nessa área, tem que ter um papel de articulação muito grande, pois há grande possibilidades de parcerias, mas pouco aproveitadas.


Também é muito pouco aproveitado o potencial de cooperação regional entre os municípios. A cooperação entre eles é essencial para vitalizar o esporte, especialmente o de rendimento e eventualmente o profissional.


Se alguém tiver algum material sobre gestão pública do Esporte e quiser me encaminhar, pode enviar para o e-mail alexandremasbr (arroba) gmail.com


--
Atenciosamente

--
=========================
Alexandre Andrade