Mostrando postagens com marcador tutorial. Mostrar todas as postagens
Mostrando postagens com marcador tutorial. Mostrar todas as postagens

segunda-feira, 20 de março de 2023

Conhecendo a COS.TV

 A COS.TV é um concorrente do YouTube. Consiste em um conjunto de vídeos postados pelos usuários, nos quais os visualizadores podem dar o seu "gostei" e fazer seus comentários. Seu sistema tem diversas recompensas e eu não consegui colocar em ordem lógica. Então minha sugestão é ler o artigo completo e depois voltar para ler novamente alguma parte que não entendeu completamente. Possivelmente alguma questão foi respondida em outra parte do artigo.

A COS.TV ainda não é muito conhecida e o conteúdo ainda não é muito diversificado. Mas com o tempo isso tende a melhorar. Diferente do YouTube, nessa plataforma qualquer pessoa pode ganhar algum dinheiro, mesmo sem postar vídeos. Mas, quem posta vídeos pode ganhar bem mais, é claro.

Para se tornar usuário e poder usufruir dos serviços oferecidos, é necessário preencher o cadastro no site. Caso queira, pode clicar aqui para fazer o seu cadastro. Esse cadastro é feito em duas partes, a primeira no COS.TV e a segunda na MainNet (dentro do próprio site do COS.TV). No cadastro do COS.TV sugiro que você coloque o email e senha. Depois do cadastro inicial, pode acessar a parte do perfil e acrescentar outros dados, como número do seu celular, ou uma foto sua. Vai ser preciso confirmar o cadastro clicando em um link enviado para o seu email (para confirmar que o email é seu). Uma vez criando o login (e-mail) e senha para entrar na COS.TV vai ser solicitado a criação de conta na MainNet (caso não tenha um ainda). Sugiro não utilizar o link criado pelo sistema e procurar o local onde você coloca o seu próprio nome como usuário do MainNet para criar sua conta interna com seu nome. A conta no MainNet será a conta pela qual vai fazer saques futuros de seus ganhos na COS.TV.

Uma vez criadas as contas, pode começar a usufruir dos serviços oferecidos. Cada dia que fizer login pode receber de 50 a 300 POPs na sua conta COS.TV. Se fizer login em dias consecutivos o valor vai aumentando seguindo uma tabela de quantos dias consecutivos você acessou o sistema. A tabela tem 7 dias e vai fazendo rodízio dos dias a partir do primeiro dia consecutivo de login.

Imediatamente após o primeiro login do dia, e a coleta dos POPs iniciais pelo login, o usuário poderá abrir um baú gratuitamente e ganhar o prêmio que estiver no baú. Pode ser POPs ou ETH.

O POP é uma espécie de moeda utilizada exclusivamente na COS.TV. Não tem nenhum valor comercial. Até onde descobri, o usuário recebe POPs pelo primeiro login do dia (que começa às 21 h horário de Brasília) e pela abertura gratuita de um baú por dia, e pelos primeiros 25 minutos de vídeos assistidos no dia (20 POPs por minuto assistido. As frações são descartadas.). A única maneira de gastar os POPs adquiridos é rodando a roleta (Caça ao Tesouro POP). Tem dois preços da roleta: 100 POPs por uma rodada da roleta, ou 480 POPs por cinco rodadas (simultâneas) da roleta. Pode receber pela rodada da roleta: 1) outros POPs; 2) Alguns COS. Acho que tem outros prêmios também, mas são muito difíceis de conseguir.

Os COS são uma moeda virtual, que uma vez conseguindo tirar da plataforma da COS.TV pode ser convertida em outra moeda (Até em R$). Como falamos no início, ela tem a sua própria conta e a conta da MainNet. A COS.TV utiliza uma conta interna. Para trocar os COS para R$, tem que enviar os COS para a conta da MainNet. Isso é feito 500 COS de cada vez. Então tem que ficar acessando o site e adquirindo os POPs (login, baú e 25 minutos de vídeo) diariamente, para então rodar a roleta e acumular COS até chegar nos 500 para enviar à conta na MainNet.

Quando tiver COS na MainNet pode trocar por VEST ou pode transferir para uma corretora (Tipo Binance) para trocar os COS por outra moeda (incluindo BRL$).

Quando você assistir um vídeo e der um "gostei", o valor enviado para o dono do vídeo vai depender de quantos VEST você tem na carteira da MainNet. Quanto mais VEST na carteira, maior o valor pago pelo "gostei". Também você recebe de volta (em VEST) 10% do valor do seu "gostei" a cada vez que você "gostar" de um vídeo. Portanto, você é pago para dar "gostei".

Os comentários também podem receber "gostei" e acumulam VEST da mesma forma que os "gostei" de um vídeo. Portanto se você postar um comentário relevante, pode receber "gostei" de outros usuários e somar VEST que podem ser trocados por COS que pode ser exportado para uma corretora (Exchange) e ser trocados para BRL$.

Uma observação é que o objeto que vai receber o "gostei" tem que ter sido postado há menos de 7 dias. Após os sete dias não é mais possível dar o seu "gostei". Então a cada sete dias tem que colocar um novo comentário ou vídeo para mantê-lo ativo.

Existem algumas limitações quanto à quantidade de "gostei" que pode dar em um período de 24 horas, bem como a quantidade de postagens (vídeos ou comentários) a cada 24 horas. Mas, para a maioria dos usuários esses limites provavelmente não irão limitar muito as suas atividades na plataforma.

Existem muitos vídeos na própria plataforma da COS.TV explicando melhor o funcionamento e os limites impostos pelo sistema. Não espero ficar rico com a COS.TV, mas como dizem, qualquer grana que conseguir a mais, é bem vindo.

quarta-feira, 26 de janeiro de 2022

Você investe em TRON?

Todo mundo sabe que a Internet é dinâmica. Sites aparecem e desaparecem constantemente. Os melhores sites duram mais tempo. E todo mundo sabe que não se pode confiar em tudo que se vê ou se lê na Internet. Na Internet é cada um por si. Ou salve-se quem puder. Cada um tem que chegar a sua própria conclusão.

