Skip to content


Lula no FISL 10.0

Lula Red Hat

O Lula é nerd!

Tags: , , . Publicado em Diversos.

Transferindo o áudio do microfone via SSH

Estamos a 2 dias do III ENSOL. Na palestra do Richard Stallman haverá tradução e transmissão simultânea. Com a tradução eu não preciso me preocupar, pois contratamos uma empresa para isto. Já a transmissão é um pouco mais complicada.

O LAViD está nos apoiando nisto. Vamos ter uma câmera HD para gravar algumas palestras e transmitir a do RMS para as outras 2 salas. Só que, pensando com o pessoal, decidimos que o áudio a ser transmitido não vai ser o do Stallman, mas o do tradutor. Aí vem o problema: como transmitir o áudio da cabine de trasmissão para as outras duas salas? Lembrava que dava pra fazer isso com o SSH, então fui testar.

Fazer localmente é fácil. Basta executar:

dd if=/dev/dsp of=/dev/dsp

O que isto faz? Simples. Lembre-se que nos sistemas POSIX tudo é um arquivo. E /dev/dsp é o arquivo que representa a placa de som. Numa linguagem natural, o comando acima quer dizer “Copie o que tem em /dev/dsp para /dev/dsp.”

Como assim? Se eu copiar um arquivo para ele mesmo, o resultado não deveria ser… o mesmo arquivo? Depende. Neste caso, por exemplo, ler da placa de som (/dev/dsp) significa “capturar o audio que vem do microfone.” E escrever significa “tocar.” Juntando, você está “capturando o audio que vem do microfone e tocando.”

Fácil. Agora, como fazer isso em dois computadores diferentes? Eu sei que vou ter que ler do /dev/dsp de um computador e escrever no /dev/dsp do outro, mas como?

Vamos por partes. Primeiro, para ler o /dev/dsp, usamos:

dd if=/dev/dsp

O dd vai ler o arquivo e escrever na saída padrão. Neste caso, a tela. Então, precisamos redirecionar isso para o outro computador. É aí que entra o SSH. Se fizermos:

ssh

Ele vai abrir um shell no destino. Não é o que queremos. Temos a opção de usar:

ssh dd of=/dev/dsp

Ao invés de abrir um shell, o SSH vai executar o comando que passamos (dd of=/dev/dsp). Neste caso, o dd escreve tudo que receber da entrada padrão (teclado) para o arquivo /dev/dsp. Se você escrever algumas coisas aleatórias, vai ouvir uns barulhos na caixa de som. Ele está interpretando o que você está escrevendo como som. Ótimo! Estamos chegando perto. Agora só precisamos ligar a saída do primeiro comando, que lê do /dev/dsp de uma máquina, a entrada do ssh. Como? Usando pipes, é claro!

dd if=/dev/dsp | ssh dd of=/dev/dsp

O que essa barrinha discreta aí faz é conectar a saída padrão do comando a esquerda com a entrada padrão do da direita. Pronto! Executando isso, já conectamos o microfone de um PC com a caixa de som de outro. Para melhorar um pouco, podemos pedir pro SSH comprimir o tráfego, adicionando a opção -C.

dd if=/dev/dsp | ssh -C dd of=/dev/dsp

Mesmo assim, ainda não fica muito bom. Aqui, apesar dele usar só 5 KB/s de banda e as máquinas estarem na mesma rede wifi, fica uma latência muito grande. Talvez seja culpa do SSH ou do dd, e não da velocidade da conexão. Não sei.

Mas pode dizer. Muito foda, não é? :P

Tags: , , , , . Publicado em Artigos.

PDI ao resgate!

Hoje tive um problema com uma imagem. Estou organizando junto com alguns amigos o III ENSOL, e a UEPB nos apoiou pagando 75 inscrições para seus alunos. Então, precisei encontrar o logo deles para colocar no site do evento. A melhor que encontrei foi esta:
uepb
Como dá pra ver, ela não tem o fundo branco. O do site do ENSOL é laranja. E agora?

Tentei usar o GIMP para resolver, usando a Magic Wand, mas ele não consegue pegar tudo, pois parte do fundo não é 100% branco. Colocando sobre um fundo preto, ficou assim:
uepb-fundopreto

Como resolver? Sei que, se eu diminuísse a precisão da Magic Wand, fazendo ela pegar não só 100% branco, mas entre 90% e 100%, por exemplo, melhoraria. Quiçá, resolvesse. Mas, como? Não encontrei essa configuração. Sei que poderia criar um plugin em Python pro GIMP que resolveria, mas como nunca fiz isso, iria demorar.

Então eu vi a luz.

