Este blog tem por finalidade apresentar meus trabalhos e alguns aspectos de minha vida pessoal. Eu (editor do blog) sou engenheiro e mestre em engenharia de teleinformática, sou usuário e entusiasta de software livre, sou católico praticante e espero que o meu blog possa te ajudar.
sexta-feira, 18 de dezembro de 2009
Building Blaster
English: I found this game and it's possible to post here on the MultiSign, so have fun.
Mais Jogos de Estratégia Online no Click Jogos
sábado, 28 de novembro de 2009
Protótipo do SIRENE em funcionamento
Eu tive dois artigos aceitos, sendo que um deles consiste no resumo do meu mestrado.
Para este artigo, eu preparei um protótipo do SIRENE e gerei este vídeo.
Apesar do vídeo ser curto, ele demorou alguns minutos para ser gerado, quem tiver interesse em saber como está o protótipo é só entrar em contato.
sexta-feira, 13 de novembro de 2009
Concatenar arquivos pdf no Linux
~> gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf file1.pdf file2.pdf file3.pdf #[...]
Funcionou muito bem.
O bom é poder fazer isso usando o GS (Ghostscript), que é um software bem conhecido dos usuários de GNU/Linux.
Enfim, nem precisei comprar um software (conhecido nosso) versão professional, e tive o mesmo resultado.
É bom ver como soluções tão simples funcionam perfeitamente para problemas tão simples.
As vezes buscamos uma solução que resolva todos os problemas com todas as possíveis situações, sendo que o tempo que levamos para analisar se a solução serve para todas as situações de todos os problemas poderia ser usado de outra forma.
E se tomássemos uma solução simples, como o comando que citei para o problema que eu tinha, e aprimorássemos ela com novos recursos e procurando saber o que a solução é realmente capaz de fornecer?
Teríamos nosso problema resolvido e ainda saberíamos quais outros problemas resolver com a mesma solução.
quarta-feira, 11 de novembro de 2009
Trabalhos acadêmicos no Interaction South-America
Seguem alguns títulos dos trabalhos:
- A Influência de Interfaces Gráficas na Narrativa e Imersão de Jogos Digitais;
- Inspeção semiótica do Wiki-STOA: uma análise a partir da teoria da complexidade;
- Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA;
- A percepção das tecnologias;
- A personalização como estratégia para o gerenciamento da obsolescência de artefatos;
- Design de interface para questionário on-line do Censo Demográfico 2010;
- Método para Aplicações Web Focado em Usabilidade Aderente a um Processo de Software Convencional;
- New scenarios in the design education with dynamic of interaction;
- Levantamento de Heurísticas para Avaliação de Interfaces do Usuário Baseadas em Voz;
- Reconhecimento de Gestos da LIBRAS com Classificadores Neurais a partir dos Momentos Invariantes de Hu;
- Compreendendo dinâmicas de jogo: as esferas de interação dentro do framework Componentes-Dinâmicas-Experiências;
- Violent Video Games: Changes in non-verbal behavior and short-term effects on valence and arousal.
segunda-feira, 26 de outubro de 2009
Convolution - Scilab
I didn't understand what you'd like to say.
I have another blog about Scilab, and I made some posts about convolution (here).
I wrote something about the convolotion's properties there, I think you'll be satisfied.
If you need any help more, I can try to do it.
Ok, that's all.
God bless you, my friend.
quarta-feira, 21 de outubro de 2009
Interaction
Site do evento: http://www.interaction-southamerica.org/?lang=pt
Pois bem, esta é a primeira edição de um evento internacional que contará com presenças importantes de vários locais do mundo.
Seguem alguns dos palestrantes confirmados e os temas de suas apresentações:
Nimish Biloria – [TU Delft]
Professor assistente, Corpo docente de Arquitetura, TU Delft, O Países Baixos Título: Morfologias arquitetônicas Resumo: O foco de conferência no recente trabalho em explorar assuntos como o desejo compulsivo para especular sobre oportunidades arquitetônicas na presença de assunto animado, entidades orgânicas e a presença geométrica e matemática estando por baixo de delas e como esta pesquisa está estruturada por uma variedade múltipla de fontes que alcançam de ficção científica e Moda até Biologia e Botânica.Simon Biggs
Professor de Pesquisa na Faculdade de Arte em Edimburgo, REINO UNIDO Título: Transculturação, Transliteração e poesia generativa Resumo: Que efeito estão tendo recentes desenvolvimentos em comunicações globais em idioma e seus leitores e escritores; esses definiram pelas relações deles com idioma? O que acontece a nossa identidade, como seres lingüísticos, quando nosso meio de comunicação e troca de associação demográfica ? O que está dirigindo isto? É a tecnologia, as migrações das pessoas ou uma mistura destes fatores? Como estas são dinâmicamente refletida, dentro e em práticas criativas contemporâneas com idioma e novas mídia?Juliana Ferreira – [Nokia Design - Londres]
Juliana Ferreira começou sua carreira aos 18 anos, se formando como Design Gráfico pela Univercidade, no Rio de Janeiro, iniciando sua jornada do impresso ao webdesign, criando aplicações e serviços on-line. Sete anos depois, se mudou para Londres onde adquiriu titulo de Mestre em Design de Interação pela Westminster University e já passou por grandes empresas como BT, Citi bank e BBC. Nos últimos três anos tem atuado como especialista em Desing de Interação na Nokia Design, criando conceitos de estratégia de design para user interface e serviços Nokia, Titulo da Palestra: Your Personal Device: Homescreens e personalização Resumo: Conheça sobre o processo de design utilizado pela Nokia Design envolvendo pesquisadores, designers e desenvolvedores para descobrir as tendências futuras no consumo e serviços, e como as pessoas estão exigindo cada vez mais controle sobre essa expêriencia.Você também terá a oportunidade de ver outros projetos de projeto de interfaces inovadoras da Nokia Design.
Robson Santos – [Instituto Nokia de Tecnologia (InDT)]
Robson Santos, D.Sc. Pesquisador sênior em usabilidade do Instituto Nokia de Tecnologia; Primeiro a obter o título de Doutor em Design no continente, pela PUC-Rio, possui larga experiência prática e extenso currículo docente em cursos de pós-graduação, de graduação e de extensão. Título: Coleta e análise de dados em testes de usabilidade Resumo: A usabilidade é um importante elemento para criar uma boa experiência do usuário. Para se obter dados sobre o uso de produtos e serviços digitais é importante conhecer as técnicas para coleta de dados qualitativos e quantitativos. Não menos importante é possuir bom repertório analítico que permita extrair informações relevantes a partir dos dados coletados. O workshop visa oferecer oportunidade para que os participantes experimentem métodos e técnicas para coleta (entrevistas,questionários, registros em vídeo) e análise de dados (verbalizações, expressões faciais). A metodologia será participativa, de maneira que os presentes possam exercitar as técnicas apresentadas.Phil Ohme & Eric Pan – [Intuit]
Phil Ohme faz parte do time de design de interação da Intuit (os fabricantes do QuickBooks, Quicken, TurboTax) e tem atuado no campo de experiência do usuário a mais de 12 anos. Ele já trabalhou para empresas como a HP e a Ford Motor Co., onde ganhou o Choice 2000 Popular Mechanics Editor’s Choice Award: Best in Show, para o projeto da primeira fábrica instaladara de mp3 player para automóveis. Phil é graduado em Engenharia Industrial do Rochester Institute of Technology (RIT) com Mestrado em Engenharia Industrial – Fatores Humanos pela Universidade de Iowa.Eric Pan é, atualmente, designer de interação sênior da empresa de software Intuit, sediada em San Diego, Califórnia, E.U.A.. Sua experiência inclui o trabalho em outras empresas iniciantes do Vale do Silício, consultoria e pesquisa acadêmica. Eric graduado da Universidade da Califórnia, San Diego em Ciência Cognitiva com especialização em Interação Humano-Computador
Titulo do Workshop : All Work and No Play: What You can Learn from Game Design” Resumo: Se você espera encontrar horas de teoria em um workshop sobre games, não se increva no “All Work and No Play: What You can Learn from Game Design”.Prático e dinâmico, este workshop tem como objetivo abordar os princípios do design de games, para que o participante entenda porque os games são tão persuasivos e capazes de prender o usuário de maneira tão eficiente.
Interatividade e discussão permitirão que você leve ideias inovadoras para seu dia-a-dia de trabalho. Increva-se e inspire-se!
terça-feira, 1 de setembro de 2009
Classificadores estatísticos - 01
Para começar, vamos estudar o classificador de mínima distância ao centróide.
Imagine que você tem um conjunto de informações sobre elementos de diferentes classes, por exemplo peso e altura de diversas pessoas. E você não sabe, acerca de todos, quais destas pessoas são adultos, crianças ou bebês.
Vamos então desenvolver a solução deste problema.
Primeiramente vamos tomar as pessoas que nós já sabemos se são adultos, crianças ou bebês.
Conjunto dos bebês (1).
pessoa 1 - 0,5m e 4,3kg
pessoa 2 - 0,45m e 3,1kg
pessoa 3 - 0,6m e 5,0kg
pessoa 4 - 0,39m e 3,2kg
pessoa 5 - 0,44m e 3,8kg
pessoa 6 - 0,51m e 4,7kg
.
.
.
pessoa n - 0,55m e 5,3kg
Conjunto das crianças (2).
pessoa n + 1 - 1,5m e 34,3kg
pessoa n + 2 - 1,45m e 33,1kg
pessoa n + 3 - 1,6m e 45,0kg
pessoa n + 4 - 1,39m e 27,2kg
pessoa n + 5 - 1,44m e 33,8kg
pessoa n + 6 - 1,51m e 34,7kg
.
.
.
pessoa n + m - 1,55m e 26,3kg
Conjunto dos adultos (3).
pessoa n + m + 1 - 1,75m e 74,3kg
pessoa n + m + 2 - 1,81m e 93,1kg
pessoa n + m + 3 - 1,66m e 55,0kg
pessoa n + m + 4 - 1,73m e 67,2kg
pessoa n + m + 5 - 1,64m e 53,8kg
pessoa n + m + 6 - 1,61m e 60,7kg
.
.
.
pessoa n + m + p - 1,55m e 42,8kg
Depois de separar cada conjunto, nós calculamos a média do peso e da altura para cada conjunto.
Conjunto 1:
média(peso) - 4,8kg (mp1)
média(altura) - 0,56m (ma1)
Conjunto 2:
média(peso) - 28,1kg (mp2)
média(altura) - 1,57m (ma2)
Conjunto 3:
média(peso) - 68,7kg (mp3)
média(altura) - 1,64m (ma3)
Então, para cada pessoa do conjunto de dados que não se sabe se ela é adulto, criança ou bebê, basta usar o classificador pronto que nós implementamos:
Sendo p o peso da pessoa e a a sua altura,
se (p - mp1)² + (a - ma1)² < (p - mp2)² + (a - ma2)² e (p - mp1)² + (a - ma1)² < (p - mp3)² + (a - ma3)² então a pessoa é um bebê (pertence ao conjunto 1);
se (p - mp2)² + (a - ma2)² < (p - mp1)² + (a - ma1)² e (p - mp2)² + (a - ma2)² < (p - mp3)² + (a - ma3)² então a pessoa é uma criança (pertence ao conjunto 2);
se (p - mp3)² + (a - ma3)² < (p - mp1)² + (a - ma1)² e (p - mp3)² + (a - ma3)² < (p - mp2)² + (a - ma2)² então a pessoa é um adulto (pertence ao conjunto 3).
Essa análise, muito simples, foi apenas para apresentar o classificador estatístico mais simples de todos: o classificador de distância mínima ao centróide (DMC).
A depender do retorno que eu tenha por parte dos leitores, eu posso até colocar códigos em Scilab deste e de outros classificadores.
quarta-feira, 5 de agosto de 2009
Fazendo vídeos e fotos com webcam
O Cheese é um software simples de usar e que dá bons resultados.
Segue um vídeo da utilização do sistema:
Pena que a tela de exibição dos frames não foi capturada corretamente.
terça-feira, 28 de julho de 2009
Tutorial Scilab - 8 [Usando arquivos]
Quanto tempo hein? Mas finalmente estou retomando os meus compromissos (dentre eles, o MultiSign).
Pois bem, vamos ver algo sobre manipulação de arquivos com o Scilab agora.
No Scilab, existem diversas funções para manipular arquivos tanto arquivos ASCII quanto binários.
Os aquivos são importantes para melhor gerenciar dados de entrada e resultados obtidos (óbvio não acham?).
Como a maioria deve saber o que é um arquivo, vamos dar continuidade ao post.
Uma boa forma de conhecer as formas de manipulação de arquivos no Scilab é com o help, olhe como acessar o help na figura abaixo:
Na tela de ajuda, digite: file manage e selecione a primeira opção file(.).
Esta função é semelhante à função fopen(.) da linguagem C.
No help, é possível ver várias informações sobre a função file(.).
Algumas das outras funções funções de manipulação de arquivos no Scilab são:
- save;
- load;
- mopen;
- mclose;
- writeb;
- readb.
- read;
- write.
A função write(.) cria arquivos ASCII e a função read(.) carrega os arquivos em variáveis.
As variáveis envolvidas nestas funções geralmente são matrizes e/ou vetores. Vamos aos exemplos agora:
-->x = rand(5,5)
x =
0.2113249 0.6283918 0.5608486 0.2320748 0.3076091
0.7560439 0.8497452 0.6623569 0.2312237 0.9329616
0.0002211 0.6857310 0.7263507 0.2164633 0.2146008
0.3303271 0.8782165 0.1985144 0.8833888 0.312642
0.6653811 0.0683740 0.5442573 0.6525135 0.3616361
-->write("test_data.dat", x);
-->y1 = read("test_data.dat", 1, 2) // 1 linnha e 2 colunas
y1 =
0.2113249 0.6283918
-->y2 = read("test_data.dat", 2, 2) // 2 linhas and 2 colunas
y2 =
0.2113249 0.6283918
0.7560439 0.8497452
-->y3 = read("test_data.dat", -1, 1) // -1 indica que se deve ler todas as linhas
y3 =
0.2113249
0.7560439
0.0002211
0.3303271
0.6653811
-->>y4 = read("test_data.dat", -1, 5) // lê o arquivo inteiro
y4 =
0.2113249 0.6283918 0.5608486 0.2320748 0.3076091
0.7560439 0.8497452 0.6623569 0.2312237 0.9329616
0.0002211 0.6857310 0.7263507 0.2164633 0.2146008
0.3303271 0.8782165 0.1985144 0.8833888 0.312642
0.6653811 0.0683740 0.5442573 0.6525135 0.3616361
O arquivo test_data.dat é apresentado na figura a seguir (clique na figura para vê-la em tamanho real).
sexta-feira, 3 de julho de 2009
Nota aos leitores
Eu estou com algumas atividades no momento que estão tomando muito tempo e eu também tenho outros blogs (Using Scilab, Engenheiro Católico e Catholic Engineer) os quais têm me dado muita satisfação, pois os leitores estão sempre interagindo com comentários e e-mails.
Espero estar renormalizando o MultiSign na próxima semana.
Abraços a todos e que Deus os abençoe.
quinta-feira, 4 de junho de 2009
Uma questão de energia
Gostaria de verificar o potencial dos leitores do MultiSign.
Pois bem, o problema é o seguinte:
Pegue uma mola e comprima-a ao máximo.
Coloque a mola comprimida em um suporte que não permita que a mola volte à posição de relaxamento e depois mergulhe tudo em um ácido.
Este esperimento deve ser feito usando um ácido que dissolva o material da mola mas que o suporte não sofra danos.
A pergunta: para onde vai a energia contida na mola (kx²/2)?
--------------
A solução mais inteligente pode ganhar um prêmio.
sábado, 30 de maio de 2009
Top Blog
Então eu pensei, se os meu leitores não comentam quase nenhum post, alguns poucos entram em contato por messenger ou e-mail. Eu agradeço os que interagem, mas vocês sabem qual a realidade do MultiSign.
Eu fiquei até pensando se não seria uma boa inscrever o MultiSign, mas resolvi avisar aos leitores e ver a reação.
Se a resposta for positiva, eu faço a inscrição.
Se não tiver resposta, enfim é assim mesmo, não irei deixar de atualizar o blog.
sábado, 16 de maio de 2009
Desafio 01
Haviam tantos problemas interessantes. Eu sei que a maioria das pessoas não valoriza os problemas clássicos da matemática, por exemplo, mas estudá-los e tentar resolver os problemas da base do conhecimento abre a mente para aprender cada vez mais, e, além do benefício pessoal, também é possível que outras pessoas usem suas idéias para resolver outros problemas.
Eu mesmo já usei conceitos de teoria dos números, algo que é da base da matemática, para resolver problemas em processamento de sinais e imagens.
Uma vez meu primeiro professor de cálculo disse: "o único conhecimento que você não usa é aquele que você não possui", e isso é verdade.
Eu vou então propor o problema que eu me lembrei enquanto almoçava na 4ª feira desta semana:
Você tem 1001 bolinhas e uma balança de pratos (que serve para comparar dois pesos e determinar o mais leve).
Uma destas bolinhas tem uma massa diferente das outras 1000 bolinhas.
Como determinar se a massa desta bolinha, que é diferente das outras, é maior ou menor que a massa das outras bolinhas usando a balança, no máximo, duas vezes?
---------------------------
Se os leitores se mostrarem interessados por esta minha iniciativa, eu pensei em recompensar as soluções. Talvez transferências para contas corrente sejam interessantes.
Quem tiver uma solução, favor compartilhá-la conosco fazendo um comentário neste post.
quarta-feira, 6 de maio de 2009
Tutorial Scilab - 7 [Operações elemento a elemento]
Estão vendo como é difícil atualizar o MultiSign e escrever a dissertação? Mas assim que possível iremos regularizar a situação.
Vamos abordar as operações elemento a elemento usando o Scilab.
Este post será basicamente de exemplos.
Vamos supor que temos duas matrizes de mesmo tamanho (X e Y) e queremos multiplicar (Z1) e dividir (Z2) os elementos correspondentes:
X = [x11 x12 x13;
x21 x22 x23;
x31 x32 x33].
Y = [y11 y12 y13;
y21 y22 y23;
y31 y32 y33].
Z1 = [x11*y11 x12*y12 x13*y13;
x21*y21 x22*y22 x23*y23;
x31*y31 x32*y32 x33*y33].
Z2 = [x11/y11 x12/y12 x13/y13;
x21/y21 x22/y22 x23/y23;
x31/y31 x32/y32 x33/y33].
Não existe um operador matemático matricial para tal operação, mas o Scilab tem um recurso para fazer isso. Observem a seguir.
-->X = zeros(3,3);
-->X(:) = [1:9]'
X =
1. 4. 7.
2. 5. 8.
3. 6. 9.
-->Y = ones(3,3) + X'
Y =
2. 3. 4.
5. 6. 7.
8. 9. 10.
-->Z1 = X.*Y
Z1 =
2. 12. 28.
10. 30. 56.
24. 54. 90.
-->Z1 = X./Y
Z1 =
0.5 1.3333333 1.75
0.4 0.8333333 1.1428571
0.375 0.6666667 0.9
As operações de soma e subtração matriciais operam elemento a elemento.
Agora vamos fazer operações lógicas com matrizes.
Os operadores:
- & - AND;
- | - OR;
- ~ - NOT.
-->X = rand(3,3) > 0.2
X =
F T T
T F T
T T T
-->Y = rand(3,3,'normal') > 0.5
Y =
T T F
T F T
F F F
-->Z1 = X & Y
Z1 =
F T F
T F T
F F F
-->Z2 = X | Y
Z2 =
T T T
T F T
T T T
-->Z3 = ~X
Z3 =
T F F
F T F
F F F
-->Z4 = (~X) | Y
Z4 =
T T F
T T T
F F F
Com isso, fechamos a parte de operações matriciais básicas.
sexta-feira, 17 de abril de 2009
Tutorial Scilab - 6 [Vetores e Matrizes - 4]
Primeiro gostaria de me explicar com os leitores do MultiSign. Eu passei estes dias (quase 3 semanas) sem fazer nenhuma postagem porque estava envolvido com as atividades da Semana Santa, festas pascais e um artigo que espero finalizar hoje.
Voltando ao assunto. Vamos ver agora como fazer operações lógicas com vetores e matrizes.
Um exemplo:
Vamos supor que o vetor a seguir corresponde a altura, em metros, de um conjunto de pesoas.
Precisamos então identificar as pessoas que têm mais de 1,80m.
Uma solução direta é analizar elemento por elemento:
v(1) > 1.80
v(2) > 1.80
v(3) > 1.80
v(4) > 1.80
v(5) > 1.80
v(6) > 1.80
v(7) > 1.80
Mas o Scilab tem uma forma mais prática de fazer isso:
v > 1.8 // esta operação não depende da dimensionalidade ou tamanho do vetor
Vamos fazer um script.
-->v = [1.55 1.82 1.48 1.71 1.62 1.94 2.00]'
v =
1.55
1.82
1.48
1.71
1.62
1.94
2.
-->v > 1.8
ans =
F
T
F
F
F
T
T
Mas, se o que desejamos é saber a posição dos elementos (pessoas) com mais de 1,80m:
-->pos = find(v > 1.8)
pos =
2. 6. 7.
Os elementos em v que são maiores que 1,80 são o segundo (1,82), sexto (1,94) e sétimo (2,00).
Podemos fazer a mesma coisa com matrizes.
Um exemplo muito útil é criar uma matriz binária em que a probabilidade de um elemento ser 0 (zero) é a mesma dele ser 1 (um).
Olhem o script e me dêem um feedback.
-->x = rand(3, 3)
x =
0.5667211 0.0568928 0.7279222
0.5711639 0.5595937 0.2677766
0.8160110 0.1249340 0.5465335
-->y = x > 0.5
y =
T F T
T T F
T F T
Para instigá-los, eu pergunto por que tem tantos T's a mais que F's?
terça-feira, 31 de março de 2009
Mais uma etapa chegando ao fim...
O motivo é o meu mestrado que está chegando ao fim, e como todo final de curso que se preze estou com muito o que fazer.
Minha previsão é terminar o mestrado em julho (com a defesa da minha dissertação).
Enquanto estou ocultado com as atividades do mestrado, não poderei dar a devida atenção aos meus blogs.
Espero contar com a compreensão de todos e que Deus esteja conosco hoje e sempre.
quinta-feira, 19 de março de 2009
Mathematical Morphology using OpenCV
Now, I want to write about the functions of OpenCV* for manipulate the structural element and apply the operations of erosion and dilatation.
The following function creates the structural element:
IplConvKernel* cvCreateStructuringElementEx( int cols,
int rows,
int anchor_x,
int anchor_y,
int shape,
int* values=NULL );
CV_SHAPE_RECT
, square element;CV_SHAPE_CROSS
, element in disc;CV_SHAPE_ELLIPSE
, elliptic element;CV_SHAPE_CUSTOM
, element defined by user. In this case, the parametervalues
specifies the mask, delimiting the vicinity of the pixel in analysis.
CV_SHAPE_CUSTOM
.Function of erosion:
void cvErode( const CvArr* src, CvArr* dst,
IplConvKernel* element=NULL, int iterations=1 );
Function of dilatation:
void cvDilate( const CvArr* src, CvArr* dst,
IplConvKernel* element=NULL, int iterations=1 );
- src: Input image;
- dst: Output image;
- element: Structural element. If it's
NULL
, the structural element is a square 3x3; - iterations: Number of times for apply the operation.
More informations here.
----------------------
* OpenCV (Open Computational Vision) is a API for development using Computational Vision. It's a very powerful set of functions for capture, processing and showing of images and videos.
quarta-feira, 18 de março de 2009
Carro voador "popular"
Nada mais de engarrafamentos, trânsito lento, ruas esburacadas, pneus furados, etc...
Basta mudar seu carro convencional por um SKYCAR.
Segue um vídeo do produto.
Vale lembrar que é necessário um brevê para pilotar o SKYCAR.
sábado, 14 de março de 2009
Tutorial Scilab - 5 [Operações Lógicas]
Como eu acredito que a maioria dos leitores conhece algo sobre operações lógicas, não vamos dar uma aula sobre o assunto. Porém, é bom revisar algo.
Operações lógicas são usadas para analisar situações do tipo:
- 2 é maior que 3? - falso
- o vetor [1 2 3 4] é maior que o vetor [1 3 5]? - verdadeiro
- a palavra 'casa' é menor que 'cachorro'? - falso
As operações lógicas são aplicadas para manipular os resultados destas situações, por exemplo:
Eu tenho 22 anos, meu pai tem 52 e minha irmã tem 19.
Quem de nós é o mais velho?
Vamos criar uma solução geral para o problema.
- Se eu sou mais velho que meu pai e minha irmã então eu sou o mais velho.
- Se meu pai é mais velho que eu e minha irmã então ele é o mais velho.
- Se minha irmã é mais velha que eu e meu pai então ela é a mais velha.
O conector e é uma operação lógica.
Os operadores lógicos são usados com variáveis lógicas, estas por sua vez são variáveis que só assumem os valores verdadeiro ou falso.
As operações lógicas básicas são as seguintes: {não, ou, e}, em inglês: {not, or, and} (vamos usar a notação em inglês porque esta é a adotada na literatura em português, inclusive brasileiro).
A operação not é unária e as demais são binárias.
Vamos ver agora os resultados de cada operação.
NOT
- not(verdadeiro) = false
- not(false) = verdadeiro
AND
- falso and falso = falso
- falso and verdadeiro = falso
- verdadeiro and falso = falso
- verdadeiro and verdadeiro = verdadeiro
OR
- falso or falso = falso
- falso or verdadeiro = verdadeiro
- verdadeiro or false = verdadeiro
- verdadeiro or verdadeiro = verdadeiro
Agora um pequeno exemplo.
Se eu preciso de uma raquete e uma bola mas só tenho a raquete então eu não estou satisfeito. Porém, se eu preciso de uma bola de basquete ou de vôlei mas eu só tenho a de vôlei então eu já estou satisfeito.
Sobre os operadores no Scilab:
O operador '~' é o not.
O operador '|' é o or.
O operador '&' é o and.
As operações and e or podem ser aplicadas em vetores com as funções or(.) e and(.).
Agora os scripts:
-->x = 10;
-->y = 15;
-->z = x + y
z =
25.
-->(x > y) & (z > x) // x é menor que y então a primeira operação é falso
ans =
F
-->(x > y) | (z > x) // z é maior que x então a segunda operação é verdadeiro
ans =
T
-->~((x > y) & (z > x)) // o resultado é o inverso do primeiro resultado
ans =
T
-->~((x > y) | (z > x)) // o resultado é o inverso do segundo resultado
ans =
F
Os resultados são F (false - falso) ou T (true - verdadeiro) porque operações logicas fornecem resultados lógicos.
Se for necessário usar os valores lógicos diretamente:
-->r1 = %F
r1 =
F
-->r2 = %T
r2 =
T
-->and([r1 r2])
ans =
F
-->or([r1 r2])
ans =
T
Para fechar o post, se você usar operadores lógicos com variáveis numéricas, o Scilab interpreta 0 (zero) como falso e qualquer coisa diferente de zero como verdadeiro.
-->x = 0;
-->y = 2;
-->z = -5;
-->x | y | z
ans =
T
-->x & y & z
ans =
F
-->x & z
ans =
F
-->x & y
ans =
F
-->y & z
ans =
T
sexta-feira, 13 de março de 2009
Voar sobre a água
Tudo se resume neste vídeo.
Vamos analisar um pouco a situação.
Lembram-se de quantidade de movimento? Pois bem, a quantidade de movimento da água para baixo é a mesma da pessoa para cima, de modo que quando é alcançada uma velocidade inicial suficiente, nós subimos (e bem alto como visto no vídeo).
Não vou dar uma aula de física aqui, mas caso alguém tenha a oportunidade de brincar com algo assim um dia, só recomendo que não se esqueça do seu próprio peso, pois a força que a água te joga para cima deve ser igual ao seu peso para te manter em cima e se você for voar para frente, não se esqueça de continuar a manter seu peso equilibrado.
quarta-feira, 11 de março de 2009
Acervo de mídias digitais on line
O sistema, segundo o próprio portal, é desenvolvido em Software Livre (mais um ponto positivo).
O que achei muito útil é que os textos incluem bibliografia por áera do conhecimento (Administração, Economia, Arquitetura, Artes, Política, Saúde, Informática, Matemática, Física, Medicina, etc...) e também uma seção de teses e dissertações, também dividida por áreas do conhecimento.
Enfim, fiquei sabendo que este portal estava ameaçado de ser fechado por falta de acessos, então vamos acessar!
segunda-feira, 9 de março de 2009
Canal do Vaticano no YouTube
O Papa Bento XVI decidiu por criar um canal no YouTube: http://www.youtube.com/vatican, alguns bispos foram contra pois disseram que um local com vídeos de quaisquer natureza não é adequado para expor o Vaticano, porém o Papa disse: "Cristo também se 'rebaixou' para assumir a natureza humana" e concluiu dizendo que deseja estar onde as pessoas estão.
É bom ver que as autoridades da Igreja estão abrindo seus olhos para os novos meios de comunicação e estão adentrando neste "novo mundo".
Devemos sempre evoluir e criar novas tecnologias e recursos, porém sem a Luz de Deus não seremos capazes de chegar na verdadeira e completa evolução.
segunda-feira, 2 de março de 2009
Convolution
Give a generic function f(t), for example a signal of voice.
We want to analyze the similarity between f(t) and another function h(t) (known). The similarity should be calculated for all t, because we don't know the moment that f(t) is most similar to h(t).
Okay, now we know what we have to do, let's learn how we do.
We have a function f(t), the most similar function to f(t) is f(t) (obvious), so if we dislocate f(t) over itself, for each lag (t - s) we calculate the similarity between f(t) and f(t - s), the maximum similarity occurs for s = 0.
But, if we have the function f(t - a) (f(t) shifted to left of a), thus if we dislocate h(t) = f(t - a) over f(t) the similarity between f(t) and f(t - s), the maximum similarity occurs for s = -a.
If we have a function h(t) and we don't know the moments and the values of similarity between f(t) and h(t), then we need calculate the similarity for each t, and I say: this calculus is the convolution.
For finish, Why do we want to calculate the similarity between two functions?
Because we can find known patterns in given functions. Return to signal of voice, we can find phonemes (known patterns) over a captured signal.
--------------
The command in Scilab that calculates the convolution is convol().
quinta-feira, 26 de fevereiro de 2009
Convolução
Vamos primeiro tomar uma função f(t) qualquer, f(t) pode ser um sinal de voz por exemplo.
Agora nós queremos analisar a semelhança entre f(t) e uma outra função h(t), em que h(t) é uma função conhecida. A medida de semelhança entre f(t) e h(t) deve ser definida para todo t, pois nós não sabemos em que ponto de f(t) passa a ser mais semelhante a h(t).
Agora que nós sabemos o que é preciso fazer, vamos ver como fazer.
Se nós temos uma função f(t), a função que mais se aproxima de f(t) é a própria f(t) (óbvio), então se nós passarmos a função f(t) sobre ela mesma e para cada defasagem (t - s) nós calcularmos a semelhança, teremos um máximo quando a defasagem for nula (s = 0).
Porém, se tomarmos a função f(t - a) (f(t) defasado, em atraso, de a), então ao passar f(t - a) sobre f(t), teremos a máxima semelhança quando a defasagem for tal que anule o atraso a (s = -a).
Agora, se a função for outra (h(t), previamente conhecida) nós não temos informação de como nem em que ponto a semelhança entre f(t) e h(t) ocorre.
Então precisamos fazer essa medição, e eu digo que essa medição de semelhança entre duas funções para cada instante t é a convolução entre f(t) e h(t).
Por fim, por que fazer a análise de semelhança entre duas funções?
Porque nós podemos precisar encontrar padrões, já conhecidos, em funções que possuímos. Voltando ao sinal de voz, nós podemos tentar localizar fonemas (padrões conhecidos) ao longo do sinal capturado.
--------------------
A função do Scilab que implementa a convolução é convol().
quinta-feira, 19 de fevereiro de 2009
Tutorial Scilab - 4 [Vetores e Matrizes - 3]
Vamos agora abordar funções mais específicas para manipulação de matrizes.
As funções que mais uso são as seguintes:
Como é de se esperar, "cada função é uma função".
Agora, aos exemplos:
-->eye(3,3) // matriz identidade 3 x 3*
ans =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->rand(5,2) // matriz (5 linhas e 2 colunas) de números aleatórios com distribuição de probabilidade uniforme entre [0, 1]
ans =
0.0683740 0.5442573
0.5608486 0.2320748
0.6623569 0.2312237
0.7263507 0.2164633
0.1985144 0.8833888
-->rand(2,5,'normal') // matriz (2 linhas e 5 colunas) de números aleatórios com distribuição normal (Gaussiana) de média = 0 e variância = 1
ans =
1.0478272 - 1.4061926 - 1.7350313 - 0.2143931 2.5891773
- 1.3218008 - 1.0384734 0.5546874 - 2.0735088 0.0424792
-->det(eye(4,4)) // determinante da matriz identidade 4 x 4
ans =
1.
-->X = rand(5,5) // X é uma matriz (5 x 5) com valores aleatórios entre [0, 1]
X =
0.4368588 0.0437334 0.1280058 0.1531217 0.8784126
0.2693125 0.4818509 0.7783129 0.6970851 0.1138360
0.6325745 0.2639556 0.2119030 0.8415518 0.1998338
0.4051954 0.4148104 0.1121355 0.4062025 0.5618661
0.9184708 0.2806498 0.6856896 0.4094825 0.5896177
-->det_X = det(X) // det_X é o determinante de X
det_X =
- 0.0799884
-->[py px] = find(eye(3,3)) // px corresponde as posições (eixo - x) dos números não-nulos (diferentes de zero) e py corresponde as posições (eixo - y) destes números
px =
1. 2. 3.
py =
1. 2. 3.
-->[py px] = find(~eye(3,3)) // o til '~' é a operação de negação lógica, então (~0) = 1 e (~1) = 0**
px =
1. 1. 2. 2. 3. 3.
py =
2. 3. 1. 3. 1. 2.
-->X // a variável X (X = rand(5,5)) definida antes
X =
0.4368588 0.0437334 0.1280058 0.1531217 0.8784126
0.2693125 0.4818509 0.7783129 0.6970851 0.1138360
0.6325745 0.2639556 0.2119030 0.8415518 0.1998338
0.4051954 0.4148104 0.1121355 0.4062025 0.5618661
0.9184708 0.2806498 0.6856896 0.4094825 0.5896177
-->sum(X,'r') // soma sobre as colunas de X (linha de valores)
ans =
2.6624119 1.4850001 1.9160468 2.5074436 2.3435661
-->sum(X,'c') // soma sobre as linhas de X (coluna de valores)
ans =
1.6401323
2.3403973
2.1498187
1.9002098
2.8839105
-->sum(X) // soma de todos os elementos de X
ans =
10.914469
Ok, caso os leitores se manifestem, posso fazer novos posts aprofundando mais cada função.
------------------
* Se o comando é dado sem o ponto-e-vírgula ';' então o resultado da comando é apresentado no prompt e armazenado na variável ans.
** Operações lógicas são cenas futuras que veremos aqui no MultiSign.
segunda-feira, 16 de fevereiro de 2009
Tutorial Scilab - 3 [Vetores e Matrizes - 2]
Vamos começar com as funções que podem ser usadas em matrizes e vetores no Scilab.
Como já se sabe, o Scilab tem várias funções matemáticas, por exemplo: sin, cos, tan, asin, acos, atan, exp, log, etc....
Todas estas funções podem ser usadas em tensores, matrizes, vetores e escalares.
Vamos agora ao primeiro exemplo:
-->x = [1 0 1;
-->0 1 0;
-->1 0 1]
x =
1. 0. 1.
0. 1. 0.
1. 0. 1.
-->y = cos(%pi*x) // o Scilab tem algumas constantes pré-definidas, eu conheco PI (%pi = 3.1415927) e E (%e = 2.7182818)
y =
- 1. 1. - 1.
1. - 1. 1.
- 1. 1. - 1.
Lembrando que cos(%pi) = -1 e cos(0) = 1 (círculo trigonométrico).
Dando continuidade ao post, operações com matrizes geram novas matrizes e estas novas matrizes podem ser usadas em outras operações e/ou funções.
Segundo exemplo:
-->x = [1 2 3]
x =
1. 2. 3.
-->y = [3;
-->2;
-->1]
y =
3.
2.
1.
-->z1 = exp(x*y)
z1 =
22026.466
-->z2 = exp(y*x)
z2 =
20.085537 403.42879 8103.0839
7.3890561 54.59815 403.42879
2.7182818 7.3890561 20.085537
A operação x*y resulta em:
x*y = [1*3 + 2*2 + 3*1] = [3 + 4 + 3] = 10.
E a operação y*x resulta em:
y*x =
[3*1 3*2 3*3;
2*1 2*2 2*3;
1*1 1*2 1*3] =
[3 6 9;
2 4 6;
1 2 3].
A função exp() retorna a exponencial natural (exp(x) = %e^x).
quinta-feira, 5 de fevereiro de 2009
Neural learning
The algorithms of neural computation are based in observations of nature, specially in animal's nervous system.
I did a post (here - in Portuguese) about neural networks, I wrote about concepts for who wants develop the algorithms.
The neural algorithms are able to assimilate the information by itself, like us.
The computers hold the information in digital memory and access the information by memory addresses, if we need an information then we send the address and get the content. In neural systems, if we need an information then we send a correlated information.
Let's think. You can't enumerate your neurons and access the information one by one. But you can access the information in your brain using other information correlated to it, for example: dog. You thought in a dog conforms to the standards you know.
Other example:
You look the image and you think the words garden, flowers, plants and the emotions like peace, tranquility, etc...
To finish, remember that God created the perfect nature, we can contemplate the nature and seek inspiration in God's creations.
segunda-feira, 2 de fevereiro de 2009
Tutorial Scilab - 2 [Vetores e Matrizes - 1]
Como faz tempo que fiz o primeiro post do tutorial do Scilab, acho que está na hora de continuar o serviço.
Como já foi dito, o Scilab é muito semelhante ao Matlab (que eu não gosto, nem uso e muito menos recomendo). E Matlab é uma sigla para "Laboratório de Matrizes", ou seja, é um software voltado para a manipulação matricial de dados.
Se nós temos a equação y = A x, em que:
x = [1 2 3 4]' (x é um vetor coluna)
e
A = [1 2 3 4;
1 2 3 4;
1 2 3 4;
1 2 3 4].
Em que A é uma matriz quadrada.
Obtem-se que:
y = [x[1]A[1,1]+x[2]A[2,1]+x[3]A[3,1]+x[4]A[4,1] x[1]A[1,2]+x[2]A[2,2]+x[3]A[3,2]+x[4]A[4,2] x[1]A[1,3]+x[2]A[2,3]+x[3]A[3,3]+x[4]A[4,3] x[1]A[1,4]+x[2]A[2,4]+x[3]A[3,4]+x[4]A[4,4]]' = [1²+2²+3²+4² 1²+2²+3²+4² 1²+2²+3²+4² 1²+2²+3²+4²]' = [30 30 30 30]'.
Para fazer operações assim em linguagens de programação convencionais (C/C++, Java, Python, Pascal, Perl, etc...) seria necessário declarar as variáveis como vetores ou matrizes (com ponteiros, a depender da situação) e fazer laços de repetição.
Mas, como o Scilab é um software criado para manipular matrizes, deve ser fácil resolver este tipo de problema.
Realmente é fácil, basta fazer o seguinte:
-->x = [1 2 3 4]'; // a apostrofe { ' } indica a transposição, então x é um vetor coluna, pois [1 2 3 4] é um vetor linha e x é [1 2 3 4] transposto.
-->A = [1 2 3 4;
-->1 2 3 4;
-->1 2 3 4;
-->1 2 3 4];
-->y = A*x
y =
30.
30.
30.
30.
Observem a coerência com o que foi explicado, pois obtemos o vetor coluna y = [30 30 30 30]'.
Para os que estudam álgebra linear, esperem que o Scilab vai resolver muitos problemas para vocês.
terça-feira, 27 de janeiro de 2009
Aprendizagem neural
Os algoritmos de computação neural são baseados em observações da natureza, em especial do sistema nervoso dos animais.
A base da computação neural é a aprendizagem a partir de exemplos, como eu já comentei aqui.
Os algoritmos têm a capacidade de assimilar a informação pela própria informação, como nós mesmo fazemos.
Os computadores tradicionais armazenam a informação em endereços de memória, e quando precisamos daquela informação nós fornecemos o endereço em que ela se encontra. Em sistemas neurais, quando nós precisamos de uma informação nós temos que fornecer ao sistema a informação associada.
Vamos fazer um paralelo com nosso cérebro. Você não pode numerar todos os seus neurônios e sair analisando a informação presente em cada um, porém você pode acessar a informação armazenada a partir de uma outra informação associada, por exemplo: cachorro. Você visualizou um cachorro em sua cabeça, conforme os padrões que você conhece de um cachorro.
Vamos dar outro exemplo:
Ao ver a imagem acima, você lembra das palavras jardim, plantas e flores e das emoções, normalmente, associadas: paz, tranquilidade, calma, etc....
Lembremo-nos que se Deus criou a natureza perfeita, nós podemos buscar inspiração nela para criar nossas coisas, consientes que nunca chegaremos a tamanha perfeição.
______________________
* Se vocês interagirem vira um diálogo.
quinta-feira, 15 de janeiro de 2009
Blog about Scilab
I want to teach how to use the Scilab for English speakers.
I'll post codes and tips for developing in Scilab and Scicos.
I want to teach something about digital images and signals processing in the new blog, but I'd like receive comments and interactions (votes in polls, for example) in the blog.
If I receive comments and suggestions, then I'll do posts as you want.
So, it's all! Visit me here, too.
Modelos 3D no Blender
No site é possível baixar gratuitamente modelos 3D desenvolvidos no Blender.
É bom ver este tipo de serviço prestado pela comunidade, pois isto aumenta a divulgação dos trabalhos desenvolvidos e das capacidades dos softwares e dos desenvolvedores.
Iniciativas como esta só têm a beneficiar quem desenvolve, pois mostra seu portfólio, e quem busca este tipo de serviço, pois passa a conhecer o trabalho já desenvolvido.
Lanço agora a sugestão de desenvolverem códigos para controlar estes modelos, por exemplo: andar, pular, interações com o ambiente, etc....
terça-feira, 13 de janeiro de 2009
Tutorial - Scilab 1
A instalação necessária é a trivial: quem usa M$ Window$ baixa o instalador e quem usa GNU/Linux pode baixar pelo Synaptic ou apt-get.
Só para dar uma ajuda aos usuários de GNU/Linux, para instalar o Scilab pelo apt-get, basta dar o comando:
>> apt-get install scilab scilab-bin scilab-doc
Pois bem, depois de instalado o Scilab está pronto para ser usado.
Abra o Scilab e vamos começar dando comandos no prompt.
A declaração de variáveis é implícita, como em Python, ou seja, você declara uma variável inicializando-a.
Vamos declarar uma variável x (float) com um valor inicial de 0 (zero).
--> x = 0;
Agora vamos tomar outra variável y (float) com valor inicial de 2.
--> y = 2;
Agora podemos fazer operações sobre as variáveis.
--> soma = x + y;
--> diferenca = x - y;
--> produto = x*y;
--> razao = x/y;
Caso você não coloque o ponto-e-vírgula no final do comando, a variável ecoa no prompt.
--> soma = x + y
soma =
2.
--> diferenca = x - y
diferenca =
- 2.
--> produto = x*y
produto =
0.
--> razao = x/y
razao =
0.
Com isso, podemos fazer as operações aritméticas convencionais que são a base de toda a matemática computacional.
Para fechar a primeira parte do tutorial, vamos trabalhar com agrupamentos nas operações.
Vamos ter as variáveis x1, x2, x3, x4 e x5 e como resultado res1, res2 e res3.
--> x1 = 1;
--> x2 = 2;
--> x3 = 3;
--> x4 = 4;
--> x5 = 5;
-->
--> res1 = (x1 + x2)*(x3 + x4)/x5;
--> res2 = (x1 + x2*(x3 - x4)) - x5;
--> res3 = x1 + (x2 - (x3 + (x4*x5)));
Assim começamos o que pode ter de mais simples no Scilab, acompanhem o MultiSign que muito ainda está por vir.
terça-feira, 6 de janeiro de 2009
I'm back
I'd like that the readers comment this post with suggestions about examples areas like digital signal and image processing, computational intelligence, automation and control, etc...
I will use the suggestions on the Scilab's codes that I will develop.
I created a new blog (all in English). I'd like to receive visits on my new blog.
Volta a ativa
Caso alguém tenha alguma sugestão de temas para os exemplos de código, fique a vontade para pedir (processamento de sinais e/ou imagens, inteligência computacional, automação e controle, etc....).
Enfim, eu acho que com as sugestões dos leitores, que devem ser os mais interessados no blog, o tutorial ficará muito bom.
sexta-feira, 2 de janeiro de 2009
Começando 2009
Eu criei 2 novos blogs ontem para começar o ano bem.
São eles este e esse. Vou tentar fazer versões independentes e não apenas um ser a versão em inglês do outro.
Não irei parar com o MultiSign, ao contrário pois depois da enquete descobri os principais interesses dos meus leitores:
- Scilab;
- Linux e SL;
- Matemática;
- Curiosidades.
Então, atendendo aos pedidos irei começar uma série de posts como um tutorial sobre o Scilab.
Enfim, espero este ano ter mais sucessos, paz e bênçãos que no ano passado e desejo o mesmo a todos.