Pois bem, eu encontrei um site que promete muita coisa. Vai entregar o que promete? Só o tempo dirá. O site em questão é o TRON.AC. O site alega ser um site de mineração de criptomoeda TRON (TRX) e que paga juros diários sobre o valor depositado. Até aí tudo bem. Têm muitos outros site que também prometem isso.

Vamos aos pormenores...

1. Quando você se cadastra, ganha uma conta com muitos TRONs (acho que agora são cerca de 600 TRONs na hora do cadastro). Mas são TRONs que você não pode sacar. Dizem que esses TRONs em sua conta são a garantia dos juros diários que você recebe.

2. Diariamente você visita o site e clica para  RECEBER nessa conta mais 6% sobre o saldo anterior. Valor que com os juros sobre juros, em pouco tempo cresce muito. Mas lembre-se, nenhuma parte desse valor pode ser sacado.

3. Para receber os juros diários você tem que depositar algum valor. O valor depositado nunca pode ser sacado. O que pode sacar são os juros sobre o valor depositado. Quando eu me inscrevi em novembro de 2021 o depósito mínimo era de 5 TRON e os juros eram de 2,5% sobre o valor depositado. Depois,  sem aviso prévio, no dia 27 de dezembro, o valor dos juros caiu para 2% ao dia. Hoje o depósito mínimo é de 10 TRON.

4. Como o percentual dos juros é alto, você consegue recuperar o valor do seu investimento após 50 dias. Em mais 50 dias você dobra o seu valor inicial. Se ficar reinvestindo os juros recebidos, em poucos meses terá um patrimônio muito maior.

5. Uma das restrições é nunca poder sacar o capital investido, apenas pode sacar os juros. Outra restrição é que você tem que sacar os juros diariamente para uma conta externa. Se esquecer de sacar algum dia, é como se aquele dia não existisse. No dia seguinte só tem o valor normal. Não acumula. Se não sacar, perdeu o dia.

Resumindo, você tem uma conta básica da qual você saca os juros diários sobre o valor depositado. E tem a conta de mineração com 6% diários dos quais você não consegue sacar absolutamente nada. Esses valores em pouco tempo ficam com milhares de TRON sem poder sacar. Na minha opinião é mais uma espécie de enfeite, já que os valores só crescem e não podem ser sacados. Eles, porém, dizem que são os juros sobre esses valores astronômicos que garantem os seus juros de 2% ao dia.

Tarefas diárias a serem realizadas, de preferência no mesmo horário todo dia:

1. Receber os 6% da mineração para sua conta de mineração. Esse valor fica lá para você pensar que tem alguma coisa.

2. Sacar para uma conta externa de TRON 2% sobre o valor que você depositou. O valor na carteira externa será o que você vai ter quando a chave do site for desligada.

Em novembro de 2021 quando eu fui apresentado a esse site eu resolvi arriscar pouco. Fiz um depósito de 40 TRON (algo próximo de US$ 4, à época). E como os juros eram de 2,5% eu consegui sacar 1 TRON diário e já recuperei o valor investido. Hoje continuo sacando e reinvestindo parte dos lucros. 

Meu pensamento é o seguinte: se eu reinvestir todo o lucro e o site for desligado, perco todo o lucro. Então eu não reinvisto todo o lucro. Reinvisto apenas uma parte. Logo meus ganhos são menores, porem tenho certeza de que se um dia a chave for desligada ainda terei algum lucro em outra conta. Faz parte de minha estratégia de diversificação. Não deixo tudo na mesma carteira, mesmo sendo pouco. Dificilmente todas as carteiras irão falhar ao mesmo tempo. Só em uma calamidade geral.

Se tiver tempo para examinar o site, e entende bem o Inglês tem outros investimentos no site onde você coloca alguns TRONs e depois de 30 dias você saca o capital investido junto com os juros do período (desde que não tenham desligado a chave nesse período). Esse investimento eu não testei, pois o valor mínimo de depósito é muito alto para quem não conhece bem o site.

Lembrando que esse texto não é indicação de compra, nem de venda e muito menos de investimento. Cada investidor tem que fazer sua própria avaliação de risco e tomar suas próprias decisões. Pessoalmente eu arrisquei um pouco e já recuperei o valor investido e estou administrando os meus lucros. Não garanto que você terá os mesmos resultados.

domingo, 20 de janeiro de 2019

Quero criar minha página na Internet. Como eu faço?

Introdução: Quem sou eu....

Muita gente gostaria de criar a sua própria página na Internet e não sabe por onde começar. Vou dar algumas dicas do que é necessário fazer para ter sua página na Internet, mas primeiro vou falar de mim. Por que eu posso orientar alguém?

Sou aposentado, Doutor (D.Sc.) em Engenharia Elétrica, pela UFCG. Criei minha primeira página web lá por 1996 ou 1997 quando pouca gente sabia que existia uma rede de computadores, e muito menos sabiam para que servia. Pois bem, naquela época não existiam editores web potentes como nos dias de hoje. Eu, como autodidata, lia o manual e editava o arquivo, via rede, em uma maquina Unix (antes do Linux aparecer), com um editor de arquivo chamado de VI (Visual Interface, ou coisa parecida). Era uma página simples, mas funcional.

De lá para cá tenho criado e editado muitas páginas pessoais, mas quase todas usando o mesmo método que utilizei para construir a primeira. Não costumo utilizar programas prontos de formatação de páginas web.

Para que criar uma página web?

Acredito que a primeira pergunta a ser respondida é a finalidade da sua página web. Podemos pensar em diversos motivos, entre eles:
  1. Ter uma página com sua biografia, com sua história, suas memórias...
  2. Ter um blog para postar observações importantes com frequência (diário, semanal, mensal, etc.);
  3. Fazer uma lista de links para artigos e vídeos importantes, para divulgar para amigos;
  4. Criar uma loja virtual para venda de objetos (físicos ou digitais) ou serviços;
  5. Explorar a sua criatividade;
  6. Postar fotos e vídeos para mostrar aos amigos;
  7. etc. etc. e tal.
