terça-feira, 18 de outubro de 2011

Cron e Crontrab - agendando tarefas no Unix / Linux

Na empresa que trabalho atualmente, temos um software que realiza diversas interações com softwares escritos em C/C++, Shell, Python, Perl e alguns softwares do Linux.
Hoje tive que realizar uma interação entre JAVA e Cron, vou explicar um pouco sobre este que achei muito simples e interessante.

Oque é Cron e para que serve?
É um software de agendamento de rotinas para a plataforma Unix.
Imagine que você tem um determinado diretório que precisa ter seu conteúdo movido para outro diretório e voltar ao seu conteúdo padrão de tempos em tempos,
ou um exemplo mais claro, você precisa gerar um backup de sua pasta local para a pasta de rede todo dia no final do espediente por segurança.
Utilizando o serviço de agendamento do Cron você pode agendar qualquer tipo de tarefa seja ela uma tarefa de manutenção, segurança ou meramente administrativa.
Você pode executar comandos em shell, python, perl, etc ...

Agora vamos ver o Cron em funcionamento:
O primeiro passo é editar o arquivo de configuração do Cron que se chama Crontab.

O arquivo deve ser preenchido da seguinte maneira:
*     *      *     *     *     Comando_para_executar.sh
┬   ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    │
│    │    │    │    └───── day of week (0 - 7) (Sunday=0 or 7)
│    │    │    └────────── month (1 - 12)
│    │    └─────────────── day of month (1 - 31)
│    └──────────────────── hour (0 - 23)
└───────────────────────── min (0 - 59)

Um exemplo bem simples:
* * * 18 30 /home/lucasluiz/bin/backup.sh

Você deve preencher os parametros com os seguintes valores:
Minutos: de 0 a 59;
Horas: 0 a 23;
Dias do mês: 0 a 31;
Mês: de 1 a 12;
Dias da semana: de 0 a 7;
Comando: comando, tarefa, script, processo que deve ser executado em seu Job.

Este foi um post bem simples para repassar a experiência de hoje, até mais!

Referências:

quinta-feira, 13 de outubro de 2011

PHP + Mac OSX, Problemas simples pedem soluções simples

Enquanto fazia alguns testes no meu apache. Me deparei com o seguinte erro:
"Error: 2002 - No such file or directory"

Não é muito dificil lembrar o nome de um arquivo importante para qualquer comunicação que seja com MySQL "mysql.sock".
Um problema simples de resolver, vamos lá:

1 passo: Encontrar o arquivo "mysql.sock"
sudo find / -name mysql.sock
/private/tmp/mysql.sock

2 passo: Encontrar o arquivo "php.ini"
sudo find / -name  php.ini
/private/etc/php.ini

3 passo: Editar o arquivo "php.ini" e alterar o parametro do destido "mysql.sock"
sudo vi /private/etc/php.ini

4 passo: Altere o valor da linha
"mysql.default_socket = /var/mysql/mysql.sock"
por
"mysql.default_socket = /private/tmp/mysql.sock"

Agora é só reiniciar o apache e ver o resultado, até a próxima!

terça-feira, 27 de setembro de 2011

Spring Framework e UTF-8

Se não estou enganado, em cinco anos trabalhando como analista de sistemas, foi a primeira vez  que me deparei com um problema de encodificação "UTF-8".
Tentei resolver o problema de diversas maneiras:


O projeto esta em Struts 1.3.8, o primeiro passo foi verificar a resposta da minha requisição.
request.getParameter("param")
new String((request.getParameter("param").getBytes(), "UTF-8")
new String((request.getParameter("param").getBytes(), "ISO-8859-1")
E confirmei minhas suspeitas, a String chegava na action do struts com os valores errados e não achei maneiras de converte-los.


Verifiquei as JSP's e as definições de encode estavam corretas:
<%@page contentType="text/html" pageEncoding="UTF-8"%>


Em seguida, verifiquei um dos arquivos de configuração do Tomcat o "server.xml":
<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" URIEncoding="UTF-8" />


E pra variar um pouco, encontrei a solução no site do GUJ: implementar um filtro do Spring.
Após adicionar algumas linhas ao "pom.xml" e ao "web.xml":


"pom.xml"
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>


"web.xml"
<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


Testei em diversas rotinas do aplicativo e todos os problemas com encodificação e acentos estavam resolvidos.

quinta-feira, 1 de setembro de 2011

Habilitando PHP no Mac OSX


Vamos lá, não há muito oque falar neste post tentei abordar tudo de uma forma simples.


No terminal digite: 
'sudo vi /private/etc/apache2/httpd.conf'


Descomente a linha:
LoadModule php5_module      libexec/apache2/libphp5.so


Entre no diretório onde esta o php.ini.default e faça uma cópia dele para definir os parâmetros do php5
caso contrario as configurações padrão serão aplicadas automaticamente:
'cd /private/etc'
'sudo cp php.ini.default php.ini'


Edite o arquivo 'php.ini' na linha 305 procure a palavra 'error_reporting' altere para: 
'error_reporting = E_ALL'


Importante: Esta alteração vai impedir que alguns erros importantes sejam omitidos.


Agora a parte gráfica que deixa tudo mais fácil, rs :)
System Preferences > Sharing > Internet & Network > Web Sharing


Na tela acima você já pode visualizar os diretórios tanto via http para serem acessados pelo navegador e onde salvar os arquivos físicos.


Qualquer dúvida estou ai ...


http://foundationphp.com/tutorials/php_leopard.php

segunda-feira, 29 de agosto de 2011

Sonatype Nexus - Configuração e Instalação (Maven)

Para quem não conhece o Maven:
Um dos principais problemas do desenvolvimento java é a gestão de suas dependências, sejam elas WebServices, Jars, etc ...
Maven foi implementado justamente ai para corrigir isso, gerencia suas dependencias e builds, através de um arquivo centralizado "pom.xml".
Mas isto é assunto para outro post especifico sobre Maven.
Agora vamos lá ....


Primeiro passo é fazer download do Nexus no site da Sonatype e fazer deploy em um WebContainer de sua escolha.
http://nexus.sonatype.org/downloads/nexus-webapp-1.9.2.2.war



Eu particularmente implementei em um Tomcat :)
Logo após é simples acessar http://localhost:8080/nexus-webapp-1.9.2.2/ e pronto ... esta funcionando.


Por favor altere a senha padrão, usuario e senha padrão são:
usuario: admin
senha: admin123


Agora chegou a parte dificil deste tutorial facil, como configurar meus aplicativos maven para utilizar o meu  proxy?








Qualquer dúvida sobre a configuração, e implementação é só mandar email ou comentar 
aqui no post.
Até a próxima ...


http://maven.apache.org/
http://sonatype.org
http://nexus.sonatype.org/index.html

sexta-feira, 26 de agosto de 2011

Podcasts extremamente indicados


Este post vai ser breve, gostaria de deixar uma relação de Podcasts que eu acompanho sobre TI.
Comecei a ouvir Podcast pra passar o tempo no busão, metro, etc ... aquele trânsito de SP que todos nós amamos, hoje só falta mandar email ou ligar pro pessoal perguntando quando sai o próximo, vale citar que todos os podcasts abaixo tem ITunes :)

GuanaCast
Extremamente inreverente, aborda temas extremamente interessantes sobre assuntos técnicos, carreira, Mercado convidados interessantissimos.
Os pessoal tem uma ótima didatica tanto pra quem esta chegando na area de TI, quanto pra quem tem experiencia.
SEO, CMS, Twitter, Software Livre, Google, Links Patrocinados.

Grok Podcast
Conteúdo técnicamente muito rico e aborda uns temas muito interessantes, curiosidades e afins.
Rails on Rails, Python, Django, Node.js, *Erlang, IOS, Android
 
Databasecast
Aborda muitos temas especificos de banco de dados com coisas que são usadas no dia-a-dia.
SQL Server, Oracle, MySQL, PostgreSQL, NoSQL, DB2, Informix, Sybase.

sábado, 20 de agosto de 2011

Open Graph Protocol - Compartilhando conteúdo


Finalmente alguem tentou colocar ordem na casa e criar um padrão, o Facebook resolveu colocar ordem nas redes sociais e criou um padrão para compartilhamento de conteudo e este padrão se chama Open Graph Protocol.
Agora você pode criar objetos mais ricos para compartilhamento sejam eles conteudos, imagens, geolocalização etc...
Estas marcações podem ser lidas com facilidade e dar mais riqueza e eficiência no momento de compartilhar seus links.








Exemplo:
<head>
<meta property="og:title" content="Compartilhando conhecimento" />
<meta property="og:description" content="Blog sobre técnologia e desenvolvimento de software" />
<meta property="og:type" content="blog" />
<meta property="og:url" content="http://lucas-luiz.blogspot.com/" />
<meta property="og:image" content="https://www.blogger.com/img/start/icon.png" />
</head>


Agora fique a vontade para implementar isso em seus websites e postar aqui se ficou contente com resultado.


Bibliografia:
http://ogp.me/

sexta-feira, 19 de agosto de 2011

Mozilla liberou Firefox 7 Beta 1

Meu navegador padrão é o Safari principalmente pelo fato de ser um usuário de Mac OSX, mas usei por muito tempo o Firefox pela qualidade do navegador, add-ons e tudo mais.


