segunda-feira, dezembro 13

Eu na comunidade Ubuntu

Agora participo mais ativamente da comunidade Ubuntu. Para saber mais sobre mim na comunidade utilize as referências abaixo:

Fico online no canal IRC #ubuntu-br no freenode.net, caso tenha alguma dúvida acesse esse canal, ficarei feliz em ajudar.

domingo, novembro 21

Análise e Projeto Orientado a Objetos - Parte 2

Diagrama de pacotes
Representa um agrupamento das classes e interfaces, pode demonstrar a decomposição do sistema em sub-sistemas ou camadas.



Diagrama de objetos
Fornece uma visão do sistema em determinado momento, descrevendo o estado e relações dos objetos. Um objeto pode ser nomeado ou anônimo e é representado quase como as classes.


Diagrama de atividades
É um diagrama que apresenta um comportamento do sistema, focado na descrição da ordem dos eventos. É composto por:
  • Estado inicial: Representa o começo de tudo.
  • Estados de ações: Representam uma ação no sistema.
  • Estado final: Representa o fim do fluxo.
  • Transições: Representam a passagem de um estado para outro
  • Decisões: Ramificações (caminhos alternativos) que dependem de uma tomada de decisão.
  • Bifurcações e Uniões: Representam atividades que podem ocorrer em paralelo, a bifurcação representa o começo e pode receber várias entradas, a união representa o fim e tem apenas uma saída
  • Raias de natação: Usadas para mostrar quem é o responsável por determinadas atividades.
  • Fluxo de Objetos: Um complemento ao diagrama que apresenta o estado e/ou os atributos de um objeto relacionados a uma ação.
Veja um exemplo de diagrama de atividades com os principais componentes:

quarta-feira, novembro 17

Java - Collections

O Framework de Collections do Java fornece várias classes para manipular estruturas de dados complexas de forma abstrata.

A Collection se divide básicamente em Listas e Conjuntos.
Veja abaixo as principais características de cada classe:

Listas:
  • Permitem repetição
  • Mantêm a ordem de inserção
ArrayList:
  • A busca é feita diretamente pelo índice, por isso é extremamente rápido
  • A inserção e remoção dependem da quantidade de itens na lista
LinkedList (Lista ligada):
  • A busca, inserção e remoção são feitas de forma linear, dependem da quantidade de itens na lista
Conjuntos:
  • Não permitem repetição
  • Não mantêm a ordem de inserção
HashSet:
  • Mistura um array com uma lista ligada
  • A busca é muito eficiente
  • A inserção e remoção também são muito eficientes
  • É impossível determinar a ordem de saída dos dados
TreeSet (Árvore binária):
  • É balanceada automáticamente
  • A busca, inserção e remoção são eficientes
  • A saída dos dados sempre estará ordenada
Além dessas classe básicas, também existem outras duas classe importantes:

Map:
  • É um conjunto de pares
  • As chaves não podem ser repetidas
  • O percurso é feito através das chaves
  • Se divide em HashMap e TreeMap
Properties:
  • É um mapa, mas com chaves e valores do tipo String
  • Geralmente usado para armazenar configurações da aplicação
Nas Collections é importante conhecer o Iterator, ele serve para navegar em uma collection:
  • Para obter o Iterator de uma Collection utiliza-se o método iterator() da Collection
  • Para saber se existe um próximo item na Collection utiliza-se o método hasNext() do Iterator
  • Para retornar o próximo item da lista, utiliza-se o método next() do Iterator

Análise e Projeto Orientado a Objetos - Parte 1

Conceitos
  • Objeto: Uma instância de uma classe
  • Classe: Um conjunto de características e funcionalidades que definem objetos
  • Atributos: Características de uma classe, os dados do objeto
  • Métodos: Uma ação executada, algo que o objeto faz
  • Mensagem: Uma chamada de método
Diagrama de classes

Notação: Um retângulo dividido em 3 partes, na primeira fica o nome, na segunda os atributos, na terceira os métodos e caso seja necessário é possível criar mais dicisões.


Visibilidade: Para os atributos e métodos da classe pode ser usada as seguintes notações de visibilidade:
  • + (público): O atributo/método pode ser acessado por qualquer outra classe
  • - (privado): O atributo/método apenas poderá ser acessado pela própria classe
  • # (protegido): O atributo/método poderá ser acessado apenas pela própria classe e suas descendentes na herança
  • ~ (pacote/default): O atributo/método pode ser acessado pelas classes que estão no mesmo pacote
