NdVO.blog.br

O endereço deste blog mudou para ndvo.blog.br

Chega de tutela

fazer um comentário »

Ontem começou a votação no STF de ação que questiona a constitucionalidade de um artigo do Estatuto da Criança e do Adolescente que determina que cabe ao Estado definir o horário em que o um programa pode ir ao ar.

O voto do Ministro Dias Toffoli ressaltou um traço lamentável de nossa cultura: tendemos a ver o povo, especialmente o pobre, como incapaz.

Ele disse:

É chegada a hora de pararmos de pensar sistematicamente que o povo deve ser tutelado pelo Estado, ou que o povo não tem capacidade de discernimento ou que o povo brasileiro em razão de condições sociais não teria a dignidade como ser humano de saber fazer as suas opções pessoais, individuais

São muitas as instituições brasileiras que partem do princípio da incapacidade do povo de tomar decisões sensatas diante de problemas corriqueiros. É o caso da classificação estatal de conteúdo na televisão, em jogos, videogames. Também é o caso de outras instituições mais bem estabelecidas e menos questionadas, como o FGTS, o 13º salário, o voto obrigatório

Leia o restante no ndvo.blog.br

Escrito por ndvo

01 dezembro 2011 em 2:10 pm

Publicado em Uncategorized

Importar arquivo grande com phpmyadmin

fazer um comentário »

O phpmyadmin tem um limite muito baixo para upload de arquivos.

Para contornar esse problema, vamos fazer com que o programa consulte um diretório no servidor onde constarão os arquivos sql a ser importados, de modo que poderemos fazer o upload de tais arquivos via FTP ou SSH, por exemplo.

Estou supondo que você está usando o Debian, mas não é difícil adaptar o que vai dito aqui a outras distribuições.

Primeiramente edite o arquivo /etc/phpmyadmin/config.inc.php

Altere a linha

$cfg['UploadDir'] = ''

para

$cfg['UploadDir'] = 'upload'

O nome upload é arbitrário. Este é o nome da pasta que vamos criar para armazenar os arquivos candidatos à importação.

Agora vamos criar a pasta:

mkdir /usr/share/phpmyadmin/upload

Agora basta jogar os arquivos desejados na pasta upload que você criou.

Quando você acessar o phpmyadmin, na aba de importação, haverá uma lista de seleção para você escolher que arquivo daquele diretório deseja usar.

Escrito por ndvo

23 novembro 2011 em 5:18 pm

Publicado em Drupal, Internet

Novo endereço deste blog

fazer um comentário »

Finalmente arrumei tempo para migrar o blog para Drupal. Isso é bom porque eu não entendo realmente nada do WordPress e, apesar de gostar muito da ferramenta que fornecem para blogs, não tenho por enquanto interesse em aprender a fazer coisas mais complexas com a ferramenta.

Como o novo site está usando o CMS que mais domino e está em minha hospedagem, vou poder adicionar novas funcionalidades à vontade. A primeira será a disponibilização de mais uma forma de organização dos posts. Explico-me: em um blog os posts aparecem na ordem inversa da cronológica, o que faz sentido para publicações periódicas. Ocorre que eu tendo a publicar tutoriais ou discussões que poderiam também ser organizados de forma didática, ou seja, os mais simples primeiro, mais complexos depois.

Com o Drupal passo, desde já, a oferecer as duas formas de organização.

O link para o novo endereço é: ndvo.blog.br

Escrito por ndvo

23 novembro 2011 em 7:32 am

Publicado em Uncategorized

Software para escolher esquemas de cores

fazer um comentário »

Nem todo mundo é bom em escolher cores que combinam entre si, especialmente daltônicos como eu.

O aplicativo Agave permite que você escolha dentre seis formas de combinação: Complementares, Complementares Divididas, Tríade, Tétrade, Análogas e Monocromáticas. Em seguida você escolhe uma cor e ele te apresenta as cores que formam uma boa combinação de acordo com a forma escolhida.

Aplicativo para selecionar esquema de cores.

Telas do Agave para selecionar esquema de cores

Se você estiver usando o Debian (ou um sistema baseado em Debian) você pode instalar o programa com o seguinte programa no terminal:

sudo apt-get install agave

Se preferir usar uma interface gráfica, acesse Sistema > Administração > Gerenciador de Pacotes Synaptic, pesquise por Agave, marque o programa para instalação e clique em “aplicar alterações”.

Escrito por ndvo

17 novembro 2011 em 8:04 am

Publicado em linux para iniciantes

Acrescentar um botão “salvar e cadastrar mais um” no Drupal 6

fazer um comentário »

Recebi uma demanda de tornar “mais fácil” o cadastramento de um determinado tipo de conteúdo em um site desenvolvido com Drupal. Já se vai longe o tempo em que eu achava que eu sabia o que uma pessoa quer dizer quando fala em “mais fácil”. Seja como for, tentei fazer o que me pareceu sensato e fui tentar melhorar a aparência e funcionalidades do formulário.

Ontem, mais de três meses depois de implementadas as melhorias, o demandante percebeu que eu tinha colocado um botão “salvar e cadastrar mais um” no formulário. Curioso, ele me perguntou para que aquilo servia. Passada a fase das explicações (que aquele botão permite que você salve e cadastre mais um) ele ficou empolgado porque poderia cadastrar vários conteúdos daquele tipo em sequência. Ora essa, pensei comigo mesmo, quer dizer então que isso talvez sirva para alguma coisa, e decidi postar aqui como chegar a esse resultado.

O primeiro passo é criar seu próprio módulo customizado. Na verdade, recomendo que para todo site drupal você tenha um módulo customizado onde você possa colocar suas funções personalizadas. Aprenda aqui como criar seu módulo customizado.

Em seguida você vai usar um hook (gancho) fornecido pelo Drupal que permite você alterar os formulários fornecidos pelo sistema. Eu usei o hook_form_alter que permite alterar qualquer formulário. Para fazer com que o botão “cadastrar mais um” apareça para o tipo de conteúdo “mensagem”, use as seguintes funções (as explicações estão em comentários no código)

/*
* Implementação do hook_form_alter
* O Drupal procura nos módulos habilitados por funções que terminem com "_form_alter"
* e as executa no momento da construção do formulário.
*/
function meumodulo_form_alter(&$form, $form_state, $form_id){
  //usando a função arg(), que recupera os argumentos da página
  // podemos decidir quando aplicar nossas modificações
  //Argumentos, para o Drupal, são informações passadas pela url, separadas por barra "/"
  //Assim em exemplo.com.br/node/add, o argumento 0 é node e o argumento 1 é add
  if (arg(0) == 'node' && arg(1) == 'add'){
    if ( arg(2) == 'mensagem'){
      $form['buttons']['novo']= array(
        '#type' => 'submit',
        //nome do botão
        '#value' =>'Salvar e Cadastrar mais um',
        //Peso (posição) do botão
        '#weight'=> 5,
        //Explicita uma função adicional a ser chamada quando o formulario for enviado
        //a função node_form_submit é default para botões "enviar"
        //a função meumodulo_novo_item é customizada para redirecionar o usuário
        '#submit'=> array('node_form_submit','meumodulo_novo_item'),
        '#post'=> array(),
        '#programmed'=>FALSE,
        '#tree'=>FALSE,
        '#parents'=>array('novo'),
        '#array_parents'=>array('buttons','novo'),
        '#processed'=> TRUE,
        '#description'=> NULL,
        '#attributes' => array(),
        '#required'=> FALSE,
        '#input'=> TRUE,
        '#name'=> 'op',
        '#button_type'=>'submit',
        '#executes_submit_callback'=> TRUE,
        '#process' => array('form_expand_ahah'),
        '#id'=> 'edit-novo',
        '#defaults_loaded'=>TRUE,
        '#sorted'=>TRUE
      );
    }
  }
}

function meumodulo_novo_item($form, &$form_state){
  //Incluir um item 'redirect' no $form_state
  //Redireciona para uma nova página de criação de conteúdo do mesmo tipo
  $form_state['redirect'] = array('node/add/'.arg(2));
}

Escrito por ndvo

08 novembro 2011 em 2:48 pm

Publicado em Drupal

