January 6, 2012
Programação
No Comments
Algum tempo atrás eu coloquei um repositório Git disponibilizado através do Apache2 + WebDAV utilizando a seguinte configuração do apache:
<Location /repositorio.git>
Dav on
AuthType Basic
AuthName "Repositorio Git"
AuthUserFile /etc/apache2/repositorio.passwd
Require valid-user
</Location>
Após algum tempo comecei a receber erros ao tentar fazer o push de muitas alterações. Se eu tentasse realizar vários push’s com erro, uma hora o push funcionava.
Fui procurar outras formas de disponibilizar o repositório Git no Apache2 e encontrei a forma descrita abaixo:
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Esta configuração até agora não deu problema.
Mais detalhes dessa configuração podem ser encontrados no help do comando git-http-backend:
http://manpages.ubuntu.com/manpages/lucid/man1/git-http-backend.1.html
January 4, 2012
Programação
No Comments
O seguinte texto foi traduzido e adaptado de:
http://jungels.net/articles/diff-patch-ten-minutes.html
Primeira situação: você está tentando compilar um pacote à partir do código fonte e descobre que alguém já o modificou para compilar na sua plataforma. Ele disponibilizou o seu trabalho como um “patch”, mas você não tem certeza de como utilizá-lo. Para utilizá-lo você deve aplicar o patch no código fonte original com uma ferramenta de linha de comando chamada patch.
Segunda situação: você fez o download do código fonte de um pacote open source e depois de algumas alterações você conseguiu compilá-lo na sua plataforma. Você gostaria de disponibilizar o seu trabalho para outros programadores, ou para os autores do pacote, sem distribuir todo o pacote modificado. Nesta situação você deve criar um patch, e a ferramenta necessária é a diff.
Este é um guia rápido para gerar ou utilizar patches que irá ajudá-lo nestas situações, mostrando como usar as ferramentas nas situações mais comuns.
Aplicando patches com patch
Para aplicar um patch em um arquivo, vá ao diretório onde o arquivo está e chame o comando patch:
patch < foo.patch
O comando acima assume que o patch está distribuído no formato unificado, que identifica o arquivo no qual patch deve ser aplicado. Se não estiver no formato unificado, você pode especificar o arquivo na linha de comando:
patch foo.txt < bar.patch
A aplicação de patches em um diretório (caso mais comum) é similar, mas você deve setar um "p level". Isto significa que dentro dos arquivos de patches, os arquivos são identificados por caminhos que possam ser diferentes de quando o patch foi criado. O "p level" faz com que o patch ignore partes do caminho do arquivo para que seja possível identificar os arquivos corretamente. Geralmente um "p level" de 1 irá funcionar, então utilize:
patch -p1 < baz.patch
Você deve mudar para o diretório raiz do código fonte antes de executar este comando. Se o "p level" utilizado não identificar corretamente os arquivos, procure nomes de arquivos no patch. Se você ver um nome como:
/users/stephen/package/src/net/http.c
E você estiver trabalhando em um diretório que contenha net/http.c, use:
patch -p5 < baz.patch
Em geral, conte quantos separadores de diretório (/) você precisa remover à partir do começo do caminho, até que o restante seja um caminho que exista no diretório atual. O valor encontrado será o "p level" que deve ser utilizado.
Para remover um patch, use a flag -R:
patch -p5 -R < baz.patch
Criando patches com diff
Utilizar a ferramenta diff é simples quer você esteja trabalhando com um arquivo ou com diretórios. Para criar um patch à partir de um arquivo, use:
diff -u original.c new.c > original.patch
Para criar um patch de um diretório inteiro, faça uma cópia do diretório:
cp -R original new
Faça as alterações necessárias no diretório new/. E então cria o patch com o comando:
diff -rupN original/ new/ > original.patch
Isto é tudo o que você precisa saber para começar a utilizar as ferramentas diff e patch. Para mais informações utilize:
man diff
man patch
October 16, 2011
Programas
1 Comment
Instalei o Mac OS X Snow Leopard em uma VM esses dias e tive que alterar o teclado para o padrão ABNT2. Depois de alguma pesquisa encontrei o seguinte site http://www.appunix.com.br/howto/mac-os/teclado-abnt2-on-mac-os-x-hackintosh-snow-leopad/ que descreve como fazer o procedimento manual e, também fornece um arquivo .pkg para instalar as configurações do teclado ABNT2.
February 2, 2011
Linux, Ubuntu
No Comments
Essa semana atualizei o ubuntu que estava na minha máquina da versão 8.04 até a 10.10.
Para fazer esse upgrade tive que atualizar versão por versão, nada que fosse muito difícil já que o programa de atualização faz tudo automaticamente.
Ao tentar migrar da versão 10.04 para a versão 10.10 apareceu o seguinte erro:
Could not determine the upgrade
An unresolvable problem occurred while calculating the upgrade:
E:Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
This can be caused by:
* Upgrading to a pre-release version of Ubuntu
* Running the current pre-release version of Ubuntu
* Unofficial software packages not provided by Ubuntu
Após algumas pesquisas na internet a solução foi remover o pacote xserver-xorg-video-nouveau através do comando:
apt-get --purge remove xserver-xorg-video-nouveau
Fontes:
http://ubuntuforums.org/showthread.php?t=1664249
https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/614993
January 27, 2011
Java EE, Programação
5 Comments
Ao se colocar o JSF 2.0 no Weblogic 10.3.0.0, os EJB’s não são injetados nos manageds beans do JSF através da anotação @EJB.
Para corrigir esse problema, basta utilizar a classe abaixo:
import java.lang.reflect.Field;
import java.util.*;
import javax.ejb.EJB;
import javax.el.*;
import javax.naming.NamingException;
import com.sun.faces.el.ManagedBeanELResolver;
public class VariableResolver extends CompositeELResolver {
private final Map, List> ejbFields;
public VariableResolver() {
this.ejbFields = new HashMap, List>();
add(new ManagedBeanELResolver());
}
private void preencherEjbFields(List fields, Class clazz, Set> visitados) {
if (clazz != null && !visitados.contains(clazz)) {
visitados.add(clazz);
for (Field field : clazz.getDeclaredFields()) {
EJB ejb = field.getAnnotation(EJB.class);
if (ejb != null) {
field.setAccessible(true);
fields.add(new EJBField(field, ejb.mappedName(), field.getType()));
}
}
preencherEjbFields(fields, clazz.getSuperclass(), visitados);
for (Class i : clazz.getInterfaces()) {
preencherEjbFields(fields, i, visitados);
}
}
}
private List getEjbFields(Object obj) {
List fields = ejbFields.get(obj.getClass());
if (fields == null) {
fields = new ArrayList();
Set> visitados = new HashSet>();
preencherEjbFields(fields, obj.getClass(), visitados);
synchronized (ejbFields) {
ejbFields.put(obj.getClass(), fields);
}
}
return fields;
}
private void processarEjbs(Object obj) throws IllegalAccessException, ClassCastException, NamingException, IllegalArgumentException {
for (EJBField field : getEjbFields(obj)) {
if (field.getField().get(obj) == null) {
Object ejb = ServiceLocator.lookup(field.getType(), field.getMappedName());
field.getField().set(obj, ejb);
}
}
}
@Override
public Object getValue(ELContext arg0, Object arg1, Object arg2) {
try {
Object obj = super.getValue(arg0, arg1, arg2);
if (obj != null) {
processarEjbs(obj);
}
return obj;
} catch (IllegalArgumentException ex) {
throw new ELException(ex.getMessage(), ex);
} catch (IllegalAccessException ex) {
throw new ELException(ex.getMessage(), ex);
} catch (NamingException ex) {
throw new ELException(ex.getMessage(), ex);
}
}
private class EJBField {
private Field field;
private String mappedName;
private Class type;
public EJBField(Field field, String mappedName, Class type) {
this.field = field;
this.mappedName = mappedName;
this.type = type;
}
public Field getField() {
return field;
}
public String getMappedName() {
return mappedName;
}
public Class getType() {
return type;
}
}
}
E declarar o el-resolver no faces-config.xml:
<faces-config>
<application>
<el-resolver>VariableResolver</el-resolver>
</application>
</faces-config>
January 27, 2011
Java, Java EE, Programação
No Comments
Ao tentar efetuar o deploy de uma aplicação com JPA (implementação: Hibernate), ocorre o seguinte erro:
org.springframework.orm.hibernate3.HibernateQueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]; nested exception is org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]
Caused by: org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]
at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:57)
at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340)
at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:31)
at antlr.CharScanner.<init>(CharScanner.java:51)
at antlr.CharScanner.<init>(CharScanner.java:60)
at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:56)
at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:53)
at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:50)
at org.hibernate.hql.ast.HqlLexer.<init>(HqlLexer.java:26)
at org.hibernate.hql.ast.HqlParser.getInstance(HqlParser.java:44)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:242)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:837)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:367)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:835)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:827)
at db.ProductManagerDaoHB.getProductList(ProductManagerDaoHB.java:14)
at bus.ProductManager.getProducts(ProductManager.java:25)
at web.controllers.SpringappController.handleRequest(SpringappController.java:33)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:819)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:754)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:399)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:354)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
Para resolver este problema basta alterar o persistence.xml e adicionar a seguinte linha:
<property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/>
Fonte: http://forum.springsource.org/showthread.php?t=36860
January 27, 2011
Java, Programação
No Comments
Esses dias precisei fazer alguns testes que verificavam se existia uma propriedade de sistema para tomar determinada ação.
Ao se passar a propriedade através da seguinte linha de comando:
mvn -Dminha.propriedade=valor test
Verifiquei que o teste nunca encontrava a propriedade passada através da chamada System.getProperty("minha.propriedade").
Dois jeitos fáceis para fazer a passagem de propriedade corretamente para os testes são:
mvn -Dminha.propriedade=valor test -DforkMode=never
ou
mvn test -DargLine="-Dminha.propriedade=valor"
Particularmente eu prefiro o segundo jeito.
Fonte: http://stackoverflow.com/questions/824019/maven-2-1-0-not-passing-on-system-properties-to-java-virtual-machine
January 27, 2011
Oracle, Programação
No Comments
Primeiramente vamos encontrar o nome do dblink onde a tabela está realmente localizada. Isto é feito através do comando:
SELECT DB_LINK
FROM ALL_SYNONYMS
WHERE SYNONYM_NAME = 'MINHA_TABELA'
Após isto basta obter as informações da tabela com os seguintes selects:
SELECT *
FROM ALL_TABLES@MEU_DB_LINK
WHERE TABLE_NAME = 'MINHA_TABELA'
SELECT *
FROM USER_TAB_COLUMNS@MEU_DB_LINK
WHERE TABLE_NAME = 'MINHA_TABELA'
Fonte: http://forums.oracle.com/forums/thread.jspa?messageID=4411870&tstart=0
September 28, 2010
Winamp
No Comments
Hoje fui executar um vídeo mp4 dentro do winamp, mas o mesmo não funcionou.
Após algumas pesquisas no Google achei o link http://forum.doom9.org/archive/index.php/t-90134.html que fala que é só instalar os codec’s xvid, 3ivx, DIVX anti-freeze e WM9codecs e ir no Winamp em Preferences – Plug-ins – Input – Nullsoft Directshow Decoder e adicionar a extensão MP4 à lista.
No meu caso acho que não tenho esses codec’s instalados, apenas o ffdshow
August 23, 2010
Taekwondo, Vida
2 Comments
Após quase 10 meses que sofri a lesão, voltei a fazer aulas de taekwondo. Hoje fiz uma aula bem tranquila, já que esta semana vai ter exame de faixa (e novamente eu irei perder o exame!).
Acabei fazendo um pouco de corrida, polichinelo, abdominais e chutes na raquete. Não senti dor ou qualquer coisa diferente do normal.
Só não fiz duas coisas: flexão de braço e troca de base. A primeira porque é necessário ficar na ponta do pé e a segunda porque foi em uma mudança de base que eu rompi o tendão. Acho que o problema maior é adquirir confiança para fazer esses movimentos mais forçados.
Daqui 2 / 3 meses vou retornar ao médico só para ele verificar como está o tendão, mas parece que agora realmente está tudo bem!
« Previous Entries