Abstrata, Concreta e Interface: Uma classe abstrata não pode ser instanciada, declara os atributos e métodos mas não implementa. Uma classe concreta não possui métodos abstratos e implementam todos os seus métodos (uma classe simples). Uma inteface é um “contrato” que informa o que a classe deve fazer mas não tem nenhuma implementação.

Relacionamento entre classes

Associação:  Representa uma relação “tem um” ou “existe um”. É quando uma classe faz referência a outra classe num determinado período de tempo. Um objeto pode existir sem que o outro exista. É representado por uma linha entre as duas classes. É subdividido em:

    Agregação: Uma relação forte “tem um” que define uma propriedade, quando a classe que se relaciona deixa de existir, a classe relacionada continua existindo mas perde parte do sentido de existência. É representado por uma linha, no lado da classe que se relaciona coloca-se um diamante sem preenchimento e no lado da classe relacionada coloca-se uma seta.


    Composição:  Uma relação muito forte “todo-parte” que diz que uma classe “é parte de” outra classe. Quando a classe que se relaciona é destruída, a relacionada também será. É representado por uma linha, no lado da classe que se relaciona coloca-se um diamante  preenchido e no lado da classe relacionada coloca-se uma seta.


Generalização: Representa uma “herança”. De uma classe mais geral para uma classe mais específica. É representada por um linha, na ponta da classe generalizada coloca-se um triângulo.


Dependência: É a relação mais fraca, acontece quando uma classe usa outra classe através da chamada de um método estático ou quando é usado como parâmetro de um método. É representado por uma linha tracejada apontando para a classe que é usada.


Reconhecimento de classe

Para reconhecer as classes você pode interpretar um caso de uso destacando as seguintes características:
  • Substantivos: se transformam nas classes. Ex.: Pessoa, Carro, Escola.
  • Adjetivos: se transformam nos atributos de uma classe. Ex.: cor, peso, altura, endereço.
  • Verbos: se transformam nos métodos de uma classe. Ex.: estudar, andar, acelerar.
É preciso saber interpretar o texto do caso de uso para saber relacionar os atributos e verbos a classe certa.

Segue abaixo uma imagem que exemplifica as principais notações do diagrama de classes:
Exemplo de diagrama de classes

terça-feira, setembro 14

Ensine o Ubuntu a falar

O Ubuntu é um sistema que realmente está preparado para qualquer usuário. Um bom exemplo é a acessibilidade para deficientes visuais. Mas esse recurso também pode ser usado para diversão, que tal ouvir uma piada ou um pensamento toda vez que ligar o computador? É bem simples e rápido.

Primeiro precisamos instalar o "voz" do ubuntu. Eu utilizei o Espeak, para instalá-lo basta clicar nesse link ou digitar o seguinte comando:
~$ sudo apt-get install espeak
Depois de instalado, seu ubuntu já será capaz de falar, faça um teste:
~$ espeak "Hello, world with Espeak!"
Deu para perceber que a voz padrão está em inglês, se quiser que ele fale em português basta alterar a voz, veja como:
~$ espeak -vpt "Olá mundo com o Espeak!"
Existem variações da voz para masculino, feminino e especiais:
~$ espeak -vpt+m1 "Voz masculina 1"
~$ espeak -vpt+m2 "Voz masculina 2"
~$ espeak -vpt+m3 "Voz masculina 3"
~$ espeak -vpt+m4 "Voz masculina 4"
~$ espeak -vpt+m5 "Voz masculina 5"
~$ espeak -vpt+m6 "Voz masculina 6"
~$ espeak -vpt+m7 "Voz masculina 7"
~$ espeak -vpt+f1 "Voz feminina 1"       
~$ espeak -vpt+f2 "Voz feminina 2"      
~$ espeak -vpt+f3 "Voz feminina 3"      
~$ espeak -vpt+f4 "Voz feminina 4"      
~$ espeak -vpt+croak "Voz especial coaxada"
~$ espeak -vpt+whisper "Voz especial susurrada. Como o Darth vader!" 
Agora vamos adicionar ao ubuntu a capacidade de contar piadas e pensamentos, para isso usamos um aplicativo popular no mundo linux chamado fortunes. Para instalá-lo basta clicar aqui ou digitar no terminal:
~$ sudo apt-get install fortunes
Ele provê várias frases, mas em inglês, para ter frases em português precisamos instalar o pacote fortunes-br clicando aqui ou digitando no terminal:
~$ sudo apt-get install fortunes-br
Faça um teste digitando no terminal:
~$ fortune brasil
Pronto, nosso ubuntu já "pensa" e "fala", agora vamos ensiná-lo a falar o que pensa.
Você pode fazer isso simplesmente digitando:
~$ fortune brasil | espeak -vpt
Ou pode criar um pequeno script, para isso, abra o Gedit (Aplicativos->Acessórios->Editor de texto) ou qualquer editor de texto da sua preferência e escreva o seguinte:

#!/bin/sh
texto=`fortune brasil`
espeak -vpt "$texto"

Salve como falar.sh e atribua a permissão de execução com o comando chmod +x falar.sh. Agora basta dar um duplo clique sobre ele e escolher a opção Executar para ouvir o pensamento do Ubuntu.


Vamos criar agora o script que dará boas vindas e falará uma mensagem todas vez que efetuar login. No seu editor de texto favorito digite o seguinte script:

#!/bin/sh
hora=`date +%-H` # A hora atual
minuto=`date +%-M` # O minuto atual sem preenchimento de zero a esquerda
data=`date +%A` # O nome do dia (segunda, terça etc.)
dia=`date +%-d` # O número do dia atual
mes=`date +%B` # O mês por extenso
ano=`date +%Y` # O ano
pensamento=`fortune brasil` # O pensamento ou piada
frase="Bem vindo, são $hora e $minuto de $data, $dia de $mes de $ano. $pensamento" # A frase que vai ser falada
espeak -vpt "$frase" # Falando a frase 

Salve como saudação.sh na sua pasta home e atribua a permissão de execução com o comando chmod +x saudação.sh. Para que esse script seja executado toda vez que efetuar o login, basta adicioná-lo nos aplicativos da sessão, siga os passos:
Através do menu Sistema->Preferências abra Aplicativos da sessão. 
Na janela que surgir clique em adicionar.
Em nome coloque "Saudação" e em comando "~/saudação.sh". Clique em Adicionar e pronto.
Toda vez que efetuar login você ouvirá as boas vindas do Ubuntu junto com uma piadinha ou um pensamento, muitas vezes ele diz o que esperavamos ouvir.

quarta-feira, agosto 25

Sustentabilidade para empresas

As empresas tem muito o que se preocupar atualmente, vivemos em uma época de crises constantes e quase imperceptíveis, se uma empresa não está preparada para resistir aos problemas provavelmente sucumbirá. A melhor solução é tornar-se sustentável.


A sustentabilidade permite que a empresa se arrisque com certa segurança, uma empresa que realmente implanta métodos totalmente sustentáveis tem o apoio da sociedade, por isso se torna muito poderosa.
Sustentábilidade


Para ser sustentável é preciso entender a sustentabilidade. Ela pode ser dividida em três partes. Meio-ambiente, sociedade e economia. A maioria das empresas usam apenas a sustentabilidade econômica, mas ela sozinha não é suficiente.


Meio-ambiente, o assunto do século, todos sabemos que o aquecimento global é um fato, e que cada vez mais surgem problemas relacionados a natureza, ela parece estar se vingando dos maus tratos milenares da sociedade. É possível aliar-se ao meio ambiente para sobreviver a crises, uma forma é praticando coleta seletiva e reciclagem, também é possível reduzir o consumo de água e energia simplesmente mudando alguns hábitos. Plantas dentro de um escritório ajudam a manter a temperatura amena, além de absorver energias que podem provocar estresse.


Uma empresa não pode se dizer sustentável sem apoiar a comunidade periférica, é ela que vai cuidar da imagem da empresa através do marketing mais eficiente de todos os tempos, o boca-a-boca. Apoiar a festinha de São João do bairro ou até mesmo promover palestra e cursinhos abertos a comunidade local cuida para que a imagem da empresa seja divulgada como sociável. Normalmente as empresas ficam distantes da comunidade, mesmo quando a distância física é apenas alguns metros, quebrar essa imagem dá força política para uma empresa.


Para a sustentabilidade econômica não é preciso muitas palavras, ela já está nas nossas mentes e é moldada pelo formato da sociedade, só é preciso saber que sustentabilidade econômica é a capacidade da empresa de sobreviver sem consumir ou descartar seu próprio patrimônio, material e humano.


Uma barreira para a implantação de métodos sustentáveis em uma empresa muitas vezes está dentro dela, as pessoas não entendem ou não se comprometem com a empresa e nem com os objetivos dela, é cada um por si, sobrevivendo a rotina e enfraquecendo a equipe. Para corrigir isso, é preciso entender como as pessoas evoluem. Todos nós estamos em constante formação, a todo momento, até quando dormimos, é essa capacidade que fez a humanidade ser o que é, a espécie dominante. Utilizando o aprendizado de cada pessoa é possível aumentar a confiança da equipe e criar um censo comum de compromisso e lealdade aos objetivos da empresa. Não é possível exigir do funcionário lealdade a empresa, mas é possível deixá-lo leal aos objetivos e é isso o que importa.
Formação