Tchau Ubuntu, olá Debian

fazer um comentário »

Tenho usado o Ubuntu desde 2006 e nesse período o vi mudar muito, muito mesmo. Algumas dessas mudanças (ou melhor, muitas) tinham por objetivo deixar o Ubuntu menos parecido com aquele sistema operacional que me agradou em 2006. A tal da Central de Programas do Ubuntu em vez do bom e velho “Adicionar/Remover programas”, a retirada do Ekiga que eu tinha aprendido a gostar, a retirada do gimp (do gimp!!!), a troca da posição dos botões das janelas… Tudo isso me irritou muito, mas como o Ubuntu sempre foi uma das distribuições mais fáceis de instalar, a preguiça sempre me manteve com ele.

No início do ano a Canonical apelou: substituiu o gnome. Ah, isso não. Se ao menos tivesse sido pelo KDE, XFCE ou pelo menos Openbox, mas não… substituiu pelo Unity. O que raios é Unity? É a antiga interface do Ubuntu Netbook Remix. Uma interface pouco madura, construída pensando em netbooks.

Pois bem, até a versão 11.04 nós podíamos simplesmente selecionar o gnome como nosso desktop e pronto. Para terminar a meleca a Canonical agora disponibiliza o gnome3, e ele ainda vem meio hackeado por conta do Unity. Passei a testar o XFCE e o KDE. Gostei dos dois, mas ainda estou viciado no gnome. No Gnome 2!! A solução foi migrar para o Debian.

O Debian tem uma tradição mais respeitosa com seus usuários. Não fica mudando tudo o tempo todo, muito menos para agradar pessoas que nem o utilizam como Ubuntu. Além disso o Debian não troca de versão duas vezes por ano.

Instalei com sucesso o Debian squeeze no netbook e notebook. Agora só falta o computador do trabalho. Só tive um probleminha com a instalação: ele não detecta as redes sem fio durante a instalação. Isto não é tão ruim assim, basta que durante a instalação você plugue o cabo. Se não tiver internet durante a instalação ele instalará muito menos programas, exigindo mais esforço depois da instalação.

Escrito por ndvo

06 novembro 2011 em 9:25 pm

Publicado em linux para iniciantes

Regex para capturar números de telefone

fazer um comentário »

Segue um regex para capturar números de telefone que precisei fazer hoje.

(\(?(\d{2})?\)?[\s-]\(?(\d{2})?\)?[\s-](\d{4})[\s-](\d{4}))

Os parênteses trarão:
1: o número completo, tal como encontrado
2: o código do país
3: o código DDD
4: a primeira parte do número (4 dígitos)
5: a segunda parte do número (4 dígitos)

Escrito por ndvo

25 outubro 2011 em 3:04 pm

Publicado em Uncategorized

Pequena função PHP para converter o mês, na forma de texto em português, para número

fazer um comentário »

function _texto_para_mes($texto){
    $_texto_para_mes = array(
        'jan' => 1,
        'fev' => 2,
        'mar' => 3,
        'abr' => 4,
        'mai' => 5,
        'jun' => 6,
        'jul' => 7,
        'ago' => 8,
        'set' => 9,
        'out' => 10,
        'nov' => 11,
        'dez' => 12
    );
    $texto = strtolower(substr($texto, 0, 3));
    return $_texto_para_mes[$texto];
    }

Escrito por ndvo

17 outubro 2011 em 11:50 am

Publicado em Drupal, Html

Unity e Gnome 3

fazer um comentário »

Desde que ouvi falar do gnome-shell fiquei ansioso para começar a usá-lo. Toda essa história de se aproveitar os recursos gráficos disponíveis para melhorar a usabilidade do sistema parecia muito interessante.

Testei tanto o gnome-shell quanto o unity (que na época era o Ubuntu Netbook Remix) várias vezes. Em 2010 os dois me pareciam promissores e inacabados, mas eu apostava mais no gnome-shell porque ele ainda mantinha uma forma de usar mais parecida com o gnome normal.