Relembrando as aulas de PDI – Processamento Digital de Imagens -, que paguei semestre passado. Uma das cadeiras mais interessantes até agora, uma pena que, por uma razão qualquer, não aproveitei tanto. Mas aprendi a programar usando o Octave.

O GNU Octave é uma linguagem para fazer cálculos matemáticos, muito parecida com o MatLab. Nela a gente consegue trabalhar com matrizes sem problema algum. Por exemplo, se você tiver uma matriz 3×3 e quer somar com uma outra de mesmo tamanho o que faz? Um for por cada elemento da matriz somando um com o outro? Não! Simplesmente matrizA + matrizB. E o que são imagens que não grandes matrizes de pixels?

A idéia é: passar por cada pixel da imagem e, se ele for mais claro que um determinado valor, transformo ele em magenta. Daí nasceu o Magentinizator!

Fazer isto em Octave é trivial. O código comentado é:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# Magentinizator v 0.42 - 2009
# ----------------------------------------------------------------------------
# "THE BEER-WARE LICENSE" (Revisão 42):
# <vitor@vitorbaptista.com> escreveu este arquivo. Contanto que mantenha este 
# texto, você pode fazer o que quiser com esse software. Se nos conhecermos
# algum dia, e você achar que esse programa vale, você pode me pagar uma cerveja
# em troca.
#                                                               Vitor Baptista
# ----------------------------------------------------------------------------
 
path = "uepb.png";                # Caminho para a imagem
threshold = 0xB4;                 # Pixels com cor maior que 0xB4B4B4
                                  # se tornarão 0xFF00FF
 
im = imread(path);                # Lê a imagem. im agora tem uma matriz
                                  # Largura x Altura x 3 (RGB)
 
tam = size(im);                   # Pega o tamanho da imagem
 
for i = 1:tam(1)                  # De 1 até a largura
  for j = 1:tam(2)                # De 1 até a altura
 
    if (im(i, j, 1) > threshold   # Se o R for maior que o threshold, e
        && im(i,j,2) > threshold  # se o G for maior, e
        && im(i,j,3) > threshold) # se o B for maior.
 
      im(i,j,1) = 255;            # Torna aquele pixel
      im(i,j,2) = 0;              # em
      im(i,j,3) = 255;            # magenta!
    end
  end
end
 
imwrite([path, ".magentinized"], # Concatena strings
        im(:,:,1),               # R
        im(:,:,2),               # G
        im(:,:,3));              # B

O resultado ficou ótimo. Não perfeito, mas bem melhor que usando o GIMP e mais que o suficiente pro site do ENSOL.
UEPB Magentinized
Se precisar tirar mais o branco, só diminuir o threshold. Lembrando que vai chegar um momento que vai tornar outras partes da imagem também magenta.

Você pode baixar o Magentinizator aqui.

Tags: , , . Publicado em Artigos, Dicas.

Chamada para a megablogagem

Na última semana tivemos grandes e poderosas vitórias: O ministro da Justiça manifestou publicamente seu apoio ao veto dos artigos “draconianos” do PL de Cibercrimes, o PL 84/99, ou o PL do Azeredo, ou ainda popularmente conhecido como o AI5 digital. No último dia 14 tivemos uma grande vitória com o Ato Público na Assembléia Legislativa de São Paulo contra o AI5 digital, onde novos e poderosos aliados se juntaram ao combate ao vigilantismo. Estranhamente a mídia tradicional não deu muita importância ao evento, não lembro de ter visto nenhuma noticia na TV sobre o Ato, a excessão ficou com a Folha, aquela da “Ditabranda” que mandou para o evento uma jornalista com as piores das intenções, e segundo os presentes com as perguntas mais descabidas possíveis.

Há algum tempo haviamos percebido um argumento típico dos vigilantistas na novela da Globo da Globo caminho das Indias, onde um personagem advogado fala para outra personagem algo como: Olha, não sei como andam estas leis, mas é dificil isto, nem a Policia Federal consegue rastrear sobre casos de pedofilia. Conseguimos um contato com a assessora da Glória Perez, que nos “cozinhou” e acabamos não conversando com a autora para expor nosso ponto de vista, na verdade acredito que a Glória pouco poderia fazer a respeito, já que ela é funcionária da Globo, e provavelmente deve ter de seguir as determinações da Empresa.