Antes de tudo, é preciso definir os reais objetivos da empresa a curto, médio e longo prazos e depois usar metodologias transdisciplinares para colocá-los como objetivos pessoais de cada um nos três níveis de formação. O primeiro nível, auto formação, é a formação pessoal, o que ela quer para ela, seus sonhos e objetivos pessoais. O segundo nível é a hétero formação, a formação da pessoa voltada para os que estão a sua volta, família, amigos e colegas de trabalho. O terceiro e último nível de formação é talvez o mais importante e o mais difícil de capitar, envolve os objetivos da pessoa para o resto do mundo, é a eco formação, ela parece meio abstrata na mente das pessoas e muitas vezes é confundida com a hétero e a auto formação, forçar as pessoas imaginarem as consequências dos seus atos além dos horizontes pode tornar-los parceiros inseparáveis, pois a maioria das pessoas não possui uma eco formação sólida e acaba a transformando em desejo de fama.


Para concluir, uma forma de facilitar a evolução da equipe é criando atividades que forcem confiança e criatividade. Abra as portas para novas ideias, elas podem mudar completamente o futuro da empresa, para melhor.

quarta-feira, junho 23

Os Novos Paulistas & Estúdio B no Central Rock Bar

Quem gosta de música de verdade vai gostar de ouvir Os Novos Paulistas & Estúdio B no Central Rock Bar!

Esse show vai ser sexta-feira, dia 25 de junho a partir das 23:00h! Nada como comemorar a vitória do Brasil curtindo rock e blues! E a entrada é apenas R$7,00! Você não pode perder!
Pra chegar lá, siga o mapa!
Av. José Antonio de Almeida Amazonas, 596 - Vila Guiomar - Santo André - SP

Entre em contato com o Central Rock Bar e reserve agora mesmo o seu lugar através do telefone (11) 8351 2876 ou (11) 7986 7820.

quinta-feira, junho 3

Oração dos Programadores

Sistema Operacional que estais na memória,

Compilado seja o vosso programa,

Venha à tela os vossos comandos,

Seja executada a nossa rotina,

Assim na memória, como na impressora.

Acerto nosso de cada dia, rodai hoje

Informai os nossos erros,

Assim como nós informamos o que está corrigido,

Não nos deixai entrar em looping,

e livrai-nos do coredump,

Amém.

segunda-feira, abril 12

Estudos de Linux - Agendamento de tarefas com Cron

Continuando o último post, agora vou mostrar como colocar o script de backup em execução periódica e automática usando o Cron.
Será necessário editar a lista de tarefas do cron, normalmente em /etc/crontab:
sudo nano /etc/crontab
Agora escolhemos a frequência e o horário da execução do backup. No meu caso, colocarei o backup para ser executado todas as sexta-feiras ao meio dia em ponto.
No arquivo crontab, existe uma ordem para escrever um novo agendamento:
MINUTO HORA DIA MES DIA_DA_SEMANA USUARIO COMANDO, sendo que:
  • Em MINUTO é possível colocar um número de 0 a 59;
  • Em HORA é possível colocar um número de 0 a 23;
  • Em DIA é possível colocar um número de 0 a 31;
  • Em MES é possível colocar um número de 1 a 12, onde 1 é Janeiro e 12 é Dezembro;
  • Em DIA_DA_SEMANA é possível colocar um número de 1 a 7, onde 1 é Segunda e 7 é Domingo;
  • Em USUARIO informa-se o usuário que vai executar o comando.
  • Em COMANDO informa-se o comando que deseja executar.
Se estiver usando o primeiro script (backuper.sh), adicione ao final do arquivo a linha:
# Backup todas as Sexta-feiras ao meio-dia
0 12 * * 5 root /caminho/até/backuper.sh
Se estiver usando o script pgclone, adicione ao final do arquivo a linha:
# Backup todas as Sexta-feiras ao meio-dia
0 12 * * 5 root pgclone
Agora salve (CTRL+O) o arquivo e aguarde até que o backup seja efetuado!

Até a próxima!

quarta-feira, abril 7

Estudos de Linux - Backup de bases de dados Postgre

Recentemente passei por maus bocados depois que um servidor passou por problemas no sistema de arquivos que causaram perca de dados recentes, depois disso resolvi usar uma ferramenta que criasse uma cópia do servidor inteiro, para recuperá-lo caso seja necessário.

