JSPDF – Gerandor de pdf client-side

Normalmente em sistemas web quando se pensa em geração de PDFs normalmente se pensa em fazê-lo no lado do servidor, existem várias opções e bibliotecas para isso, mas quem trabalha com performance de sistemas pensa sempre em economizar processamento.
Para isso existe uma biblioteca javscript chamada JSPDF, a qual gera o PDF do lado cliente, podendo converter até HTML em PDF. Existem ainda alguns pontos que não estão muito maduros nela, mas já é um grande começo.
Fica a dica para quem precisar disso, os exemplos estão no site deles http://jspdf.com/ e o melhor é que a licença é MIT.

Publicado em Não classificado

Baixando outras versões do firefox

Uma dica rápida para quem precisa testar o firefox em outras versões, no link http://download.cdn.mozilla.net/pub/mozilla.org/firefox/releases/ estão todos os instaladores para todos os sistemas operacionais.

Publicado em Blog, Firefox, Linux, Ubuntu, windows

Ubuntu post-install e pre-install path

No ubuntu a pasta com os scripts post-install e pre-install dos pacotes.

/var/lib/dpkg/info

Marcado com: ,
Publicado em Linux, Ubuntu

Escrevendo filtros HAML

Para quem usa HAML é mais que comum usar os filtros no código, por exemplo:

  :javascript
    alert('')
  :css
    body { background-color: #000; }

Já senti várias vezes a necessidade de alterar um destes filtros, especialmente porque tornam o código mais limpo.
Para criar um filtro é necessário apenas, montar um modulo e adicioná-lo ao filtros. Veja o exemplo:

#File: lib/meu_filtro.rb # O nome do arquivo não tem importância
module Haml
  module Filters
    module MeuFiltro #Nome do seu módulo
      include Base
      def render_with_options(text, options)
        #Aqui pode ser colocado qualquer execução para compilar seu texto
        "Ola #{text}! <=> !#{text.reverse} alO"
      end
    end
    Filters.defined['meu_filtro'] = MeuFiltro #Adicionando aos filtros do haml
  end
end

Feito isso agora é só incluí-lo nas suas dependências:

#File: config/application.rb
require "../lib/meu_filtro.rb"

E utilizá-lo na view.

  %br
    Abaixo vou utilizar meu filtro.
  :meu_filtro
    mundo
  :meu_filtro
    dannnylo

Assim você pode criar seus filtros pro haml e limpar mais ainda seu código.

Marcado com: , , ,
Publicado em HAML, Ruby, Ruby on Rails

RMagick: Removendo fundo de imagem

O Imagemagick é uma ferramenta muito boa para alteração de imagens, e utilizando ele através do RMagick no Ruby é muito fácil remover o fundo de uma imagem, comparando-a com outra.
No exemplo temos as seguintes imagens:

Original

Fundo

Para remover o fundo é só utilizar o seguinte código:

    img  = Magick::Image.read("teste.png").first
    mask = Magick::Image.read("teste2.png").first
    img = img.composite mask, Magick::ForgetGravity, Magick::ChangeMaskCompositeOp
    img.write("imagem_sem_fundo.png")

Com isso será criada uma imagem com o fundo transparente se utilizado a constante Magick::ChangeMaskCompositeOp, existem outras constantes que geram resultados diferentes. Para mais opções veja a documentação aqui.

Publicado em Não classificado

Redimensionando Hds com o Virtualbox 4

Uma funcionalidade adicionada na versão 4 do virtualbox e por sinal muito útil, é o redimensionamento de HDs que possuam expansão dinâmica , possibilitando aumentar o tamanho deles com um simples comando do console.

Caso você não tenha instalado ainda a versão 4 veja como fazer isso aqui.

Por exemplo para alterar um hd para 10G, deve-se utilizar a opção modifyhd com o parâmetro --resize, veja exemplo:

 

VBoxManage modifyhd Debian.vdi --resize 10240 

Obs: Os valores devem estar em megabytes.

Marcado com:
Publicado em Linux, Virtualbox

Pidgin conflitando com pidgin-facebookchat

Ao tentar atualizar o pidgin me deparei com uma incompatibilidade entre o pidgin-data e o pidgin-facebookchat referente a imagens do protocolo.
Apresentando o erro:

Preparando para substituir pidgin-data 1:2.7.7-1ubuntu0+pidgin1.10.10 (usando .../pidgin-data_1%3a2.7.9-1ubuntu0+pidgin1.10.10_all.deb) ...
Desempacotando substituto pidgin-data ...
dpkg: erro processando /var/cache/apt/archives/pidgin-data_1%3a2.7.9-1ubuntu0+pidgin1.10.10_all.deb (--unpack):
 tentando sobrescrever '/usr/share/pixmaps/pidgin/protocols/16/facebook.png', que também está no pacote pidgin-facebookchat 1.67.1-1
dpkg-deb: sub-processo colar foi morto por sinal (Canal quebrado)
Erros foram encontrados durante o processamento de:
 /var/cache/apt/archives/pidgin-data_1%3a2.7.9-1ubuntu0+pidgin1.10.10_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

O ubuntu sugeriu utilizar o comando:

    apt-get -f install

Porém ele o erro continua. Para resolver este erro é necessário instalar o pacote através do dpkg com a opção --force-overwrite, ficando assim o código:

    dpkg -i --force-overwrite  /var/cache/apt/archives/pidgin-data_1%3a2.7.9-1ubuntu0+pidgin1.10.10_all.deb

Possivelmente a versão do arquivo pode mudar, então atente a isso.
Espero ter ajudado.

Marcado com: , , ,
Publicado em Linux, Não classificado, Ubuntu

Redimensionando imagens de um diretório com RMagick

Criei um script em ruby utilizando RMagick que redimensiona as imagens de um diretório, deixando-as com um tamanho máximo expecificado.
Para utilizá-lo é necessário apenas alterar a localização das pastas das variáveis from e to, podendo os dois serem o mesmo assim sobrescrevendo o arquivo.
Segue o código:

require "rubygems"
require "RMagick"
require "pathname"

#Diretório das imagens
from = Pathname.new("/var/www/images")
#Diretório destino
to = Pathname.new("/var/www/images/new_size")
#Tamanho máximo da imagem
max_size =  800
#Extensões permitidas
ext = [".jpg",".png",".gif"]

from.entries.each do |file|
  file = from.join(file.basename.to_s)
  #Ignorando diretórios
  next unless file.file?
  #Ignorando arquivos não permitidos
  next unless ext.include? file.extname

  begin
    image = Magick::ImageList.new(from.join(file.basename.to_s).to_s)[0]
    #Redimensionando se ela for maior do que o tamanho máximo
    image.resize_to_fit!(max_size) if image.columns > max_size || image.rows > max_size
    novo = to.join(file.basename.to_s).to_s
    #Gravando ela no novo arquivo
    image.write novo
  rescue=>e
    puts e
  end
end

Espero que tenham gostado.

Marcado com: , ,
Publicado em Programação, Ruby

Executar comando como outro usuário no Dos/Command Windows

Uma dica rápida, caso você precise rodar um comando Dos como outro usuário, por exemplo o administrador da máquina, é necessário executar o seguinte comando.

runas /profile /user:NOME_DO_USUARIO "COMANDO_DESEJADO"

Alterando o NOME_DO_USUARIO pelo nome do usuário desejado, caso seja do domínio use da seguinte forma NOME@DOMINIO ou DOMINIO/NOME.

Um exemplo seria este:

runas /profile /user:administrador "notepad teste.txt"

Com este comando consegue-se abrir o bloco de notas com as permissões de administrador.
Espero que tenham gostado.

Marcado com: , ,
Publicado em windows

Google-Search uma gem de pesquisa google para Ruby

Encontrei uma gem um tanto interessante a respeito de buscas Google a gem google-search. De uma forma simples e rápida pude pegar as informações das pesquisas e manipulá-las.
Ela utiliza a API disponibilizada pelo próprio google para realizar as pesquisas (veja aqui).
A instalação segue o padrão:

gem install google-search

Para todas as pesquisas podemos passar os seguintes parâmetros:

  • query – Texto para busca
  • language – Língua para a realização da pesquisa
  • safety_level – Define se o resultado será restrito. Os valores que podem ser atribuídos estão presentes na constante Google::Search::Web::SAFETY_LEVELS, que são os seguintes símbolos: active, moderate, off
  • filter – Define se retorna ou não resultados duplicados. (1 – Retorna duplicados. 0 – Não retorna duplicados.)

As formas possíveis de buscas são:

Google::Search::Web

Esta classe retorna os resultados da pesquisa Web do google, trazendo consigo os links dos sites.
Os registros retornados são da classe Google::Search::Item::Web o qual possui as seguintes informações:

  • uri – Endereço da página encontrada.
  • cache_uri – Endereço da página cacheada pelo Google.
  • title – Título da página.
  • content – Uma breve descrição do conteúdo.
  • thumbnail_uri – Url do thumbnail (caso exista).
  • thumbnail_height – Altura do thumbnail (caso exista).
  • thumbnail_width – Comprimento do thumbnail (caso exista).
  • visible_uri – Url visível.
  • index – Número do index.

Com estas opções são vastas as possibilidades, veja abaixo no caso de uma listagem básica.

require "rubygems"
require "google-search"

Google::Search::Web.new({:query=>"rails"}).each do |result|
  puts "#{result.title} - #{result.uri}"
end

Este código realiza uma pesquisa pelo termo rails e imprime os títulos e a url das páginas.

Google::Search::Blog

Esta classe tem como finalidade retornar os resultados referente a posts de blogs com o termo pesquisado.
Os registros retornados são da classe Google::Search::Item::Blog o qual possui as seguintes informações:

  • author – Nome do post
  • content – Uma breve descrição do conteúdo.
  • title – Título do resultado.
  • uri – Endereço do resultado.
  • blog_uri – Endereço do blog.
  • index – Número do index.
  • published – Data de publicação
  • thumbnail_uri – Url do thumbnail (caso exista).
  • thumbnail_height – Altura do thumbnail (caso exista).
  • thumbnail_width – Comprimento do thumbnail (caso exista).

Para a pesquisa em blogs podemos ter um exemplo básico, o qual lista o titulo e o autor que possuam a palavra ruby.

require "rubygems"
require "google-search"

Google::Search::Blog.new({:query=>"ruby"}).each do |result|
  puts "#{result.title} - #{result.author}"
end
Google::Search::Book

Esta classe tem como finalidade retornar os resultados referente a livros com o termo pesquisado.
Os registros retornados são da classe Google::Search::Item::Book o qual possui as seguintes informações:

  • author – Nome do autor
  • pages – Número de páginas
  • title – Título do livro.
  • id – Identificação do livro para o google,
  • uri – Endereço do livro no google.
  • index – Número do index.
  • published_year – Ano de publicação do livro
  • thumbnail_uri – Url do thumbnail (caso exista).
  • thumbnail_height – Altura do thumbnail (caso exista).
  • thumbnail_width – Comprimento do thumbnail (caso exista).
  • visible_uri – Url visível.

Para a pesquisa de livros podemos ter um exemplo básico, o qual lista o titulo e o número de páginas dos livros que possuam a palavra ruby.

require "rubygems"
require "google-search"

Google::Search::Book.new({:query=>"ruby"}).each do |result|
  puts "#{result.title} - #{result.pages.to_i}"
end
Google::Search::Image

Desenvolvida para pesquisa de Imagens com o termo informado.
Os registros retornados são da classe Google::Search::Item::Image o qual possui as seguintes informações:

  • title – Título da Imagem.
  • content – Uma breve descrição do conteúdo.
  • id – Identificação da imagem para o google
  • uri – Endereço da imagem no google.
  • context_uri – Endereço da página que contem a imagem.
  • height – Altura da imagem.
  • width – Comprimento da imagem.
  • index – Número do index.
  • thumbnail_uri – Url do thumbnail.
  • thumbnail_height – Altura do thumbnail.
  • thumbnail_width – Comprimento do thumbnail.
  • visible_uri – Url visível.

Um exemplo de utilização seria um script para baixar as 10 primeiras imagens referentes ao termo pesquisado.

require "rubygems"
require "google-search"
require "open-uri"

i = 0
Google::Search::Image.new({:query=>"ruby"}).each do |result|
  name = result.uri.split("/").last
  file = File.open(name.to_s,"w+")
  file.write open(result.uri).read
  file.close
  i += 1
  break if i == 10
end
Google::Search::Local

Esta classe retorna resultados da pesquisa de um termo, com posições geograficas e links para o google maps.
Os registros retornados são da classe Google::Search::Item::Local o qual possui as seguintes informações:

  • title – Título do resultado.
  • uri – Endereço do resultado.
  • thumbnail_uri – Url do thumbnail.
  • thumbnail_height – Altura do thumbnail.
  • thumbnail_width – Comprimento do thumbnail.
  • index – Número do index.
  • street_address – Endereço onde é localizado o resultado.
  • city – Cidade onde é localizado o resultado.
  • region – Estado onde é localizado o resultado.
  • country – País onde é localizado o resultado.
  • lat – Longitude do endereço.
  • long – Latitude do endereço.
  • phone_numbers – Números de telefone do resultado.
  • address_lines – Array com endereço completo.
  • directions_uri – Link para o google maps.
  • directions_from_here_uri – Como chegar partindo deste ponto.
  • directions_to_here_uri – Como chegar até este ponto.
  • viewport_mode – Modo de visualização.

Exemplo básico de pesquisa mostrando o titulo do resultado e a localização dele.

require "rubygems"
require "google-search"
require "active_support/core_ext"

Google::Search::Local.new({:query=>"ruby",:published=>"2010-01-01"}).each do |result|
  puts "#{result.title} - #{result.address_lines.join(" - ")}"
end
Google::Search::Patent

Particularmente não conhecia a busca de patentes do google e só através desta gem que fui conhecer. Esta classe tem como objetivo retornar os resultados da busca de patentes.
Os registros retornados são da classe Google::Search::Item::Patent o qual possui as seguintes informações:

  • id – Identificação da patente para o google
  • title – Título do patente.
  • content – Uma breve descrição do conteúdo.
  • uri – Endereço do patente no google.
  • assignee – Dono da patente
  • thumbnail_uri – Url do thumbnail.
  • thumbnail_height – Altura do thumbnail.
  • thumbnail_width – Comprimento do thumbnail.
  • application_date – Data de aplicação da patente.
  • status – Situação da patente.
  • index – Número do index.

Exemplo básico de pesquisa mostrando o titulo e o dono.

require "rubygems"
require "google-search"
require "active_support/core_ext"

Google::Search::Patent.new({:query=>"ruby",:published=>"2010-01-01"}).each do |result|
  puts "#{result.title} - #{result.assignee}"
end
Google::Search::Video

Esta classe tem como finalidade retornar os resultados referente a videos com o termo pesquisado.
Os registros retornados são da classe Google::Search::Item::Video o qual possui as seguintes informações:

  • title – Título do vídeo.
  • content – Uma breve descrição do conteúdo.
  • uri – Endereço do vídeo no google.
  • index – Número do index.
  • published – Data de publicação
  • thumbnail_uri – Url do thumbnail.
  • thumbnail_height – Altura do thumbnail.
  • thumbnail_width – Comprimento do thumbnail.
  • rating – Avaliação do vídeo.
  • publisher – Local no qual está publicado.
  • type – ID do Local no qual está publicado.
  • duration – Duração do vídeo em segundos.

Para a pesquisa de videos podemos ter um exemplo básico, o qual lista o título e data de publicação dos vídeos que possuam a palavra ruby.

require "rubygems"
require "google-search"
require "active_support/core_ext"

Google::Search::Video.new({:query=>"ruby",:published=>"2010-01-01"}).each do |result|
  puts "#{result.published.strftime("%Y-%m-%d %H:%M:%S")} - #{result.title}"
end

Assim terminando a explicação sobre as funcionalidades desta gem e com ela as possibilidades de aplicações são variadas, expecialmente se tratando de pesquisas com a gigante Google.

Marcado com: , , ,
Publicado em Gems, Google, Ruby
Calendário de Posts
abril 2024
D S T Q Q S S
 123456
78910111213
14151617181920
21222324252627
282930  
Autor

Danilo Jeremias da Silva

Coloque seu e-mail para receber novidades e notificações do Blog.

Junte-se a 18 outros assinantes



Recommend Me