Category: Linux/SL


Salve,

No post Usando o Snippely em vários locais com Dropbox no Ubuntu Natty 11.04 foi ensinado no Ubuntu, mas serve para qualquer Linux. No Mac OSX, por causa das suas frescuras e estrutura de diretório diferente do Linux, você vai ter um puta trabalho…pra descobrir onde fica o bendito banco de dados do Snippely. Mas agora eu achei e compartilho como usa ele junto com Dropbox.

~/Library/Preferences/com.snippely.{parte variável pela instalação}/Local\ Store/

Agora é entrar na pasta, apagar o application.db e criar o link simbólico:

ln -s ~/Dropbox/Snippely/application.db .

* lembrando que o caminho para seu arquivo application.db no Dropbox pode ser diferente, é só você definir ai o caminho como você usa.

Valeu!

Salve,

Com problema ao especificar o valor do frete para o Pagseguro, demorei mas consegui. Infelizmente a documentação não deixa de forma clara. Então segue a dica:

Na configuração do frete no painel do Pagseguro, escolha o tipo Frete fixo e Adicional com valor fixo informe 0 ( zero ) para o Valor fixo para os adicionais, na adição dos itens, informe o valor do frete no primeiro item e nos demais informe 0 ( zero ). Pronto, agora ele vai aceitar lá como valor de frete o que você informou.

Para calcular o frete direto com o webservice dos Correios/ECT com PHP use a biblioteca que peguei do iMasters e adaptei ( refatorei várias coisas e adicionei funcionalidades ) aqui:  https://github.com/silasrm/correios

Convertendo PDF em PNG/JPG

Salve,

Precisei converter um PDF simples, uma página, em uma imagem. Mais simples impossível.

*Necessita do ImageMagick

Para PNG:
convert x.pdf x.png

Para JPG:
convert x.pdf x.jpg

Valeu!

Salve,

Que o Dropbox é uma mão na roda com sua solução de nuvem integrada ao sistema de arquivo fácil e rápido todos sabem, então juntando isso com o Snippely, ferramenta para guardar Snippets bem fácil, bonita e muito boa feita em Adobe Air, é algo muito bom e simples de integrar.

* O nome da pasta do Snippely dentro da .appdata pode ser diferente entre usuários/máquinas

  1. Instale o Snippely
  2. Configure sua conta do Dropbox
  3. Mova o arquivo ~/.appdata/com.snippely.6E4C758165F11BBEC90F106AA88CF53EB51547B1.1/Local\ Store/application.db para sua pasta do Dropbox: mv ~/.appdata/com.snippely.6E4C758165F11BBEC90F106AA88CF53EB51547B1.1/Local\ Store/application.db ~/Dropbox/Snippely/application.db
  4. Crie um link simbólico desse arquivo no Dropbox: ln -s ~/Dropbox/Snippely/application.db ~/.appdata/com.snippely.6E4C758165F11BBEC90F106AA88CF53EB51547B1.1/Local\ Store/application.db

Pronto, agora é só criar e ao salvar o Dropbox atualizará seu banco de dados de snippets. Onde você desejar usar, é só fazer o link simbólico do arquivo.

Salve,

Atualizado: tive problemas ao instalar no Ubuntu 11.04, não sei a causa de não funcionar como antes, mesmo passando o ORACLE_HOME ele não estava pegando, ai descobrir que o erro erá por está fixado um padrão de diretório onde deve-se colocar os arquivos do instant client, com isso tive que seguir o padrão, eliminando 2 passos e deixando mais organizado a instalação.

Receita rápida para funcionar o suporte a Oracle no PHP, no Ubuntu Linux, usando versão 10.10 ou 11.04 64bits.

Primeiro baixe os arquivos do Instant Client aqui, versão 10.2.0.5 ou 11.2.0.2, eles são:

  • basic-10.2.0.5.0-linux-x64.zip
  • sqlplus-10.2.0.5.0-linux-x64.zip
  • sdk-10.2.0.5.0-linux-x64.zip

Vá para a pasta /usr e crie a seguinte estrutura:

cd /usr/lib
sudo mkdir -p oracle/10.2.0.5/client
cd oracle/10.2.0.5/client

Descompacte os arquivos baixados, lembrando que precisa está como root ou usando o sudo:

sudo unzip basic-10.2.0.5.0-linux-x64.zip
sudo unzip sdk-10.2.0.5.0-linux-x64.zip
sudo unzip sqlplus-10.2.0.5.0-linux-x64.zip

Mova tudo da pasta instantclient_10_2 para a atual e apague a instantclient_10_2

sudo mv instantclient_10_2/* .
sudo rm -rf instantclient_10_2/

Crie os links simbólicos:

sudo ln -s /usr/lib/oracle/10.2.0.5/client/libclntsh.so.10.1 /usr/lib/oracle/10.2.0.5/client/libclntsh.so
sudo ln -s /usr/lib/oracle/10.2.0.5/client/libocci.so.10.1 /usr/lib/oracle/10.2.0.5/client/libocci.so
sudo ln -s /usr/lib/oracle/10.2.0.5/client/ /usr/lib/oracle/10.2.0.5/client/lib
sudo ln -s /usr/lib/oracle/10.2.0.5/client/sdk/include /usr/lib/oracle/10.2.0.5/client/include

Instale a extensão oci8 via PECL:

sudo pecl install oci8

Ele vai pedir o caminho da do Instant Cliente, então você informa:

instantclient,/usr/lib/oracle/10.2.0.5/client/

Adicione a extensão no php.ini:

extension=oci8.so

Baixe o pacote PDO_OCI, via PECL, para compilarmos:

sudo pecl download pdo_oci

Descompacte e entre na pasta do PDO_OCI:

sudo tar xvfz PDO_OCI-1.0.tgz
cd PDO_OCI-1.0

Agora siga os passos da compilação:

sudo phpize
sudo ./configure --with-pdo-oci=instantclient,/usr,10.2.0.5

Se você teve problema no passo acima, principalmente em versão 32bits, abra o arquivo configure, procure por pdo_driver e nas linhas desse bloco ( IF/ELSE IF/ELSE ), mude os caminhos da pasta do php onde tem php/ext/ para php5/ext/ pois no Ubuntu a pasta do PHP é php5 em vez de php.

sudo make
sudo make install

Adicione a extensão no php.ini:

extension=pdo_oci.so

Recarregue o apache:

sudo service apache2 reload

** Plus:

Adicione o sqlplus no /usr/bin para poder executar/conectar/fazer consultas via terminal:

sudo ln -s /usr/lib/oracle/10.2.0.5/client/sqlplus /usr/bin/

Edite o arquivo /etc/ld.so.conf e adicione o caminho para a pasta de instalação do InstantClient /usr/lib/oracle/10.2.0.5/client/ e depois recarregue a ldconfig:

sudo vim /etc/ld.so.conf
sudo ldconfig

Pronto. Crie um arquivo chamando o phpinfo() e veja se está instalado o suporte a Oracle.

Salve,

Fiz esse artigo aqui mostrando o arquivo que ele procura para tentar instalar e como instalar manual, confira aqui: http://silas.theducks.com.br/2010/01/13/hplip-plugin/

Mas agora eu consegui resolver para instalar sem ter tanto trabalho. Pois apesar desse contorno que fiz e consegui instalar uma vez, agora ao selecionar o arquivo .run baixado o botão de Next não ativa, não sei o motivo e nem o programa informa, com isso dediquei meu tempo em conseguir passar sobre o proxy.

Apesar de não trabalhar, mas já saber um básico de python e estudar a linguagem, fui olhar os arquivos onde dá erro. Cheguei numa função que usa urllib para pega as informações. O problema agora é saber por que ele não pega as configurações de proxy do sistema. Para verificar se está com as configurações de proxy, no terminal faça:

env | grep -i proxy

E retornará algo como:

NO_PROXY=localhost,127.0.0.0/8,*.local
http_proxy=http://10.0.0.9:8080/
FTP_PROXY=ftp://10.0.0.9:8080/
ftp_proxy=ftp://10.0.0.9:8080/
all_proxy=socks://10.0.0.9:8080/
ALL_PROXY=socks://10.0.0.9:8080/
HTTPS_PROXY=https://10.0.0.9:8080/
https_proxy=https://10.0.0.9:8080/
no_proxy=localhost,127.0.0.0/8,*.local
HTTP_PROXY=http://10.0.0.9:8080/

Tudo certinho. O wget pega essas configurações ou as informadas no ~/.wgetrc mas esse urllib não pega. Então procurando no google achei essa página informando que isso seria um bug do urllib, mas por incrível que pareça não é. Ele simplesmente usa uma outra maneira de setar proxy, algo tão bizarro que é difícil de acreditar, então usei assim, no terminal:

sudo http_proxy=http://10.0.0.9:8080 hp-plugin

Não me pergunte o por que dele precisar que faça isso antes da chamada do comando. Importa que funcionou e não quero me preocupar por agora em saber as decisões bizarras dos outros :mrgreen:

Ai vai abrir a parte gráfica, só apertar Next e 10s depois está instalado, dependendo é claro da sua conexão, mas o arquivo é tão pequeno ( 1.7MB ) que seja bem rápido mesmo.

Agora você tem uma nova maneira ou a maneira mais correta de instalar plugin/driver usando HPLip mesmo estando sobre proxy.

Valeu!

Salve,

Sempre desejei investir tempo no aprendizado e trabalhos com Python. Estudo ela, mas em ritmo lento, já tenho livro e só faltava um curso/mini-curso pra dá um empurrão e aprender com a experiência de alguém muito bom em Python. Com isso participei do mini-curso de Python ocorrido no Linguágil 2010, o mestre foi o Marco André. Ótimo instrutor, gostei pra caramba do mini-curso, foi sensacional e me deixou empolgado.

Ai estou testando a criação de aplicação desktop e escolhi o PyGTK pra isso. Depois quero ver a parte de web com o Django, mas minha paixão pra web é o PHP, então vamos começar por desktop mesmo.

Procurei uns sites mostrando o início do uso do PyGTK e foi bacana e rápido aprender, muito fácil. Segue meu código simples:

import pygtk
pygtk.require('2.0')
import gtk

class mainWindow:
 def __init__( self ):
 #janela principal
 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
 self.window.set_title('IlA')

 #caixa vertical para criacao de N elementos/widgets
 self.vBox = gtk.VBox()

 #label
 self.label = gtk.Label('Eu sou um label')

 #caixa de entrada
 self.iBox = gtk.Entry()

 #caixa horizontal
 self.hBox = gtk.HBox()

 #botao
 self.button = gtk.Button('Ola Mundo')
 self.button.connect('clicked', self.clickedButton)

 #adiciona elementos
 ##label
 self.hBox.pack_start(self.label, expand=False, fill=True)
 ##caixa de entrada
 self.hBox.pack_start(self.iBox, expand=False, fill=True)
 ##caixa horizontal
 self.vBox.pack_start(self.hBox, expand=False, fill=True)
 ##botao
 self.vBox.pack_start(self.button, expand=False, fill=True)

 self.window.add(self.vBox)
 self.window.connect('destroy', self.closeAll)
 self.window.show_all()

 def clickedButton( self, button ):
 print self.iBox.get_text()

 def closeAll( self, window ):
 self.window.hide()
 gtk.main_quit()

if __name__ == '__main__':
 mainWindow()
 gtk.main()

Aqui tem um curso de Python e tem usando PyGTK: http://infog.casoft.info/?tag=aulas

Aqui a documentação do PyGTK: http://pygtk.org/docs/pygtk/

Valeu e vamos que vamos!

O que é?

É uma linguagem de marcação muito simples e que foi criada por John Gruber e Aaron Swartz em tem seus códigos de formatação convertidos em XHTML.

No Github você pode enfeitar o README do seu projeto criando um README.markdown com as marcações e automaticamente o mesmo será interpretado e gerado um XHTML válido e bonito.

Como Usar – Códigos para Formatação

Transformar qualquer código em literal, usa-se ‘\’ (barra invertida) antes: \# ou \` ou \*
H1
# Meu Título
Resultado: <h1>Meu Título</h1>

H2
## Meu Sub-título
Resultado: <h2>Meu Sub-título</h2>

[...]

H6
###### Meu pequeno tituluzinho
Resultado: <h6>Meu pequeno tituluzinho</h6>

Itálico
*texto*
_texto_
Resultado: <em>texto</em>

Negrito
**texto**
__texto__
Resultado: <strong>texto</strong>

Código
`print_r(array());`
Resultado: <code>print_r(array());</code>

Citação
> texto
Resultado: <blockquote>texto</blockquote>

Link
[Clique aqui para Baixar o PDF](http://www.uia.com/demo.pdf “Clique e Baixe o PDF”)

Resultado: <a href=”http://www.uia.com/demo.pdf” title=”Clique e Baixe o PDF”>Clique aqui para Baixar o PDF</a>

Imagem
![aqui deveria aparecer um icone de pessoa](http://www.uia.com/pessoa_icon.png “Pessoa”)

Resultado: <img src=”http://www.uia.com/pessoa_icon.png” alt=”aqui deveria aparecer um icone de pessoa” title=”Pessoa” />

Listas não ordenadas
* item 1
* item 2
Ou
+ item 1
+ item 2
Ou
- item 1
- item 2

Resultado:
<ul>
<li>item 1</li>
<li>item 2</li>
</ul>

Listas ordenadas
1. item 1
2. item 2

Resultado:
<ol>
<li>item 1</li>
<li>item 2</li>
</ol>

Mais informações e formatações leia a documentação http://daringfireball.net/projects/markdown/syntax

Biblioteca PHP para fazer parser de arquivos com formatação Markdown: http://michelf.com/projects/php-markdown/

Existem bibliotecas para outras linguagens: http://pt.wikipedia.org/wiki/Markdown

Projetos no Github – Backup-PHP e Levenshtein-Distance

Salve,

Já faz um tempo que postei algo aqui, venho agora divulgar mais dois projetos que criei e coloquei no Github e estão licenciados sob a GPL v3.

Backup-PHP é um conjunto de classes que Salva e Ler um arquivo com dados serializados comprimidos com gzip ( os dados estão comprimidos e não o arquivo. ). Tem também integração com o ZipArchive para compressão de diretório e descompressão de arquivo .zip. Tem também um componente para CakePHP que integra o projeto Backup-PHP.

Levenshtein-Distance é uma classe estática onde se passa duas strings e retorna em porcentagem o grau de similaridade entre elas. Usa a função levenshtein() nativa do PHP mas realiza um cálculo para saber a o grau de similaridade.

Mais novidades e projetos, posto aqui de novo!

Salve,

Software: DataVision
Site: http://datavision.sourceforge.net/
Versão: 1.2.0

Que ‘diaxo’ é esse DataVision?

Segue texto do próprio site do software:

DataVision is an Open Source reporting tool similar to Crystal Reports. Reports can be designed using a drag-and-drop GUI. They may be run, viewed, and printed from the application or exported as HTML, XML, PDF, Excel, LaTeX2e, DocBook, or tab- or comma-delimited text files. The output files produced by LaTeX2e and DocBook can in turn be used to produce PDF, text, HTML, PostScript, and more. ( http://datavision.sourceforge.net/index.html#intro )

Simplesmente é uma ferramenta legalzinha para criar relatórios. Achei super fácil e rápido de aprender a usar. Claro que fiz o básico.

Instalando o ‘danado’ do DataVision

* É necessário ter o Java instalado, eu uso o sun-java. Não recomendo o open jvm.

  1. Entre no site e clique no link Download ( ou aqui ), clique no botão e faça o download.
  2. Descompacte o arquivo, entre na pasta criada ( ou tar -zxvf datavision-1.2.0.tar.gz )
  3. Entre na pasta do DataVision ( ou cd datavision-1.2.0/ )
  4. Coloque o datavision.sh para ser um executável ( ou chmod a+x datavision.sh )
  5. Execute o bicho clicando 2x no arquivo datavision.sh ( ou ./datavision.sh )

Usando MySQL como Data Source

* É preciso ter o driver jdbc para o banco dentro da pasta datavision-1.2.0/lib/, para o MySQL baixe aqui o JDBC driver: http://www.mysql.com/downloads/connector/j/. Descompacte e copie o mysql-connector-java-5.1.12-bin.jar para a devida pasta datavision-1.2.0/lib/

Pode abrir o mysql.xml da pasta datavision-1.2.0/examples/ para ter um exemplo do preenchimento do ‘configurador’ para conectar no MySQL, segue meu modelo.

Nome da Classe do Driver: com.mysql.jdbc.Driver
Informação da Conexão: jdbc:mysql://localhost/meu_banco
Nome do Banco de Dados: meu_banco
Nome do Usuário: root
Senha: *******

Não ensinarei a usar agora, mas eu fiz um de teste. Próximo artigo eu mostrarei um exemplo.

Valeu!

Powered by WordPress | Theme: Motion by 85ideas.

Bad Behavior has blocked 12 access attempts in the last 7 days.