Para cada finalidade, posso sugerir um tipo de página diferente. Então, vamos lá:

Para ter uma página sem fins lucrativas para colocar suas observações, suas memórias ou seus comentários, e até explorar a sua criatividade, o mais simples seria criar um blog e para cada história ou memória, cria uma sub-página no blog. O programa de gerenciamento do blog facilita criar as sub-páginas e cataloga tudo. O editor de páginas embutido também ajuda muito. Existem diversos sites de blog gratuitos que servem bem para este propósito. Basta procurar no seu buscador...

Dependendo da frequência de postagens, da abrangência de leitores, do número de inscritos, etc. pode inclusive colocar propagandas no site e ter alguma renda. Mas se tem poucas visitas diárias, não vale a pena o trabalho para organizar tudo.

Já pensando em uma utilização com uma determinada identidade visual (logomarca, empresa, etc.) pode ser interessante registrar seu próprio domínio. Neste caso, temos algumas observações: os custos são diversos. Podemos enumerar alguns dos custos:
  1. Criação das páginas (artes, textos, layout, menus, etc.). Este custo custo pode ser bastante alto, dependendo do caso. Se for página simples e com pouca necessidade de atualização você pode fazer sozinho ou com ajuda de um amigo que entenda de design e visual. Caso contrário, contrate alguém para criar as páginas. Veja se o contrato vai ser de criação apenas ou se vai ter cláusula de manutenção também (item 5).
  2. Hospedagem das páginas. Os arquivos precisam ser armazenados em algum servidor web, para poderem ser visualizados pelos internautas. Este custo pode ser gratuito, ou pago dependendo principalmente na quantidade de tráfego e de downloads diários. Quanto mais dados fluindo na rede (bandwidth), mais caro tende a ficar. EX. Se o site contém links para vídeos armazenados em outro site (YouTube, por exemplo) então o download é pouco. Já se são os próprios vídeos armazenados e baixados de seu site, fica pesado e caro. 
  3. Custo do domínio. Se o domínio é registrado no exterior as exigências são mínimas e o custo fica em torno dos USD$ 15 anuais, dependendo da extensão (.com, .net, .org, são os mais comuns). Já se for registrado no Brasil (.com.br, .net.br, .org.br) é exigido contrato social da empresa (burocracia), além do custo anual pago ao registro.br
  4. Se o site vai ter qualquer envio por parte dos internautas (login, senha, envio de quaisquer dados pessoais) é importante também ter um certificado próprio de encriptação (certificado https). Esse custo às vezes é absorvido pelo provedor de hospedagem ou de domínio. Mas se tiver de pagar também fica na faixa de uns USD$ 15 a 20 anual. Hoje, a orientação para evitar interceptação de tráfego é de que todas as páginas sejam https e não apenas http, ou seja, páginas seguras, com encriptação ponta a ponta. O custo adicional é muito pequeno comparado com a privacidade e segurança obtida.
  5. Custo de manutenção das páginas. Se é uma loja virtual, vai sempre ter a atualização de preços e produtos. Se as páginas de alguma forma se desatualizam, precisam ser atualizados. Este custo pode ser baixo ou alto, dependendo do tipo de site e de seu tamanho.
Se você nunca criou uma página, mas agora quer criar a sua, minha sugestão é começar com hospedagem grátis (quem sabe em um servidor de blog) até você se familiarizar com todas as etapas. Posteriormente pode pensar em um domínio próprio com custos maiores, se for necessário. Procure sempre colocar informações verídicas e úteis. Caso contrário vai ficar desacreditado na web. Para criar uma boa reputação demora. Para acabar com a reputação é rápido, e dificilmente se recupera. Pense nisso.


quinta-feira, 5 de maio de 2016

Redirecionamentos Revisitado


Em 2007 escrevi sobre redirecionamentos na Internet. De lá para cá, algumas coisas mudaram. Alguns serviços passaram a ser pagos (caso do DYNDNS). Outros servidores apareceram, com outras propostas.

Com a passagen do DYNDNS para serviço pago, passei a utilizar o No-IP para fazer meu redirecionamento dinâmico.


Nestes últimos dias me deparei com outra necessidade de redirecionamento. Eu tinha um endereço de uma loja virtual junto a uma determinada empresa. Esta empresa passou por uma reforma geral do site e acabou modificando o endereço de todas as lojas virtuais. Isso invalidou todos os meus cartões de visita que tinham o endereço da loja virtual. Se eu tivesse impresso os cartões com um endereço próprio de redirecionamento, eu poderia ter apenas alterado o endereço destino do meu redirecionador, sem invalidar meus cartões de visita. Criei uma conta grátis no Tiny e agora posso acrescentar diversos links de redirecionamento e se houver uma mudança futura do endereço final, basta editar os redirecionadores.

Alguns sites de gerador de código QR também oferecem o serviço de redirecionamento, inclusive oferecendo um link curto para colocar no QR que depois redireciona para o link de seu site normal. Assim você pode imprimir brochuras sem ao menos saber o endereço final do site. Imprime com o código QR apontando para um link de redirecionamento. Quando finalizar o site, então configura-se o endereço destino do redirecionador.

quinta-feira, 20 de novembro de 2014

Computação Gráfica à Moda Antiga

A computação gráfica à moda antiga era feita calculando cada quadro do vídeo. Os computadores eram lentos e era necessário calcular cada quadro, salvar a imagem e depois editar a fita, substituindo os quadros um por um.

Para fazer uma animação eram necessários vários passos. O primeiro passo era criar os objetos a serem visualizados. Em se tratando de computação gráfica, os objetos são apenas dados em uma base de dados. Nesse passo eram definidas as cores e textura dos objetos.

No segundo passo era necessário definir as fontes de luz (base de dados) e suas cores.

No terceiro passo era necessário definir o movimento entre os elementos (objetos e luzes). Era traçado o caminho que cada objeto deveria percorrer durante o tempo da animação.