De repente o Ubuntu adotou o Unity como desktop padrão (abril 2011 eu acho) e o Unity era ainda mais inacabado que o gnome-shell. Inúmeras opções e ferramentas foram simplesmente eliminadas das novas versões, chegando ao ponto de não permitir que o botão direito configurasse coisa alguma, os atalhos alt+F1 e alt+F2 desapareceram, o painel inferior sumiu e o superior não era mais configurável e aquela barra imensa na esquerda não aceitava qualquer tipo de personalização. De lá pra cá eu simplesmente selecionava o gnome clássico como desktop e esqueci esse negócio de unity.

Agora o Ubuntu me pregou outra peça. O bom e velho gnome-clássico perdeu os menus de preferências e administração, o gnome 3 não permite customizar os painéis ou o tamanho dos ícones gigantes que aparecem na tela de seleção dos programas e o Unity continua na mesma filosofia de “nós sabemos o que é melhor pra você” que ele tinha naquela época.

A customização do Ubuntu ficou simplesmente muito pior. Em resumo minha avaliação é a de que não houve melhora na usabilidade, os efeitos gráficos também não são melhores (antes nós já girávamos o cubo e as janelas pegavam fogo quando fechávamos). O que houve foi uma redução no número de opções de customização.

Em nome de prover um desktop simples e bonito à primeira vista estão criando um desktop de aparência enjoativa e difícil de customizar. Sei que vão dizer que isso é resistência ao novo. Discordo. A maioria dos usuários do Ubuntu já se deram ao trabalho de trocar de desktop (Windows para Ubuntu) e provaram que são capazes de se adaptar. A questão é que é fácil se adaptar quando a mudança é pra melhor.

Na minha opinião mudanças de layout são bem vindas, aproveitar os recursos gráficos também, mas retirar do usuário opções com as quais está habituado, isto não é bem vindo. O Ubuntu não precisa ser bom apenas para quem está migrando do Windows ou do Mac: ele precisa ser bom também para quem usa Linux há anos. Nós gostamos do Linux porque ele tem a nossa cara, a cara de cada um de seus milhões de usuários. Uma distribuição que tenha uma só aparência não parece uma distribuição Linux, mas uma distribuição Mac. É uma pena.

Agora me junto a vários outros que estão procurando outra distribuição para a qual migrar, preferencialmente que tenha o bom e velho gnome 2 ou o cada vez melhor xfce. Penso no Debian. Parece-me que eles são mais respeitosos com seus usuários. Por enquanto estou usando o Ubuntu com o XFCE que, felizmente ainda não resolver jogar o que tem de bom fora.

Escrito por ndvo

16 outubro 2011 em 11:03 am

Publicado em Uncategorized

Consolidar vários arquivos excel

com 5 comentários

Ontem tivemos de consolidar vários arquivos em xls respeitando as diferentes planilhas que cada um continha. O desafio era o seguinte: nosso setor encaminhou a um órgão um arquivo em Excel para ser preenchido com várias informações de que necessitava sobre obras em execução, mas recebeu em resposta um arquivo novo para cada obra. Cada um dos arquivos era composto por sete planilhas temáticas que eram iguais em todos os arquivos. A demanda que recebi foi a de consolidar todos os arquivos e separar em sete arquivos csv correspondentes às sete planilhas de cada arquivo. O prazo para o trabalho, como sempre, era ridiculamente curto.

A solução que utilizei foi a seguinte: criar um script para converter xls para uma pasta contendo vários arquivos csv, um por planilha e em seguida usar o cat para consolidar tudo e o vim para remover os títulos extra. Note que preferi não resolver tudo de uma vez no script porque isso o tornaria menos reutilizável. Por várias vezes recebi planilhas em excel para fazer uma coisa ou outra, o que sempre demandou converter para csv, mas nunca tinha recebido uma demanda para fazer isso em massa. Preferi ter o script para a conversão guardado para as próximas encrencas.

Vamos à solução adotada:

1- criar script para converter xls para pasta com csv

O módulo xlrd para python permite a leitura de arquivos xls.

Instale-o com:

sudo apt-get install python-xlrd

O código do script usado é o seguinte:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import xlrd
import csv
import os
import sys

if (len(sys.argv) > 1):
    if( sys.argv[1][-3:] == 'xls' ):
        excelfile = sys.argv[1]
    else:
        excelfile = None
        printhelp()

