Tag: Programação

  • Programação Python no Celular Android

    Programar Python em celular Android entrou no meu interesse por ter ouvido “… qualquer computador ou notebook serve! Celular não vai rolar!” Será? Consigo programar Python no Celular? O que não consigo fazer??

    Referências

  • HTML5 – notas de uso….

    No inferno, Abrace o Diabo!

    O MAC me falou sobre aprender com os tutorials. Resolvi dar uma olhada como estão os tutorials em especial nesta área de HTML5.

    Referencias:

  • Redução de tamanho de arquivos de imagem

    Redução de tamanho de arquivos de imagem

    Problema:

    Imagens estão ocupando muito espaço na hospedagem do site. Reduzir a qualidade das imagens .

    O tamanho das imagens também podem vir

    1. do tamanho das própria imagem
    2. Resolução da imagem.

     

    Proposta:

    Usar o Gimp em seu processamento de lote para ajustar a qualidade das imagens (50% no caso das imagens JPEG) o mesmo procedimento para as fotos.

    Claro que se as imagens já estiverem com esta qualidade, ou menor, não haverá ganho.

    Um pouco de Código:

    
     (define (batch-half-quality-jpeg-file pattern
                                          radius
                                          amount
                                          threshold)
        (let* ((filelist (cadr (file-glob pattern 1))))
           (while (not (null? filelist))
             (let* ((filename (car filelist))
                (image (car (gimp-file-load RUN-NONINTERACTIVE
                                            filename filename)))
                (drawable (car (gimp-image-get-active-layer image))))
             (file-jpeg-save RUN-NONINTERACTIVE
                             image drawable filename filename
                             0.50 0 1 1 "GIMP" 0 1 0 0)
                      ; 0.50 quality (float 0 <= x <= 1)
                      ; 0 smoothing factor (0 <= x <= 1)
                      ; 1 optimization of entropy encoding parameter (0/1)
                      ; 1 enable progressive jpeg image loading (0/1)
                      ; "xxxx" image comment
                      ; 0 subsampling option number
                      ; 1 force creation of a baseline JPEG
                      ; 0 frequency of restart markers
                      ; in rows, 0 = no restart markers
                      ; 0 DCT algoritm to use
             (gimp-image-delete image))
             (set! filelist (cdr filelist)))))

    Este código foi colocado em um arquivo batch-half-quality-jpeg-file.scm na pasta ~/.gimp-2.8/scritps

    Ooops. Parece que restos do código antigo ficaram neste código. Recomenda-se cautela.

    O script foi executado de um terminal

    ~$ gimp -i -b '(batch-half-quality-jpeg-file "./fotos/lote01-50/*.JPG" 5.0 0.5 0)' -b '(gimp-quit 0)'

    Note que os arquivos originais são sobreescritos sem maiores questionamentos.

    O processamento resulta em algumas mensagens de alerta como

    (gimp:15907): GLib-GObject-WARNING **: g_object_set_valist: object class 'GeglConfig' has no property named 'cache-size'
    ...
    (gimp:15907): GEGL-gegl-operation.c-WARNING **: Cannot change name of operation class 0x123A330 from "gimp:point-layer-mode" to "gimp:anti-erase-mode"
    While parsing XMP metadata:
    Erro: não foi encontrado nenhum pacote XMP
    ....
    batch command executed successfully

    Porem atinge os nossos objetivos de diminuir o tamanho dos arquivos de image.

    Como esta solução foi usada em um Ubuntu 15.10 e GIMP 2.8, algumas adaptações podem ser necessárias para o seu ambiente.

    Referencias:

    1. GNU Image Manipulation Program – Documentação bem completa do Gimp.
    2. GIMP Batch Mode – um tutorial para começar a entender o processamento em lote usando o Gimp.
    3. Preparing your Images for the Web – Orientações de preparação de imagens para uso na Web.
    4. Your First Script-Fu Script
    5. Automatic Creation of XCF from JPG – Será que dá para salva de volta como JPEG, mas com novos parametros de qualidade?
    6. Writing GIMP Scripts and Plug-Ins – o básico sobre escrever scripts e plugins para o Gimp.
    7. Notes on GIMP Scripting
    8. GIMP: Re-uniting Save and Export
    9. Krita – Alternativa ao Gimp como ferramenta de desenho.
    10. Some GIMP Scripts-Fu (and Related ImageMagick Notes)
  • Ordenar tabela com PinYin em ordem natural.

    PythonO Chinês é uma lingua muito peculiar. Uma língua monosilábica, tonal (alteração de tons na pronúnica da silaba diferencia o signicado das palavras). Para representar os sons das palavras chinesas padronizou-se o uso do PinYin (transliteração oficial) representando os 4 tons através de sinais diacriticos sobre as vogais. Veja um pequeno exemplo :

    A mesma silaba "Ma" apresentada nos diversos tons, apresenta significados bem distintos.

    Neste momento, eu me defronto com o problema de ordenar um glossário (planilha) de tres colunas : Ideograma, PinYin, e significado. Para facilitar aa consulta de um tal Glossário, digamos com mil expressões, gostaríamos de ordenar em ordem alfabética da coluna PinYin. Está é uma ordem natural uma vez que as letras A com ou sem os sinais diacriticos estão na ordem numérica convencionada para os tons. Mas, quando ordenamos pela coluna PinYin (B), numa planilha (Calc do LibreOffice, ou Excel do Office Microsoft) obtemos :

    Isso porque as vogais com diacriticos foram dispostos na tabela de caracteres em espaços disponíveis não de considerando este nosso possivel interesse.

    Esperar que a tabela de condificação dos caracteres diacríticos seja revista para contemplar a ordem natural das palavras chinesas parece estar fora de questão. Vamos a uma solução local e particular.

    Criaremos uma coluna adicional, somente para a classificação em ordem natural das palavras chinesas aproveitando a estrutura atual de condificação dos caracteres com diacriticos.

    Usaremos o recurso string.translate(str.maketrans(raw, coded)) do Python convertendo as vogar "āáǎàaēéěèeīíǐìiōóǒòoǖǘǚǜüūúǔùu" para "aáàǎāeéèěēiíìǐīoóòǒōuúùǔüǘǜǚǖū" obtendo a coluna auxiliar para a classificação.
     

    Como a ordenação do pinyin considera cada um dos tons de cada vogal diferentemente na ordenação, tivemos que subtituir cada vogal para a configuração vn onde v é a vogal sem o diacritico seguido pelo n do tom na sequencia desejada. Por exemplo, considerando o tom neutro como 5 para ficar depois dos 4 outros tons na ordenação. Alem disso, tomamos o cuidado de ordenar corretamente o u com o ü! Usamos a metodo s.replace dos strings do python para fazer as substuições.

    Dado uma lista de expressões contendo palavras em PinYin tentarei ordenar em sua ordem natural. Esclarecendo, a ordem dos caracteres diacriticos não é natural.

    Referências:

    • http://gomputor.wordpress.com/2008/09/27/search-replace-multiple-words-or-characters-with-python/ – aqui uma forma de substituição de caracteres.
    • str.translate(table[, deletechars]) – parece ser mais adequado para o nosso caso.
  • OpenBiblio – +1 Relatório

    OpenBiblio - a library system that's free
    um sistema de biblioteca que é livre

    Vou anotar aqui as minhas observações sobre a criação de um relatório adicional para a nossa instalação do OpenBiblio (http://cedom.net/biblioteca/).

    Sentimos a falta do histórico de um exemplar, para saber por onde ele andou, quem o retirou. Estas são as notas sobre o processo de criação de um tal relatório para a nossa biblioteca. O detalhamento destas notas é condicionado ao processo criativo.

    Nada se cria, tudo se copia….

    Meu modo básico de criar um novo relatório, eu copio um relatório existente (~/reports/defs/*.rpt) com um novo nome. Se possível, escolho um relatório parecido com o que quero criar….

    Identificação

    Cada relatório deve ter o seu nome, e cada nome somente deve ser usado para um relatório…. assim,

    .title HistoricoCirculacao

    alterei a primeira linha do meu novo relatório para ter uma palavra chave para o nome do meu relatório. Sim, esta deve ser somente uma palavra chave, que será o nome do relatório, se quiser que ele seja decodificada em sua lingua local, inclua uma linha de decodificação no arquivo ~/locale/pt/reports.php com o formato

    $trans["HistoricoCirculacao"]  = "\$text = 'Histórico de Circulação';";

    ainda no tema Identificação cabe definir a linha

    .category Circulation

    para indicar em que bloco de relatórios, este novo item deve entrar.

    … encontrei um relatório muito parecido

    Encontrei um relatório muito parecido com o que eu precisava em Reports, assim esta saga de escrever relatórios para a nossa biblioteca ficou para uma próxima oportunidade.

    … Relatórios.

    • Acompanhamento de Catalogação ganhou uma nova versão agora com a possibilidade de demarcar a data de inicio e data de fim do periodo de analise. Status : Instalado em testes.
    • Titulos – uma lista de titulos, com a contagem de exemplares. Status: Instalado em testes.
    • Leitores – especialmente preparado para crítica do cadastro de leitores com data de atualização, nome e sobrenome, endereço, telefones, grupo, e contagens. Status: A Desenvolver.

    Perguntas

    • Comentários – como eu incluo comentários em meu relatório? afinal quero deixar claro o que estou fazendo para quem for ler este programa.

    Referências

    • Reports – uma lista de relatórios prontos que podem ser úteis.
    • WritingReports – a documentação sobre o módulo de relatórios do OpenBiblio na sua versão 0.6x.
    • RPTSyntax – a Sintaxe dos arquivos de configuração de relatórios. Pode não ser realmente completo, mas dá uma boa idéia do que pode ser feito e como fazê-lo.
    • OpenBiblio Customization – encontrei aqui bons recursos adicionais para a nossa instalação do OpenBiblio. Relatórios adicionais com contagem foi bem proveitoso.
    • MySQL Outer Join Tips – algumas dicas de outer join do mysql que ajudam na construação de relatorios.
    • Sintaxe Join – em último caso, sempre recorrer ao manual do MySQL.