No quarto passo era calculada (renderizado) a imagem vista pela câmera virtual. Este calculo levava em consideração as fontes de luz (virtuais), a posição de cada objeto no espaço, a posição e o foco da câmera virtual.

Após o cálculo de cada quadro, as imagens eram transferidas para uma placa de vídeo, uma por uma e editadas em uma fita de vídeo. Após a edição na fita o vídeo ficava completo na fita. Para ver a animação bastava passar a fita de vídeo.

terça-feira, 22 de março de 2011

Área Abaixo da Curva

Na minha postagem sobre Curvas ROC mencionei que uma medida bastante comum para comparação entre diversas técnicas é a área abaixo da curva (Area Under the Curve - AUC). A situação de cara ou coroa dá uma área abaixo da curva de 0,5. Qualquer outra técnica deve aumentar este número até chegar ao ideal que seria 1,0. Quanto mais alto o número, melhor a técnica de identificação.

 Existem diversas maneiras de fazer o cálculo da área abaixo da curva (AUC), cada uma com seu próprio grau de erro, ou suas próprias aproximações. Uma maneira bastante simples é fazer o somatório das áreas dos retângulos, onde a área individual dos retângulos é calculada multiplicando a largura vezes a média da altura (altura da esquerda somada à altura da direita, dividido por 2). Veja a figura abaixo. Quanto mais estreitos forem os retângulos, quanto mais o resultado final se aproximará do valor real.

quinta-feira, 24 de fevereiro de 2011

Fichas de membros em MySQL

Já foi falado sobre Banco de Dados MySQL e Campos Interessantes em um banco MySQL. Agora será mostrado com criar uma ficha genérica para cadastro de membros. No caso em particular como já foi mencionado em postagens anteriores é interessante iniciar a ficha com um ID, no caso específico, um user_id como "bigint", "auto increment". Assim, pode se indexar tudo com esse ID e usar em comandos de REPLACE, para atualizar qualquer ficha do banco de dados.

Outros campos óbvios, para acesso a um site restrito, são os de login e senha. Além destes, poderá ter o nome completo (full_name), a data do aniversário do usuário, e seu respectivo nível (user_level).

Dependendo da situação poderá ter campos para datas importantes, tais como, criação da conta, expiração da conta e último login. Se o site for multilíngue, poderá ser necessário um campo para a língua preferida do usuário.

Poderá ter campo para status do usuário, ou atividade do usuário, conforme o caso. Pode ser útil ter campos para RG, expedidor, data de expedição, CPF, filiação, tipo sanguíneo, naturalidade, nacionalidade, título de eleitor, etc. E por fim poderá ser acrescentado um campo para comentários sobre o usuário.

Existem outros campos que são importantes, mas talvez não para a ficha do usuário. Por exemplo, é importante ter o email do usuário. Mas se colocar uma tabela adicional com os seguintes campos: email_ID, user_ID, user_email, email_status, então cada usuário poderá ter inúmeros emails cadastrados no site. O user_ID é o ID do usuário na tabela de membros. O administrador poderá saber pelo status se o email foi confirmado (clique no link no email, caso receba o email) ou não. Poderá até acrescentar um campo para indicar o email primário, ou a ordem de preferência dos emails, conforme o caso.

O número telefônico também é bastante interessante o administrador poder lançar mão, mas segue o mesmo raciocínio da tabela de email, uma tabela em separado, só para fones, contendo: fone_ID, user_ID, fone, fone_tipo (cel, fixo, etc.). Assim poderão ser cadastrados quantos fones quiser para cada usuário.

O endereço segue a mesma lógica. Inclui-se o endereço_ID, o user_ID, endereço, e o tipo (residencial, comercial, caixa postal, contato, etc.). No caso o endereço pode ser dividido em vários campos: end_1, end_2, numero, CEP, cidade, UF, país, obs., status, etc. Então cada cliente pode ter vários endereços cadastrados.

Para incluir outras informações, pode ser interessante criar uma tabela para cada coisa. Assim os usuários não ficam limitados a ter apenas um de cada coisa.

Caso seja previsto que haverá muita mudança nos dados em uma determinada tabela, poderá ser acrescentado um campo de "em uso". Assim, para deletar uma ficha, basta zerar o campo de "em uso". Na próxima vez que for escrever um novo dado, procura-se pela ficha com o campo zerado. Assim não ficam "buracos" no banco de dados, e não se esgotam os IDs tão rapidamente.

segunda-feira, 7 de fevereiro de 2011

Curvas ROC

Curvas ROC foram criadas na segunda guerra mundial para interpretar dados do radar e identificar aviões inimigos. A curva ROC é bastante útil para comparar resultados.

A curva ROC (Receiver Operating Characteristic) é utilizada para mostrar o grau de acerto ou de erro. Suponha que se tenha um paciente e quer saber se ele tem determinada doença. Aplica-se um teste e verifica o resultado. A interpretação resulta em 4 grupos:
1) Doentes classificados como doentes.
2) Doentes classificados como sãos.
3) Sãos classificados como sãos.
4) Sãos classificados como doentes.

Ou escrito de outra forma:
1) Correta aceitação.
2) Falsa rejeição.
3) Correta rejeição.
4) Falsa aceitação.

Obviamente os grupos 2 e 4 devem ser minimizados.


A curva ROC plota os dados de 0,0 a 1,1 da seguinte forma:
O eixo X é da falsa aceitação, e o eixo Y da correta aceitação. Portanto o ideal é uma reta de 0,0 para 0,1 e outra reta de 0,1 para 1,1. Veja a figura 1.

Se utilizar uma moeda (cara ou coroa) para determinar se está doente, iriamos obter uma reta de 0,0 para 1,1, cortando o quadrado no meio, diagonalmente, como na figura 2. Qualquer outra técnica utilizada deverá levantar a curva para o canto superior esquerdo. Quanto mais no canto, melhor a técnica. A figura 3 mostra uma curva ROC típica.