Pré-requisitos:

  • libnotify para exibir um balão de alerta quando o backup estiver em andamento (Não obrigatório).

    Instale pelo console com sudo apt-get install libnotify-bin ou clicando aqui caso esteja usando o firefox no ubuntu.

  • postgresql-client para ter a ferramenta pg_dumpall que vamos usar no script (Obrigatório).

    Instale pelo console com sudo apt-get install postgresql-client ou clique aqui.

O Script:

#!/bin/sh
pgu="postgres" #O usuário do banco de dados
pgh="localhost" #O endereço do servidor
destin="/home/usuario/backup/" #O local onde será feito o backup
vYear=$(date +%Y) #O Ano
vMonth=$(date +%m) #O Mês
vDay=$(date +%d) #O Dia
vH=$(date +%H) #A Hora
vM=$(date +%M) #O minuto
fileName="auto-$pgh-$vDay.$vMonth.$vYear.$vH.$vM.backup" #O nome do arquivo do backup
fileError="auto-$pgh-$vDay.$vMonth.$vYear.$vH.$vM.error" #O nome do arquivo do backup
icon="/usr/share/icons/gnome/scalable/actions/gtk-refresh.svg" #O icone da notificação
startMsg="Está sendo efetuado um backup do servidor $pgh para o arquivo $destin$fileName!" #Mensagem de inicio
endMsgSuccess="O backup do servidor $pgh para o arquivo $destin$fileName foi efetuado com sucesso!" #Mensagem de término com sucesso
endMsgFail="Houve uma falha no backup do servidor $pgh para o arquivo $destin$fileName." #Mensagem de término com falha

#Iniciando...

echo $startMsg
if [ $(which notify-send) ]; then
notify-send "Backup Postgre" "$startMsg" -i $icon
fi

#Copiando...
pg_dumpall -U $pgu -h $pgh > $destin$fileName 2>$destin$fileError
s=$?
if [ $s != 0 ]; then
    echo $endMsgFail
    if [ $(which notify-send) ]; then
        notify-send "Backup Postgre" "$endMsgFail" -i $icon
    fi
    error=$(cat $destin$fileError)
    zenity --error --window-icon="$icon" --title="Backup Postgre" --text="$endMsgFail\nDetalhes:\n$error"
    exit 1;
else
    echo $endMsgSuccess
    if [ $(which notify-send) ]; then
        notify-send "Backup Postgre" "$endMsgSuccess" -i $icon
    fi
    zenity --notification --window-icon="$icon" --title="Backup Postgre" --text="$endMsgSuccess"
    exit 0;
fi

Salve esse arquivo como backuper.sh (ou o nome que achar melhor) e depois altere as suas permissões para execução.
chmod +x backuper.sh
Ai é só executá-lo pelo prompt usando ./backuper.sh.

No próximo post vou ensinar como fazer o script ser executado automáticamente e periodicamente.

Até mais.

Update

Dei uma tunada no script e agora ele faz clonagem de servidores Postgre
No terminal, execute os comandos:
wget http://dl.dropbox.com/u/4917466/pgclone
sudo mv pgclone /bin/pgclone
sudo chmod 777 /bin/pgclone
Agora quando for usar basta digitar no terminal um dos comandos abaixo
pgclone Faz uma cópia do servidor localhost com o usuário postgres
pgclone -u usuario -h host Faz uma cópia do servidor "host" com o usuario "usuario"
pgclone --clone --clone-user usuario --clone-host host Faz uma clonagem do servidor localhost no servidor "host"

segunda-feira, abril 5

Estudo de Linux e PHP: Instalando o PHP dbx no Ubuntu

Estou trabalhando um projeto e perdi muito tempo tentando criar uma classe genérica de acesso a diversos bancos de dados. Depois de um passeio pela documentação do PHP (http://www.php.net/manual/pt_BR/) encontrei a extensão dbx para abstração de banco de dados. Ela permite acessar todos os bancos de dados de forma padronizada. O problema é que ela foi movida para o repositório PECL e não vem no pacote oficial. Para instalá-la no ubuntu é muito fácil:
Primeiro é preciso ter as ferramentas de desenvolvimento do PHP php5-dev e a extensão do pear php-pear que podem ser instaladas via terminal com sudo apt-get install php-pear php5-dev.
Depois basta digitar o comando pecl install -f dbx.
Agora temos o dbx instalado mas ainda desabilitado, para habilitá-lo navegue até o diretório /etc/php5/conf.d e crie um arquivo chamado dbx.ini dentro dele coloque "extension=dbx.so" sem as aspas.
Agora é só reiniciar o Apache e pronto, o dbx está instalado e habilitado!
sudo /etc/init.d/apache2 restart
Pretendo postar meus estudos de PHP com essa e outras extensões.
Até breve!