Fiquei muito feliz em ver esta noticia aqui falando que a próxima versão teve melhorias incríveis na performance do navegador, era um dos meus maiores problemas =/


Opniões a parte melhoraram o Firefox Sync, suporte da Azure Direct2D for Canvas para renderiação de efeitos baseados em Canvas no HTML5.

quinta-feira, 18 de agosto de 2011

Implementando TagFiles JAVA

Olá a todos, hoje vamos falar sobre TagFiles do JAVA.
Como todo desenvolvedor J2EE sabe quase todos os frameworks web usam as maravilhosas e magicas TagLibs.


Vamos começar com sua definição para evitar erros na implementação: 
(como já dizia um velho amigo "primeiro entenda o conceito" por Franklin Ronald)
Tag Files fazem parte da especificação JSP 2.0 e são arquivos que servem para encapsular blocos de código evitando código repetido, tem suporte a EL e JSTL,
assim você pode evitar aquele código cheio de <jsp:include> criando componentes do modo correto, vou exemplificar criando um pequeno projeto.


Dentro do diretório '/WEB-INF/tags/' crie um arquivo com a extensão .tag

















Dentro deste arquivo.tag você tem os seguintes ponto chave:
1. Define a descrição, codificação entre outras propriedades do componente.
2. Atributos de entrada, estas são as propriedades que trafegam entre o jsp e o componente.
3. Eu comentei logo acima que tag files suporta EL, mas não citei que o mesmo utiliza EL em sua estrutura
   os atributos definidos podem ser recuperados utilizando EL.
4. Muitas vezes é necessário ter atributos mais consistentes e mais complexos, 
   para estes casos eu utilizo fragmentos jsp
   no caso utilizei porque no atributo conteúdo pode existir código html, javascript, etc ...
















Na JSP que irá utilizar nosso componente temos a seguinte estrutura:
1. A propriedade prefix como o nome já diz será o prefixo que sua taglib utilizará neste jsp,
   a propriedade tagdir diz onde é o diretório que contem seus componentes *.tag,
   no momento da utilização do componente sua tag é <prefix:nomedoarquivo.tag>.
2. Sou programador e não tenho noção de design, CSS pra deixar bunitinho :)
3. Utilizando nosso componente, preenchendo somente o atributo titulo.
4. Como já tinha dito, esta ai nosso atributo definido como fragmento para informações mais completas.
5. Fechando a tag do nosso componente.


















Código HTML utilizando nosso componente:
































Resultado do nosso exemplo:






















Qualquer dúvida sobre o tema é só deixar um comentário, e fique a vontade para pedir outra matéria sobre Desenvolvimento de Software, Banco de dados,
Administração Linux*, etc ...


Obrigado



http://www.oracle.com/technetwork/java/javase/documentation/index.html
http://java.sun.com/j2ee/overview.html
http://www.oracle.com/technetwork/java/javaee/jsp/index.html
http://download.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html
http://download.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html
http://www.oracle.com/technetwork/java/index-jsp-135995.html

Servidor HTTP Python

Resolvi publicar o código do servidor sem o algoritmo de busca que estou desenvolvendo, afinal eu não sou um cara tão bonzinho assim. A unica diferença dos outros exemplos que existem por ai é que eu comentei do meu jeito,  achei mais facil de entender assim, qualquer coisa que não entender é só postar que eu explico :)


Código:

quarta-feira, 17 de agosto de 2011

Aprendendo Python

Iae galera, primeiro quer deixar claro que este projeto que vou comenta é um projeto particular, segundo eu não estou tentando reinventar a roda.
Com fins totalmente didáticos estou criando um servidor de pesquisa baseado no protocolo 'HTTP' sei que existem 'N' servidores Web para fazer isto como Apache, Tomcat, Glassfish, WEBrick dentre os quais eu conheço as linguagens suportadas por ele PHP, JAVA, Ruby. Mas é ai que vem a minha motivação 'apreender' queria apreender mais sobre a linguagem de programação Python para adicionar ao meu know-how.

Atualmente trabalho com JAVA e estou muito satisfeito com a linguagem, mas tenho uma paixão por linguagens dinamicas como Python, Rails, etc ...

E como minha meta é criar um servidor de pesquiza e como suas bases de conhecimento vão ser dados em JSON, com muitas estruturas diferentes e não normalizadas implorando para gerar uma base de conhecimento sólida.

Vamos lá, para isto utilizei as seguintes referências:

http://www.google.com.br
http://docs.python.org/reference/
http://imasters.com.br/artigo/18125/py/criando-um-servidor-http-web-com-python
http://docs.python.org/library/basehttpserver.html?highlight=basehttprequesthandler#BaseHTTPServer.BaseHTTPRequestHandler