Também é comum usar a área abaixo da curva como medida de comparação entre diversas técnicas. A situação de cara ou coroa dá uma área abaixo da curva de 0,5. Qualquer outra técnica deve aumentar este número até chegar ao ideal que seria 1,0. Quanto mais alto o número, melhor a técnica de identificação.

Para um método de cálculo da área abaixo da curva veja este tutorial: Área Abaixo da Curva.

quinta-feira, 16 de dezembro de 2010

Apresentação de Slides em duas telas

Muitas pessoas fazem apresentações utilizando um laptop/notebook e um datashow. Mas me parece que poucas pessoas conhecem os truques para facilitar a apresentação utilizando as duas telas.

Descobri por acaso que é muito útil utilizar as duas telas com informações diferentes em cada tela. Usando as versões mais novas do PowerPoint é muito fácil fazer a configuração. Basicamente são três passos:

1) Ajustar as configurações de vídeo do computador para que o datashow seja uma extensão de vídeo. Procure as configurações de vídeo e ajuste para utilização de duas telas onde uma é a extensão da outra. Coloque a tela do notebook como sendo a tela principal (tela 1), e ajuste para a resolução usual. Coloque o datashow para a tela secundária (tela 2) e ajuste para uma resolução de 800 por 600.

2) Abra sua apresentação no PowerPoint e procure nas abas de cima pela aba de Apresentação de Slides. Veja no lado direito e configure: a) Resolução 800 X 600 b) Mostrar Apresentação em: Monitor 2 c) Clique em Usar Modo de Exibição do Apresentador.

3) No lado esquerdo, escolha fazer apresentação a partir do primeiro slide. Veja que no datashow aparece a apresentação normal, e no laptop aparece uma tela com uma miniatura da apresentação, um temporizador (mostrando quanto tempo já utilizou na apresentação), uma mostra pequena dos slides adjacentes, e o campo de anotações (lembretes importantes para o apresentador). Edite seus slides colocando lembretes no campo de anotações para lhe auxiliar na apresentação.

Lembre de ficar olhando para a plateia enquanto faz sua apresentação. Tenha a tela do laptop virado para você, e assim o público não vê suas anotações.

Boa apresentação.

quarta-feira, 3 de novembro de 2010

Programando no MatLab

Programando no MatLab


Sou programador de C já faz um bom tempo (desde 1986). Recentemente fui apresentado ao MatLab de maneira meio por necessidade, e fiquei apavorado com a quantidade de arquivos pequenos que podem ser gerados, pois cada função tem que ter seu próprio arquivo ".m"

Se divido o meu fluxo de programa em sub-rotinas ou funções,  cada uma tem que ter seu próprio arquivo. Então a solução para manter o número de arquivos sob controle é colocar muitas coisas em uma única função. Para fazer isto de maneira ordenada no MatLab, que é uma linguagem interpretada, deve ser utilizado o comando "switch" com vários "case"s.

O MatLab permite passar um número variável de variáveis para uma rotina ou função. Então é viável utilizar algo desta maneira:

function [s1 s2] = faz_tudo(o_que, p1, p2, p3)
  switch o_que
    case 'plota'
        % p1 contém os dados a plotar, plot1 é a TAG do elemento onde deve ser plotado o gráfico.
         plot(handles.plot1, p1);
    case 'liste'
       % p1 contém a lista a ser mostrada
        % p2 é o "handle" que aponta para a matriz de elementos.
        set(p2.lista1, 'String', p1);
  end % fim do case
end  % fim da função.

Desta forma, cada pedacinho que seria uma função separada, fica dentro de um case. Basta chamar a função faz_tudo passando os parâmetros necessários para aquele "case".  Usa-se as primeiras variáveis (p1, p2, p3) e passa apenas a quantidade que precisar para cada caso ("case"). Desta forma só precisa de uma função faz_tudo, e cada "rotina" fica dentro do seu próprio "case", eliminando uma série de arquivos pequenos.

É claro que se a rotina crescer muito, poderá merecer o seu próprio arquivo, e não ser apenas um case no faz_tudo.

Utilizando a sugestão proposta acima, poderá ser criado uma espécie de biblioteca de funções úteis, tudo em um único arquivo. Cada função seria um case da função "biblioteca". Assim não será necessário re-escrever tudo (ou copiar diversos arquivos) para cada novo projeto. Basta copiar o arquivo "biblioteca" e já estará meio caminho andado para a conclusão de seu novo projeto.

Utilizando a interface gráfica do MatLab

MatLab GUI(de)


O uso básico da interface gráfica do MatLat (Matrix Lab) é relativamente simples de programar. Existem poucos campos que precisam ser configurados para integrar a interface gráfica aos seus programas.

A parte mais complicada é feita fora do ambiente MatLab. Inclusive deve ser feito preferencialmente fora do computador. Esta parte é o rascunho utilizando lápis e papel para definir o que vai aparecer em sua tela. Quais as plotagens que serão feitas, e onde vão aparecer? Quais os controles, quais os tipos de caixas interativas serão utilizadas e onde vão aparecer?

A interface gráfica do MatLab oferece diversos recursos para entrada de dados: Botão, Lista, Controle deslizante, caixa de entrada de texto, etc. Também oferece diversos tipos de saída como plotagem 2D, Saída de texto e painel.

Uma vez definindo o que vai aparecer na sua tela, e onde, então deve se partir para a implementação da interface utilizando o GUI(de). Pode ser chamado digitando GUI na linha do MatLab, ou escolhendo File->New->GUI no menu. Uma vez inicializado o editor gráfico, comece escolhendo no menu os botões, controles, e área de plotagem desejado. Ajuste o tamanho de cada elemento.

Existem basicamente dois elementos que necessitam ser definidos, para integrar com os seus programas: as propriedades e os callbacks.