Nesta semana, justamente a semana de grande vitórias, a mídia atacou a Internet de forma extremamente agressiva, estão promovendo uma verdadeira engenharia social, tentando a todo custo convencer as pessoas de que a Internet é um antro de criminosos e pedófilos. O SBT fez uma matéria a respeito, a Globo esta atacando em todas as esferas, no programa Ana Maria Braga onde tenta envolver a Internet no caso do “Mussunzinho” apenas pelo fato de alguem ter tido acesso ao email dele para responder à uma entrevista. O jornal da Globo, RJ TV, Fantástico e ontem o Globo Reporter que falou de pedofilia, não citou nenhum caso de pedofilia na Internet, o que sabemos que não existe, mas falou que a maioria dos casos de pedofilia se dá na Internet. Para fechar, a Veja desta semana esta detonando com a Internet da forma mais escrota e descabida como parece peculiar desta publicação.

O que estamos assistindo é na verdade um ato de desespero, os apoiadores do vigilantismo, como a FEBRABAN, APCN, Operadoras de telefonia, a Industria Cultural, só para citar alguns, devem estar patrocinando, ops, quero dizer pressionando os nove empresários que comandam a mídia no Brasil, ou seriam estes empresários também interessados? Será que tem algum Senador que tem ligação com veículos de comunicação? A mídia deixou de ser sutil, de parecer imparcial, e num ato de desespero esta tomando uma posição clara, a favor do vigilantismo, com o objetivo de manipular a opinião pública para que o nosso ativismo seja desmoralizado e minimizado e AI5 digital seja aprovado.

Sendo assim, convocamos todos a uma blogagem coletiva hoje, dia 17 de maio, dia Internacional da Internet para uma blogagem coletiva com o objetivo de critica a atitude de nossa imprensa mentirosa, de investigar e de desmascarar a midia que mente e vai contra a democracia. Não vamos deixar o vigilantismo ganhar, Mega Não, Mega Blogagem já !!!

Usem as tags “ciberativismo”, “meganao” e “megablogagem” para que possamos identificar os posts participantes, e mandem um ping para cá. Publiquem, twittem seus posts, divulguem no Orkut, Facebook, neste dia 17 temos de fazer as mídias sociais gritarem um Mega Não ao vigilantismo.

http://meganao.wordpress.com/2009/05/17/chamada-para-a-megablogagem/

Tags: , , . Publicado em Diversos.

O “Jeito” Engenheiro

Tags: , , . Publicado em Diversos.

May the 4th be with you!

Devido ao trocadalho do carilho da frase do título, nerds de todo o mundo comemoram hoje o Star Wars Day. Então eu, fazendo meu dever de cidadão, divulguei a informação nas listas que participo. Então, um nerd amigo me mostrou algo totalmente demais: todos os Star Wars em ASCII Art!

Star Wars ASCII Art

Já posso morrer feliz.

O que o tédio, tempo livre e falta de mulher dedicação não fazem com uma pessoa. Gravei até um vídeo e tentei disponibilizar pelo TTYShare que falei alguns post atrás, mas o serviço está fora do ar. De qualquer forma, você pode ter o prazer de assistir 12h de Star Wars sem sair do shell fazendo:

$ telnet towel.blinkenlights.nl

Valeu, Erison!

P.S.: Ah, coincidentemente (ou não), hoje também é o aniversário de uma de minhas melhores amigas. Parabéns, Mari!

EDIT: Convertam-se, infiéis! http://www.jedichurch.org/

Tags: , . Publicado em Diversos.

Análises Estruturada e Essencial

Na faculdade estou pagando Especificação de Requisitos de Software e, como avaliação, devo escrever alguns textos sobre o assunto. O primeiro é uma (breve) apresentação sobre Análise Estruturada e Análise Essencial.

O que é análise?

“É o estudo das características que o sistema deverá ter para atender às necessidades e expectativas do cliente.” [1] Usualmente são usados modelos para representar graficamente os componentes do sistema e as relações entre si e com o ambiente.

Pra que serve?

Antes de codificarmos, é importante entendermos o que queremos fazer. Para isto, análise nos dá uma visão geral do sistema e dos relacionamentos de seus componentes entre si e com os usuários. Com isto, conseguimos estimar melhor a complexidade, custos (de tempo e dinheiro), e detectar erros, além de gerar um documento com o qual podemos comparar as funcionalidades finais do sistema com as propostas, para determinar se ele cumpre ou não com seu objetivo.

Análise Estruturada

Nela construímos o sistema de forma top-down (do geral para o particular) criando um Diagrama de Fluxo de Dados (DFD) e refinando-o sucessivamente. Inicialmente obtemos uma visão geral do sistema, então decompomos cada módulo detalhando suas funcionalidades. Com isto, começamos a ter pistas sobre os processos e as entidades, os quais, estruturaremos usando o Diagrama Entidade Relacionamento (DER).

Desenvolvimento de software pelo método da Análise Estruturada

Desenvolvimento de software pelo método da Análise Estruturada

Uma técnica comumente usada é, na descrição dos requisitos, separar os verbos e os substantivos, como candidatos para tornarem-se processos e entidades, respectivamente. A conexão entre eles se dá através de um fluxo dos dados.