if excelfile:
    wb = xlrd.open_workbook(excelfile)

    for i in wb.sheet_names():
        sheet = wb.sheet_by_name(i)
        csvfile = open(i+'.csv', 'w')
        for rownum in range(2):
            for ii in sheet.row_values(rownum):
                if ii.__class__ != unicode:
                    ii = unicode(str(ii))
                csvfile.write('"'+ii.encode('utf-8')+'",')
            csvfile.write('\n')
        csvfile.close()

def printhelp():
    print 'Usage: excel2csv.py filename \n'
    print 'Call the script followed by a xls file. \nThe script will create one csv with , and " separators and utf-8 encoding for each sheet in the file.'

2- Rodar o script para cada um dos arquivos xls

O script foi salvo na mesma pasta onde estavam os arquivos xls e usei o seguinte shell script no terminal para executar o script para todos os arquivos:

for i in '*.xls'; do ./excel2csv.py $i; mkdir "$i"dir; mv *.csv "$i"dir;done;

3- Consolidar as planilhas com cat

Eram apenas sete planilhas e, por isso, não criei qualquer script para consolidá-las e, simplesmente, usei o cat 7 vezes. O cat, diga-se de passagem, é muito mais útil do que eu imaginava quando me disseram pela primeira vez o que ele fazia:

― “Ele imprime o conteúdo de um arquivo no terminal”, me disseram.

Eu pensei:

― “Grande coisa. Taí mais um jeito complicado de fazer uma tarefa simples como ler um texto.”

Eu não sabia naquela época quantas coisas se podem fazer com coisas que são impressas no terminal. O cat lê qualquer arquivo. Isso mesmo, qualquer coisa. É certo que nós nem sempre conseguimos ler o resultado (de arquivos binários, por exemplo), mas isso pode ser útil para fundir um arquivo partido ao meio, por exemplo.

Bem, no terminal o comando “>” indica que o resultado do comando anterior será jogado para o arquivo a seguir. Os comandos abaixo leem o conteúdo de todos os arquivos com dado nome que estejam dentro de alguma pasta do diretório atual e jogam o resultado (de todos os arquivos juntos) para dentro de um novo arquivo.


cat */Contatos.csv > dados_da_obra/contatos.csv
cat */Contratação.csv > dados_da_obra/contratacao.csv
cat */Dados\ da\ Obra.csv > dados_da_obra/dados_obra.csv
cat */Empresa.csv > dados_da_obra/empresa.csv
cat */Inserção\ das\ fases.csv > dados_da_obra/insercao.csv
cat */Competição.csv > dados_da_obra/competicao.csv
cat */Cronograma\ Físico\ Financeiro.csv > dados_da_obra/fisicofinanceiro.csv

Remover títulos extra

Houve um probleminha: os títulos se repetiram em todos os csv. Para removê-los usei o vim.

O ubuntu não vem mais com o vim (que pena). Instale-o com:

sudo apt-get install vim

Para gravar uma macro no vim basta teclar “q” e em seguida outra tecla para servir de identificador da macro.
Após começar a gravar a macro, faça uma pesquisa por um trecho que conste apenas na linha de título e delete toda a linha.
Salve a macro e a repita quantas vezes necessária (No vim basta digitar o número de vezes que você quer que a macro se repita seguido de @”identificador da macro” para que a operação seja realizada aquele número de vezes. Por exemplo 756@m executa a macro “m” 756 vezes.

Conclusão

Prontinho. Certamente existe uma forma mais correta ou mais elegante de executar essa operação, mas o fato é que não faço isso sempre e os prazos são sempre ridiculamente curtos. Para mim, acho que é uma boa ideia criar sempre scripts um tanto genéricos, que possam ser reaproveitados numa próxima ocasião e deixar as miudezas da tarefa para o bom e velho terminal.

No final das contas foi possível atender o prazo e ainda sobrou um extrator de planilhas de arquivos excel que pode ser muito útil em outras oportunidades.

Escrito por ndvo

30 setembro 2011 em 12:16 pm

Publicado em linux para iniciantes

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.