No editor de propriedade você tem acesso a muitos elementos relativos a cada objeto. (Para acessar o editor de propriedades, clique no botão da direita, enquanto o mouse estiver sobre o elemento, e escolha "Property Inspector". Não fique assustado com a quantidade de propriedades, pois a maioria pode deixar como estar. A minha sugestão é alterar o mínimo possível, ou seja, uns 2 ou 3 elementos.

Veja que as diversas propriedades estão listadas em ordem alfabética. Procure o item chamado "Tag". Este é o nome que será chamado dentro do seu programa para interagir com este elemento (mais a este respeito será discutido abaixo). Sugiro que mude o TAG para alguma coisa fácil de lembrar a que se refere. Pode mudar o nome do primeiro plot para plot1 por exemplo. Uma outra propriedade que pode querer alterar é chamado de "String". Se for uma caixa de texto, este será o texto mostrado (até sera alterado) na caixa. Pode ser mudado para instruir o usuário do programa, ou pode ser deixado em branco. Se o elemento for texto, poderá alterar também o tamanho das letras, alterando o FontSize (inicialmente é definido como sendo 8).

Depois de definir as propriedades de cada elemento, é necessário definir a interação com o programa. Isso é feito usando "callback". Os callbacks são pequenas rotinas que são executadas quando acontece algum evento (clique do mouse, digitação de texto, etc). Cada elemento de sua interface gráfica tem os seus próprios callbacks. Deve ter um callback para a criação do elemento, outro quando deletar o elemento, e outro quando houver alguma intervenção do usuário (via teclado ou mouse). Estas funções devem conter o que fazer quando o usuário interage com o programa. Exemplo: quando o usuário altera alguma entrada, o gráfico deve ser plotado novamente. Se um valor for alterado, a variável deve ser atualizada.


A atualização de algum elemento é feito utilizando o comando "set".
set(handles.texto1,'String','Testando minha interface');
set(handles.temperatura1,'Value','25');
No primeiro "set" temos a "TAG" chamado de texto1, com o tipo String, cujo valor é "Testando minha interface". Veja que a variável "handles" é na realidade uma matriz com vários elementos e no exemplo só alteramos o elemento "texto1" que é a TAG de acesso ao elemento. No segundo "set" não temos uma "string" e sim um Value, onde será atribuido o valor de 25. A TAG que identifica o elemento neste caso é temperatura1. Cada elemento tem uma TAG que deve ser única no seu projeto. Esta TAG será usada para atualizar o elemento.

No caso de um botão, podemos obter o valor do botão utilizando o comando get.
a = get(handles.plot_type,'Value');
A variável "a" vai conter o valor da elemento cuja TAG é "plot_type".
Para ler um texto de um quadro de texto, cuja TAG é texto1, usamos:
str = get(handles.texto1, 'String');
A variável "str" conterá o texto associado.

segunda-feira, 4 de outubro de 2010

Campos interessantes em um banco de dados MySQL

Campos Interessantes



Como mencionei em um post anterior eu gosto de colocar um id como primeiro campo em qualquer banco de dados. Isto facilita a indexação e a atualização (usando comando REPLACE) de cada ficha no banco de dados.

Outro campo que eu gosto de acrescentar, sempre que crio um banco de dados de pessoas (membros) é um campo de "nível" (level). Normalmente eu coloco com um inteiro, e uso como um conjunto de bits (8 ou 16), onde cada bit pode dar acesso a alguma coisa.

Normalmente crio uma área do site que todas as pessoas possam ter acesso. Uma área anônima, por assim dizer. Depois eu crio outra área que apenas as pessoas identificadas (pelo login) tem acesso. Outras áreas são restritas a gerentes e/ou pagantes, ou ao dono.

Cada área tem um bit associado no campo de nível. Se o bit estiver setado, o membro tem acesso. Se o bit estiver resetado, o membro não tem acesso. Acesso negado.

É claro que depende do caso, mas muitas vezes o acréscimo deste campo elimina a necessidade de ter outras tabelas apenas para administradores. No caso, o administrador é cadastrado normalmente, apenas com os bits de nível setados, para dar acesso a mais áreas do site.

sábado, 2 de outubro de 2010

Utilizando PHP para consultar um banco MySQL


Utilizando PHP para consultar um banco MySQL


Primeiramente uma advertência em relação aos dados de acesso ao banco de dados. Para acessar o banco de dados é necessário informar o nome do computador, do usuário, e sua senha. Minha sugestão em questão de segurança é não colocar estas informações diretamente nos programas PHP. Imagine o que acontece se o servidor web for ativado sem o interpretador PHP? Suas informações de nome e senha para acesso ao banco de dados serão vistos por todos que tentarem acessar suas páginas.

Uma forma bem mais segura é definir variáveis e coloca-las em um arquivo que fica fora da árvore do servidor web. Esse arquivo deve ser incluído (include("arquivo");) pelo PHP. Se o PHP não estiver funcionando, aparecerá nas páginas web apenas o nome das variáveis, mas não o seu conteúdo, preservando assim sua senha e seu login.

Os comandos mais comuns do PHP para acessar um banco de dados MySQL são os seguintes:

  1. $link = mysql_connect ($host_name, $user, $password) or die ("Erro ao conectar ao banco de dados.\n");
  2. mysql_select_db($banco_de_dados, $link) or die ("Erro ao selecionar banco de dados.\n");
  3. $result = mysql_query ("CREATE TABLE IF NOT EXISTS `$tabela` ('id'  bigint(20) unsigned NOT NULL auto_increment, 'login' varchar(20) default NULL, 'nome' varchar(40) default NULL, 'senha'  varchar(20) default NULL, "PRIMARY KEY  (`id`) ) ");
  4. $result = mysql_query ("SELECT * FROM $tabela WHERE id = '$id' ");
  5. $quantidade = mysql_num_rows($result);
  6. $ficha = mysql_fetch_array ($result);
  7. $result = mysql_query ("INSERT INTO $tabela VALUES ('$id', '$login', '$nome', '$senha') ", $link);
  8. $result = mysql_query ("REPLACE INTO $tabela VALUES ('$id', '$login', '$nome', '$senha') ", $link);

O primeiro comando faz a conexão com o servidor MySQL.
O segundo comando seleciona o banco de dados no servidor.
O terceiro comando é utilizado caso queira criar uma tabela no banco de dados.
O quarto comando seleciona dados do banco de dados onde o id da ficha é igual à variável $id.
O quinto comando seta a variável $quantidade igual ao número de fichas encontrado na busca
O sexto comando coloca na variável $ficha (como array de dados) todos os campos lidos da ficha de dados.
O sétimo comando cria uma nova ficha de dados no banco de dados previamente selecionado.
O oitavo comando substitui uma ficha de dados existente no banco de dados previamente selecionado.

Base de Dados MySQL


Base de Dados MySQL



Em algumas ocasiões é interessante fazer consulta a uma base de dados para prover algum conteúdo dinâmico, atualizado. Isso é muito fácil utilizando páginas em PHP.

Uma base de dados em MySQL é composto por tabelas, contendo fichas que contém diversos campos. Repetindo: cada tabela contém um grupo de fichas. Cada ficha é composto por diversos campos. A base de dados mais simples poderá ter apenas uma tabela.

Um exemplo típico de uma tabela é a que contém fichas de cadastro. Os campos na ficha poderão ser, por exemplo: id, login, senha, nome completo, rua, número, complemento, bairro, cep, cidade, estado, país, telefone, celular, nacionalidade, naturalidade, cpf, rg, sexo, conjuge, data de nascimento, etc. etc. conforme a aplicação.

Como pode ser observado, os diversos campos podem ser compostos por tipos de informação diferentes. Os tipos mais comuns são: int (usado para números inteiros), float (ponto flutuante), double (ponto flutuante dupla precisão), date (datas), var char (texto).

Uma dica que eu aprendi depois de criar várias bases de dados, é que fica mais fácil encontrar e editar os dados posteriormente se o primeiro campo for um índice numérico, auto-crescente.

Agora eu normalmente coloco um "bigint", "auto increment", como o primeiro campo, e depois utilizo este valor quando eu quero editar e salvar modificações na base de dados. Anteriormente eu utilizava um campo como o nome ou login para indexar a base. Mas em algumas ocasiões é conveniente modificar o login, e nestes casos, o comando de substituir ("REPLACE") não funciona mais, e acaba criando uma nova ficha. Se usarmos um índice auto-crescente, não podem existir 2 índices iguais, e podemos utiliza-lo para fazer a substituição.

domingo, 25 de julho de 2010

Domínio

Domínio do site



Uma parte integrante de seu visual na Internet é o domínio de suas páginas. Normalmente deverá ser escolhido um domínio condizente com o produto ou serviço sendo oferecido. Cada tipo de domínio deve indicar algo a respeito do produto ou serviço.

Um domínio terminando em .br indica um site no Brasil. Um domínio com terminação .ca é do Canadá. Um site com terminação .com deveria ser um site comercial nos Estados Unidos, mas isso nem sempre é o caso. Muitas empresas brasileiras usam domínios .com para facilitar a identidade visual. Alguns registram diversos domínios e apontam para o mesmo conteúdo. Dois exemplos bem conhecidos de empresas que registram tanto o domínio .com, quanto o .com.br são Americanas e Globo.

Todos os domínios .br ou .com ou .ca tem um certo custo anual. Alguns sites de hospedagem registam nomes sugestivos e depois criam subdomínios para oferecer a outros, ou gratuitamente, ou por preços reduzidos.

No caso específico do Brasil os domínios são registrados no Registro.br Existe uma lista grande de tipos de domínios possíveis. Existem os tipos normais (com.br, org.br, gov.br, net.br edu.br, etc) e existem para profissionais liberais (como por exemplo eng.br, adm.br, vet.br, jor.br, etc). Existe até domínio específico para pessoas físicas: nom.br.

No caso específico deste meu blog (http://tutoriaisdobob.blogspot.com/) o subdomínio (tutoriaisdobob) foi escolhido para ser bem sugestivo, em relação ao conteúdo do site. No caso foi hospedado gratuitamente no Blogger da Google, com o domínio blogspot.com Quem paga o domínio blogspot.com é a própria Google.

É possível também registrar um domínio no registro.br e apontar para o conteúdo em um provedor de conteúdo gratuito. Basta apontar o DNS no registro.br para os servidores DNS do site hospedeiro das páginas. No meu caso específico, não tenho registrado nenhum domínio pago. Já registrei subdomínios em diversos sites ao longo dos anos. Inclusive tenho registrado domínios onde o conteúdo está em um provedor com IP dinâmico. Neste caso, minha identidade visual tem partes que são de empresas hospedeiras:
rrbrandt.webhop.org
Tutoriais do Bob
rrbrandt.comli.com
Pergunte ao Bob

quinta-feira, 15 de julho de 2010

PHP com formulário

Este post faz parte da série de programação em PHP.

Vamos fazer uma página de teste em PHP com uma simples contagem da quantidade de vezes que carregamos a página. Não se trata de um contador, pois se fecharmos a página e abrirmos novamente, a contagem volta ao zero. Mas é apenas para mostrar a flexibilidade dos formulários com PHP.

Crie uma página qualquer em PHP e coloque as linhas seguintes:

<html>
<head>
<title>Página de Teste</title>
</head>
<body>
<center><h2>
<?php
$conta=0;
if(isset($_REQUEST[conta])) $conta = $_REQUEST[conta];
echo("<form method=post>");
echo("<input type=submit value=soma>");
$conta++;
echo("$conta<br>);
echo("<input type=hidden name=conta value=$conta>");
echo("</form>");
?>
</h2></center>
</body>
</html>

Explicação do formulário utilizado no exemplo acima. Cria-se a página em PHP com título e corpo. O conteúdo do corpo é centralizado (utilizando o comando html <center> e </center> Depois é inicializado um trecho com programação em PHP.

O primeiro comando em PHP é o de inicializar uma variável chamada $conta, com o valor zero. Segundo comando é para recuperar o valor anterior desta mesma variável, caso tenha sido definido em carregamento anterior do formulário descrito abaixo. Para isso, é testado se existe definição da variável $_REQUEST[conta], caso positivo, seu valor é colocado na variável $conta. $_REQUEST é o nome do arranjo(array) com todas as variáveis definidas no formulário que chamou esta página.

O formulário tem um botão de submissão (submit), e um campo escondido (hidden) contendo o valor de $conta incrementado (adicionado) de um. Também ecoa o valor incrementado de $conta. Portanto na primeira vez que a página é carregada, o $conta começa em zero, e é incrementado por um antes de ser ecoado ao navegador do usuário. A cada vez que o formulário é submetido, o valor anterior é recuperado, incrementado por um e ecoado novamente. Um contador de quantas vezes o formulário foi carregado. Só não serve para contador de páginas, pois toda vez que é carregado no navegador, começa novamente no zero.

Variáveis em PHP

Este post faz parte da série de programação em PHP.

PHP é bastante flexível quanto às variáveis. Ao contrário da linguagem C, as variáveis em PHP não precisam ser definidas formalmente. Podem apenas ser inicializadas e usadas. Toda variável em PHP começa com o cifrão ($).

Veja o seguinte código:
$tmp[0] = "domingo";
$tmp[1] = "segunda";
$tmp[2] = "terça";
$tmp[3] = "quarta";
$tmp[4] = "quinta";
$tmp[5] = "sexta";
$tmp[6] = "sábado";
$tmp[7] = 2010;

Acabamos de definir um arranjo (array) de 8 elementos, onde os primeiros 7 são os dias da semana e o oitavo valor é um número;

Então podemos fazer:
$tmp1 = 3;
echo("Hoje é $tmp[$tmp1]\n");
e vamos ter na tela:
Hoje é quarta

E podemos notar que foi definido uma variável chamada $tmp1 (cujo valor é 3) e um arranjo chamado $tmp[] que contém os dias da semana e mais um número.

Esses arranjos múltiplos são utilizados bastante na consulta a bancos de dados, onde a ficha inteira pode ser transferida para um arranjo, na volta da rotina de consulta. Cada elemento no seu respectivo campo, conforme definido no banco de dados.

Veja agora um programa exemplo, para contar cada vez que envia o formulário.

PHP Funções

Este post faz parte da série de programação em PHP.

A linguagem PHP pode ser organizada em bibliotecas de funções. Para definir uma função é muito simples:

function soma($parametro1, $parametro2)
{
    $parametro3 = $parametro1 + $parametro2;
    return($parametro3);
}
$tmp1 = 4;
$tmp2 = 3;
$soma = soma($tmp1, $tmp2);

echo("$soma\n");

Isso manda um 7 para o navegador do usuário.

Veja agora o uso de variáveis na programação em PHP.

PHP Estrutura de programação

Este post faz parte da programação em PHP.

Como em C e muitas outras linguagens de programação, o PHP permite alterar o fluxo do programa fazendo comparações. Quem tem familiaridade com outra(s) linguagem(s) de programação, não deve ter dificuldade para programar em PHP.

Como comandos de fluxo podemos citar:

if( ) {
    ...
} else {
    ...
};

A comparação pode ser igualdade (==), maior que (>), menor que (<), menor ou igual (<=), maior ou igual (>=), ou diferente, não igual (!=). Podemos comparar strings, inteiros, flutuantes, quase tudo.

O PHP também tem o famoso "for" loop do C.

for($i = 0; $i < 10; $i++)
{
    ...
} e também o:
do {
    ...
} while(..);

E por último vou citar o maravilhoso switch:
switch($tmp) {
    case '1':
        echo("Caso 1\n");
        break;
    case '2':
        echo("Caso 2\n");
        break;
    default:
        echo("Outros casos\n");
        break;
}

Veja agora como utilizar funções na sua programação.

Introdução a PHP

Esta pequena introdução à linguagem PHP destina-se àqueles que já tem noções de programação, mas não conhecem o PHP, e querem aprender. Aqui dou algumas rápidas pinceladas, para que alguém possa começar a usar o PHP. Apenas lembro que o PHP tem muitas funções para diversas aplicações diferentes, e a minha sugestão é que consulte diretamente a página e documentação do PHP online, para outras funções interessantes.

PHP é uma linguagem de programação genérico, muito parecido com a linguagem C. Em ambientes Linux é possível usar diretamente na linha de comando, mas sua utilização mais frequente é integrado com o servidor web Apache.

Uma vez que o PHP esteja instalado, é muito fácil integrá-lo com as páginas web. Basta criar páginas com a extensão .php e invocar o PHP quando precisar, colocando o seguinte comando na página HTML:

<?php comandos_do_PHP ?>

Na linguagem PHP (como no HTML e em C) branco pode ser colocado em diversos lugares e não afeta o resultado. Portanto na maioria das vezes é possível fazer endentações para melhor visualização do código fonte, sem alterar as páginas geradas. Apenas em alguns casos específicos que não se pode acrescentar um espaço em branco.

Em PHP, todo comando termina com ponto-e-vírgula (;)

Um dos comandos mais usados do PHP é o echo, pois tudo que é ecoado, é enviado ao navegador cliente (se não for redirecionado).

O próprio comando echo pode ter diversos delimitadores. Por exemplo, as duas linha seguintes produzem o mesmo resultado:

echo "Primeira frase";
echo("Primeira frase");

É muito comum usar o comando echo para construir partes dinâmicas das páginas. O PHP permite variáveis dentro do echo, e arranjos de texto podem ser criados para depois serem ecoados.

Como exemplo, podemos criar uma variável (toda variável em PHP começa com $) tipo "string" e enviar isto para o navegador. As duas linhas a seguir tem o mesmo efeito de cada uma das duas acima:
$tmp = "Primeira frase";
echo("$tmp");
ou ainda
echo $tmp;

O comando sprintf (emprestado do C) também pode ser utilizado na formatação dos dados:
$tmp = sprintf("Primeira frase");
echo "$tmp";

Veja agora comandos para ajudar na estrutura de programação.