Socialize
Twitter LinkedIn
Meus sites
Sites que participo
  • PlanoBeta :: Site de humor que participo como colaborador
  • PapoGeek :: Site de notícias e tecnologia que contribuo com textos e tutoriais

    ConSys, PHP + GTk em ação!

    Como muitas pessoas, por um tempo acreditei que a linguagem PHP só servia para aplicações WEB, mas me enganei.
    Existe um projeto que deve ser considerado chamado PHP-GTk que une a linguagem de programação PHP à biblioteca GTk, o que possibilita a criação de aplicações desktop.
    Esta idéia de tentar tornar o PHP mais presente em aplicações desktop é tão séria que chega a estar presente nos planos da nova versão do PHP, o PHP 6.

    Como bom programador que sou fui correndo descobrir como que funcionava essa mistura PHP + GTk, e aproveitei a necessidade de um tio meu que é psiquiatra que precisava manter anotações dos seus pacientes como comportamento e remédios que haviam sido receitados.
    Surgiu então o ConSys Beta, um pequeno projeto pessoal que fiz para aprender como utilizar PHP + GTk.
    Aproveitei a experiência para aprender a modelar interfaces GTk com o aplicativo Glade, o que se tornou um aprendizado bastante útil.

    O projeto ConSys Beta está com seu código todo comentado para facilitar o aprendizado de quem desejar aprender um pouco de PHP + GTk.
    O projeto pode ser baixado pela URL www.frenetic.com.br/projetos/conSys/ConSys.zip e tem cerca de 18Mb comprimido em um arquivo Zip.

    Screenshots do projeto:

    Tela inicial do projeto

    tela inicial - filtro de busca

    tela inserir e editar usuario

    tela de verificação das consultas do paciente

    tela de inserção e edição de consulta

    Diário de um Programador 16: escravo da tecnologia

    Há apenas dois motivos para uma pessoa decidir entrar na área da tecnologia: Ou você é DOIDO ou você adora tecnologia.
    Alguém pode dizer: “e a questão da necessidade?”
    Acredite, necessidade nenhuma vai fazer alguém se enveredar pelo mundo tecnológico.
    No meu curso de graduação, bacharelado em Ciência da Computação, o mais comum é ser doido e adorar tecnologia, tudo ao mesmo tempo.
    Ou seja, somos pessoas com problemas. O nosso problema é que é muito fácil se deixar levar pela tecnologia, suas inovações e revoluções, e acabamos por virar escravos dela.

    E como é possível não virar escravo?

    NÃO SEI!
    A tecnologia vicia!

    É fácil ver o pessoal da computação, ou a famosa turma da TI, virar noites e mais noites acordados na frente do computador ou deixar a vida social de lado para estar mechendo em algum gadget.
    Fazemos isso por que amamos a tecnologia, e por que é o mal da profissão (ossos do ofício).

    As vezes, quando em um projeto é muito desafiador, interessante ou inovador, acabamos por misturar obrigação e prazer, trabalho e diversão.
    É difícil, então, abrir mão de estar pesquisando, programando, mechendo e futucando, para estar fazendo algo tão “banal” quanto viver!
    Somos atacados pela PEITICA!

    Mas falando sério, é difícil não ser escravizado pela tecnologia e por toda a revolução e benefícios que elas nos trazem, mesmo que ninguém perceba.
    É fácil ver nerds em suas horas livres, depois de muito estudo e trabalho, falando sobre tecnologia e todas as suas fofocas, sobre as empresas que lançam produtos, sobre gadgets e sobre revoluções feitas no core do Linux.
    Esse tipo conversa é pura escravidão tecnológica!

    Tá bom, e qual o problema nisso?

    Qual o escravo da tecnologia que não dorme de madrugada e não acorda cedo?
    Que muda seus hábitos alimentares para poder conseguir comer com uma única mão na frente do computador?

    Pode não parecer, mas estamos nos matando aos poucos…
    O pouco sono afeta a memória e o coração, a alimentação vai tudo para a barriga e faz celulite na bunda, e viver NA tecnologia destrói aos poucos a nossa habilidade de se socializar.
    De fato, conseguimos manter amizade com os outros viciados em tecnologia como nós…

    Não sei vocês, mas estou tentando me policiar, afinal passo no mínimo 14 horas diárias na frente do computador, e já ganhei 2.5 graus no meu óculos, que antes eu não usava, além de uns 17 quilinhos.
    Estou tentando conquistar a minha alforria, mas só de pensar que o CDVagabundo precisa ser atualizado já começo a me preocupar se há alguma lei Áurea para a minha tecnoescravidão…

     

    Este artigo foi escrito no site CDVagabundo e pode ser lido na URL:
    Diário de um Programador 16: escravo da tecnologia

    Transformando imagens em arte ASCII com PHP

    Para mostrar que programar não é puramente escravidão, trouxe um pequeno código para deixar o dia mais divertido.
    Venho hoje ensinar como transformar imagens em arte ASCII, utilizando a linguagem de programação PHP.

    No nosso exemplo iremos pegar esta imagem:

    E transformar em mais ou menos isso:

    Para tanto iremos precisar da linguagem PHP (como diz o título do artigo, duh!) e da biblioteca GD ativada nas configurações da linguagem, o que é bastante comum nos servidores e instalações desktop (vide xampp).

    O código que faz a conversão é o seguinte:

    <?php
    
    /*    abrimos a imagem    */
    $arquivo = imagecreatefromjpeg("epic.jpg");
    
    /*    verificamos se estamos com o stream aberto    */
    if ( $arquivo ) {
    
        /*    pegamos a largura e a altura da imagem para ser utilizado no loop de leitura    */
        $largura = imagesx( $arquivo );
        $altura = imagesy( $arquivo );
    
        /*    damos um loop de linha em linha    */
        for ( $y = 0; $y < $altura; $y = $y + 1 ) {
    
            /*    damos o loop para ir de colona em coluna    */
            for( $x = 0; $x < $largura; $x = $x + 1 ) {
    
                /*    pegamos a cor alocada na posição (x, y) da iamgem    */
                $rgb = @imagecolorat($arquivo, $x, $y);
                $cores = imagecolorsforindex($arquivo, $rgb);
    
                /*    imprimimos um * com a cor do ponto    */
                echo "<font style='color:rgb("
                    . $cores["red"] . ","
                    . $cores["green"] . ","
                    . $cores["blue"] . ")'>*</font>";
    
            }
    
            /*    chegamos ao fim do loop das colunas, então iremos imprimir a próxima linha    */
            echo "<br>";
        }
    }
    ?>
    

    Alguns podem não estar familiarizados com as funções:

    • ImageColorAt – Que le o ponto (x, y) da imagem e retorna um inteiro contento as cores R,G,B daquele pontoImageColorsForIndex – Que recebe o valor gerado por ImageColorAt e o divide em um array, o que facilita o nosso trabalho

    Como podemos melhorar o nosso código?

    Notem que o nosso loop lê a imagem ponto-a-ponto. Isso é legal pois deixa o nosso resultado bastante nítido, mas a ponto de desempenho é absolutamente pífio.
    Podemos dar uma melhorada no desempenho da nossa conversão reduzindo a quantidade de pontos retirados da imagem, mas tentando evitar a perda de nitidez.

    Ao invez de pegar ponto-a-ponto na imagem podemos pegar 1 ponto a cada 3 pontos fazendo a seguinte alteração:

    alterar a linha 17 que contém:

    for( $x = 0; $x < $largura; $x = $x + 1 ) {

    para:

    for( $x = 0; $x < $largura; $x = $x + 3 ) {

    Note que o desempenho atual foi bem maior e que a sua imagem pode ter ficado um pouco distorcida.
    Para melhorar o problema da distorção, faça a mesma alteração no loop das linhas, alterando a linha 14 que contém:

    for ( $y = 0; $y < $altura; $y = $y + 1 ) {

    para:

    for ( $y = 0; $y < $altura; $y = $y + 3 ) {

    Claro que este código pode ser melhorado mil vezes, tanto em desempenho quanto em funcionalidade.
    Ele pode ser alterado para abranger outros formatos de imagem usando funções como ImageCreateFromGif, ImageCreateFromPng, etc.

     

    Este artigo foi escrito no site PapoGeek e pode ser lido na URL:
    http://www.papogeek.com.br/2010/07/transformando-imagens-em-arte-ascii-com-php

    Algoritmo competitivo e sua complexidade computacional

    Em 2010, na Universidade Católica de Pernambuco, desenvolvi um projeto junto com um amigo sobre a complexidade computacional do algoritmo de aprendizagem competitivo, para a cadeira de inteligência artificial ministrada pelo professor Francisco Madeiro.
    O algoritmo, e sua complexidade computacional, foram inferidos do artigo Complexidade Computacional de um Algoritmo Competitivo Aplicado ao Projeto de Quantizadores Vetoriais, escrito pelo professor Madeiro em conjunto com outros mestres para a revista da Sociedade Brasileira de Redes Neurais.

    A implementação foi feita usando a linguagem de programação Python, a biblioteca Python para manipulação de imagens PIL e a biblioteca de interface gráfica padrão Tkinter.

    A aplicação recebe como dados de entrada:

    • k = A quantidade de números que irão compor cada vetor;
    • w = A quantidade de vetores de peso (W);
    • nAC = A quantidade de iterações de aprendizagem;
    • Fator de aprendizagem inicial;
    • Fator de aprendizagem final;
    • Um arquivo contendo os números que serão utilizados pelo algoritmo;

    A aplicação gera/retorna:

    • Retorna os vetores de peso inicial;
    • Retorna os vetores de peso após as iterações de aprendizagem;
    • Retorna a quantidade de operações utilizadas no processo de aprendizagem;
    • Gera um arquivo chamado VetoresDeTreino.jpg que exibe todos os vetores de treino;
    • Gera um arquivo chamado VetoresDePesoAntes.jpg que exibe todos os vetores de peso antes do aprendizado;
    • Gera um arquivo chamado VetoresDePesoDepois.jpg que exibe todos os vetores de peso depois do aprendizado;

    Note que as 3 imagens só serão geradas se a quantidade de números (k) que irão compor cada vetor for igual a 2 (duas dimensões).

    O projeto pode ser baixado no link Algoritmo competitivo em Python ou através da URL:
    www.frenetic.com.br/projetos/ia_python/IA_Python.zip

    Screenshots do projeto:

    Janela Principal

    VetoresDeTreino.jpg

    vetorPesoAntes.jpg

    vetorPesoDepois.jpg

    Recriando o clássico jogo Snakes utilizando JavaScript

    Como dito no artigo Diário de um programador 04: Peitica, decidi recriar o clássico jogo Snakes, utilizando JavaScript.
    O resultado, assim como o código fonte (todo comentado e mastigado) pode ser conferido na URL:
    www.frenetic.com.br/projetos/snakes/snakes.html

    Divirtam-se!