Etapa Questão-chave Atividades Principais
Concepção do software Quais são os problemas? Especificação da delimitação e objetivos. Identificação de mais de uma alternativa.
Estudo de viabilidade Há uma solução viável? Análise geral do custo/benefício das alternativas
Projeto lógico Em geral, como os problemas devem ser resolvidos? DFD, DER, Especificação dos processos
Projeto físico Especificamente, como o projeto deve ser implementado? Codificação e testes
Implantação Os usuários e a organização estão prontos para utilizar o sistema? Treinamento e acompanhamento
Manutenção Existem alterações requeridas? Modificar o sistema conforme necessário. Ajudar documentação. Apoio ao usuário.

Análise Essencial

É um melhoramento da análise estruturada. Nela, o problema é inicialmente estudado concentrando-se na identificação das funcionalidades lógicas, sem se preocupar com as exigências físicas de como o sistema será implementado. Para isso, definimos o modelo essencial, que é subdividido em ambiental, que vai definir a fronteira entre ele e o ambiente; comportamental, que descreve as partes internas necessárias para interagir com o ambiente, e; de informação, que nos dá os dados necessários as atividades do sistema. Assim, tem-se a solução ideal do problema, a qual desejaríamos se não tivéssemos limites de custos, velocidade, armazenamento, etc..

Depois, definimos o modelo de implementação, que é quem vai trazer o modelo essencial para dentro de nossas limitações e requisitos físicos. É nele que definimos o modelo lógico de dados, a interface homem-máquina, a plataforma de execução, a linguagem, etc.. Enfim, tudo que diga respeito a implementação de nosso sistema.

Referências

1. http://pt.wikipedia.org/wiki/Análise_de_requisitos
2. http://www.creupiapostilas.hpg.ig.com.br/analise_estruturada.doc
3. http://www.noginfo.com.br/arquivos/AES_Aula_05.pdf
4. http://www.creupiapostilas.hpg.ig.com.br/AnaliseEssencial.doc

Tags: , . Publicado em Artigos.

Farra das passagens

Tags: , , , . Publicado em Diversos.

Baixando um pacote e suas dependências com o apt-get

No FLISOL deste ano fui configurar as máquinas do laboratório onde seria meu minicurso junto com os organizadores. Chegando lá descobrimos que só era permitido acesso via HTTP, ou seja, não dava pra usar o apt-get. Procurando uma solução, encontrei uma dica super simples no fórum do Ubuntu. É só rodar:

# apt-get build-dep -d

E os pacotes serão baixados e salvos em /var/cache/apt/archives. Depois só copiar os .deb de lá, levar para a máquina onde quer instalar e copiar de volta para /var/cache/apt/archives. Aí é só instalar normalmente com apt-get :)

Vivendo e aprendendo.

Tags: , . Publicado em Dicas.

FLISOL 2009 – Brincando com Ruby

Neste último sábado, dia 25, houve o FLISOL em João Pessoa lá no IESP, onde ministrei duas turmas de um minicurso, Brincando com Ruby, cuja descrição é:

Ruby é uma linguagem dinamicamente tipada de altíssimo nível, semelhante a Python. Apesar de seu uso ter se popularizado pelo framework web Rails, ela não se limita a isso. Neste minicurso você aprenderá um pouco de Ruby e vai utilizá-la em uma das partes mais divertidas da computação: o desenvolvimento de jogos.

Pela manhã estava com a sala lotada, ~40 pessoas, e pela tarde tinham ~10. Muito obrigado a todos que se inscreveram e participaram do minicurso, foi uma ótima experiência, a minha primeira. Espero que tenha dado para aprender um pouco de Ruby e desenvolvimento de jogos com o Gosu. Os slides estão aí em cima e o jogo desenvolvido foi o do tutorial oficial do Gosu, só pegar em http://code.google.com/p/gosu/wiki/RubyTutorial.

Parabéns aos organizadores do evento! Em especial, pois é o que eu conheço mais, é meu amigo, e foi quem eu aperriei para fazer o FLISOL, o Joseph.

Se alguém tiver alguma sugestão em como melhorá-lo, adoraria ler. A primeira parte da palestra, que é apresentando Ruby, achei meio chatinha, já que quase não há prática, é só uma palestra normal. Mas, quando começa o desenvolvimento do jogo, fica bem legal. Depois dos minicursos pensei que pudesse ser melhor que o jogo fosse sendo construído intercalando com o aprendizado da linguagem, sem ter essa divisão parte 1/parte 2. Difícil, mas vou tentar :)

Tags: , , , , , . Publicado em Artigos.