A injeção via @EJB só funciona em classes gerenciadas pelo container EJB, em outros casos é preciso fazer lookup:
Tive esse problema pois no projeto que estou agora fiz uma camada de delegates. A parte de telas do meu projeto não acessa diretamente meus serviços.. acessa um delegate que esse sim acessa meus serviços.
Como meu delegate não é uma classe gerenciada pelo container EJB tive que fazer lookup:
/////////////////
public class AaaDelegate {
private AaaService aaaService;
public AaaDelegate() {
this.aaaService = (AaaService) this.lookup(AaaService.JNDI);
}
public Object lookup(String jndi) {
try {
Context context = new InitialContext();
return context.lookup(jndi);
} catch (NamingException e) {
e.printStackTrace();
}
return null;
}
///////////////
@Local
public interface AaaService {
public static String JNDI = "aaa.AaaService";
}
/////////////
@Stateless
@LocalBinding(jndiBinding = AaaService.JNDI)
public class AaaServiceImpl implements AaaService {
}
////////////
Vaaleu!
quarta-feira, 22 de dezembro de 2010
Referência Cíclica EJB
Oi, hoje tive um problema de referência cíclica (cycle services dependiency ou circular references ou ainda cyclic reference) com EJBs..
Na classe AaaServiceBean eu tinha isso:
@EJB
private BbbService bbbService;
E na classe BbbServiceBean eu tinha:
@EJB
AaaService aaaService;
Isso causava um erro de referência cíclica, pois Aaa tinha um Bbb e Bbb tinha um Aaa. Para resolver isso adicionei a annotation org.jboss.ejb3.annotation.IgnoreDependency em uma das classes:
A classe AaaServiceBean ficou assim:
@EJB
@IgnoreDependency
private BbbService bbbService;
Pronto! Problema resolvido. O que esse IgnoreDependency faz exatamente eu não sei, não encontrei nenhuma documentação interessante, mas, funcionou.
Vaaleu, abraço!
Na classe AaaServiceBean eu tinha isso:
@EJB
private BbbService bbbService;
E na classe BbbServiceBean eu tinha:
@EJB
AaaService aaaService;
Isso causava um erro de referência cíclica, pois Aaa tinha um Bbb e Bbb tinha um Aaa. Para resolver isso adicionei a annotation org.jboss.ejb3.annotation.IgnoreDependency em uma das classes:
A classe AaaServiceBean ficou assim:
@EJB
@IgnoreDependency
private BbbService bbbService;
Pronto! Problema resolvido. O que esse IgnoreDependency faz exatamente eu não sei, não encontrei nenhuma documentação interessante, mas, funcionou.
Vaaleu, abraço!
UIInstructions cannot be cast to AbstractTogglePanelItem
Hoje me aconteceu o seguinte erro num projeto com jsf2 e richfaces4:
com.sun.faces.facelets.compiler.UIInstructions cannot be cast to org.richfaces.component.AbstractTogglePanelItem
No meu caso descobri que o que causava isso eram comentários dentro do tabPanel.
NÃO FUNCIONA:
<rich:tabPanel>
<rich:tab header="aaaaa">
<h:outputText value="aaaaaaaaaa"></h:outputText>
</rich:tab>
<!— esse comentario gerou o erro -->
<rich:tab header="bbbbb">
<h:outputText value="bbbbbbbbbb"></h:outputText>
</rich:tab>
</rich:tabPanel>
FUNCIONA:
<rich:tabPanel>
<rich:tab header="aaaaa">
<h:outputText value="aaaaaaaaaa"></h:outputText>
</rich:tab>
<rich:tab header="bbbbb">
<h:outputText value="bbbbbbbbbb"></h:outputText>
</rich:tab>
</rich:tabPanel>
Log com mais detalhes:
10:36:35,449 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] Error Rendering View[/resources/user/UserForm.xhtml]: java.lang.ClassCastException: com.sun.faces.facelets.compiler.UIInstructions cannot be cast to org.richfaces.component.AbstractTogglePanelItem
at org.richfaces.renderkit.html.TogglePanelRenderer.getChildrenScriptObjects(TogglePanelRenderer.java:178) [:4.0.0-SNAPSHOT]
[…]
10:36:35,493 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/l8-web].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: java.lang.ClassCastException: com.sun.faces.facelets.compiler.UIInstructions cannot be cast to org.richfaces.component.AbstractTogglePanelItem
at org.richfaces.renderkit.html.TogglePanelRenderer.getChildrenScriptObjects(TogglePanelRenderer.java:178) [:4.0.0-SNAPSHOT]
at org.richfaces.renderkit.html.TogglePanelRenderer.getScriptObjectOptions(TogglePanelRenderer.java:147) [:4.0.0-SNAPSHOT]
[…]
com.sun.faces.facelets.compiler.UIInstructions cannot be cast to org.richfaces.component.AbstractTogglePanelItem
No meu caso descobri que o que causava isso eram comentários dentro do tabPanel.
NÃO FUNCIONA:
<rich:tabPanel>
<rich:tab header="aaaaa">
<h:outputText value="aaaaaaaaaa"></h:outputText>
</rich:tab>
<!— esse comentario gerou o erro -->
<rich:tab header="bbbbb">
<h:outputText value="bbbbbbbbbb"></h:outputText>
</rich:tab>
</rich:tabPanel>
FUNCIONA:
<rich:tabPanel>
<rich:tab header="aaaaa">
<h:outputText value="aaaaaaaaaa"></h:outputText>
</rich:tab>
<rich:tab header="bbbbb">
<h:outputText value="bbbbbbbbbb"></h:outputText>
</rich:tab>
</rich:tabPanel>
Log com mais detalhes:
10:36:35,449 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] Error Rendering View[/resources/user/UserForm.xhtml]: java.lang.ClassCastException: com.sun.faces.facelets.compiler.UIInstructions cannot be cast to org.richfaces.component.AbstractTogglePanelItem
at org.richfaces.renderkit.html.TogglePanelRenderer.getChildrenScriptObjects(TogglePanelRenderer.java:178) [:4.0.0-SNAPSHOT]
[…]
10:36:35,493 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/l8-web].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: java.lang.ClassCastException: com.sun.faces.facelets.compiler.UIInstructions cannot be cast to org.richfaces.component.AbstractTogglePanelItem
at org.richfaces.renderkit.html.TogglePanelRenderer.getChildrenScriptObjects(TogglePanelRenderer.java:178) [:4.0.0-SNAPSHOT]
at org.richfaces.renderkit.html.TogglePanelRenderer.getScriptObjectOptions(TogglePanelRenderer.java:147) [:4.0.0-SNAPSHOT]
[…]
Exportar dados mysql
Olá,
No terminal de comando basta executar a seguinte linha de comando:
mysqldump -u root -p -r c:\dados.sql nomeDoBanco
altere nomeDoBanco pelo nome do banco
altere root pelo nome do usuário
altere c:\dados.sql pelo diretório/arquivo.sql onde os dados serão gravados
Depois será solicitada a senha e então os dados serão exportados para o arquivo indicado.
Vaaleu!
No terminal de comando basta executar a seguinte linha de comando:
mysqldump -u root -p -r c:\dados.sql nomeDoBanco
altere nomeDoBanco pelo nome do banco
altere root pelo nome do usuário
altere c:\dados.sql pelo diretório/arquivo.sql onde os dados serão gravados
Depois será solicitada a senha e então os dados serão exportados para o arquivo indicado.
Vaaleu!
Syntax error in EL - & E comercial - JSF
Pra usar & (E comercial) em JSF num bloco como
#{var1 == 1 && var2 == 2}
você pode usar ‘and’, assim:
#{var1 == 1 and var2 == 2}
além de 'and' você pode usar 'or' ou 'eq'
mais informações em:
http://developers.sun.com/docs/jscreator/help/jsp-jsfel/jsf_expression_language_intro.html
Vaaaleu!
#{var1 == 1 && var2 == 2}
você pode usar ‘and’, assim:
#{var1 == 1 and var2 == 2}
além de 'and' você pode usar 'or' ou 'eq'
mais informações em:
http://developers.sun.com/docs/jscreator/help/jsp-jsfel/jsf_expression_language_intro.html
Vaaaleu!
.properties ignorado
Olá,
Ao gerar meu war pelo eclipse, os arquivos .properties estavam sendo ignorados(não iam para dentro do war)
O problema foi resolvido da seguinte forma:
Fui em nas propriedades do projeto (botão direito, properties) em ‘Java Build Path’, aba ‘Sources’.
Cliquei em ‘included’, cliquei no botão ‘edit’
Cliquei em “Add’, digitei ‘**/*.properties’ (sem as aspas) e cliquei em ‘OK’.
Pronto, ao gerar o war novamento os arquivos .properties não foram mais ignorados.
Isso pode acontecer com qualquer tipo de arquivo (.jks) por exemplo.
Se quiser fazer isso via maven basta adicionar ao seu pom.xml o trecho abaixo e dar um mvn eclipse:eclipse.
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**</include>
</includes>
</resource>
</resources>
</build>
É isso aí. Valeu!
Ao gerar meu war pelo eclipse, os arquivos .properties estavam sendo ignorados(não iam para dentro do war)
O problema foi resolvido da seguinte forma:
Fui em nas propriedades do projeto (botão direito, properties) em ‘Java Build Path’, aba ‘Sources’.
Cliquei em ‘included’, cliquei no botão ‘edit’
Cliquei em “Add’, digitei ‘**/*.properties’ (sem as aspas) e cliquei em ‘OK’.
Pronto, ao gerar o war novamento os arquivos .properties não foram mais ignorados.
Isso pode acontecer com qualquer tipo de arquivo (.jks) por exemplo.
Se quiser fazer isso via maven basta adicionar ao seu pom.xml o trecho abaixo e dar um mvn eclipse:eclipse.
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**</include>
</includes>
</resource>
</resources>
</build>
É isso aí. Valeu!
datascrooler richfaces não funciona
Ao usar o datascrooler do richfaces ao apertar para ir para uma outra página nada acontecia, apenas no cabeçalho do browser aparecia “Erro na página”.
No meu caso o dataTable e o dataScrooler não estavam dentro de um form, ao colocar os dois componentes no mesmo form o problema foi resolvido.
No meu caso o dataTable e o dataScrooler não estavam dentro de um form, ao colocar os dois componentes no mesmo form o problema foi resolvido.
datascrooler richfaces ecss
Ao usar o datascrooler do richfaces saiu no log os seguintes warnings:
10:28:06,362 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo skinning.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
10:28:06,376 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo panel.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
10:28:06,386 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo datatable.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
10:28:06,394 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo datascroller.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
Para resolver adicionei o seguinte trecho no web.xml:
<mime-mapping>
<extension>ecss</extension>
<mime-type>text/css</mime-type>
</mime-mapping>
10:28:06,362 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo skinning.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
10:28:06,376 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo panel.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
10:28:06,386 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo datatable.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
10:28:06,394 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo datascroller.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
Para resolver adicionei o seguinte trecho no web.xml:
<mime-mapping>
<extension>ecss</extension>
<mime-type>text/css</mime-type>
</mime-mapping>
TypeMappingDelegate - No serializer found
Aconteceu o erro abaixo ao tentar acessar meu WebService:
No serializer found xxxxxx for class in registry org.apache.axis.encoding.TypeMappingDelegate
Para resolver tive que coloar as linhas abaixo
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
QName QNAME = new QName(
"http://www.w3.org/2001/XMLSchema", "string");
call.registerTypeMapping(String.class, QNAME,
new BeanSerializerFactory(String.class, QNAME),
new BeanDeserializerFactory(String.class, QNAME));
Onde está escrito string.. tem q ser colocado o que está no wsdl
valeu : )
No serializer found xxxxxx for class in registry org.apache.axis.encoding.TypeMappingDelegate
Para resolver tive que coloar as linhas abaixo
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
QName QNAME = new QName(
"http://www.w3.org/2001/XMLSchema", "string");
call.registerTypeMapping(String.class, QNAME,
new BeanSerializerFactory(String.class, QNAME),
new BeanDeserializerFactory(String.class, QNAME));
Onde está escrito string.. tem q ser colocado o que está no wsdl
valeu : )
tabelas MySQL letras maiúsculas
Para criar tabelas no MySQL com letras maiúsculas faça o seguinte:
Adicione no arquivo my.ini a seguinte linha:
lower_case_table_names=2
O arquivo my.ini está onde o MySQL foi instalado. Em uma máquina Windows pode estar em:
C:\Program Files\MySQL\MySQL Server 5.1
Depois disso, reinicie o service do MySQL, qualquer coisa reinicie a máquina.
Dessa forma você poderá criar tabelas com letras maiúsculas.
Valeeu!!
Adicione no arquivo my.ini a seguinte linha:
lower_case_table_names=2
O arquivo my.ini está onde o MySQL foi instalado. Em uma máquina Windows pode estar em:
C:\Program Files\MySQL\MySQL Server 5.1
Depois disso, reinicie o service do MySQL, qualquer coisa reinicie a máquina.
Dessa forma você poderá criar tabelas com letras maiúsculas.
Valeeu!!
Failed to register driver for: com.mysql.jdbc.Driver
Ao iniciar o JBoss aconteceu o erro:
Caused by: org.jboss.resource.JBossResourceException: Failed to register driver for: com.mysql.jdbc.Driver;
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from BaseClassLoader@1b64925
Para resolver coloquei o driver do MySQL em < Pasta do JBoss >/server/< contexto >/lib
Você pode baixar o driver em http://dev.mysql.com/downloads/connector/j/ depois descompacte e pegue o arquivo .jar, esse é o arquivo que você deve jogar em < Pasta do JBoss >/server/< contexto >/lib
; )
Caused by: org.jboss.resource.JBossResourceException: Failed to register driver for: com.mysql.jdbc.Driver;
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from BaseClassLoader@1b64925
Para resolver coloquei o driver do MySQL em < Pasta do JBoss >/server/< contexto >/lib
Você pode baixar o driver em http://dev.mysql.com/downloads/connector/j/ depois descompacte e pegue o arquivo .jar, esse é o arquivo que você deve jogar em < Pasta do JBoss >/server/< contexto >/lib
; )
HibernateException: 'hibernate.dialect'
Aconteceu comigo o erro:
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
Para resolver apenas coloquei o trecho abaixo dentro da tag persistence-unit do arquivo persistence.xml:
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<properties>
Isso foi para um banco MySQL, para outros bancos segue a lista:
Mais detalhes em: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html
É isso aí!
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
Para resolver apenas coloquei o trecho abaixo dentro da tag persistence-unit do arquivo persistence.xml:
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<properties>
Isso foi para um banco MySQL, para outros bancos segue a lista:
RDBMS Dialect
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i org.hibernate.dialect.Oracle9iDialect
Oracle 10g org.hibernate.dialect.Oracle10gDialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect
Mais detalhes em: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html
É isso aí!
persistence-unit.xml
O erro abaixo aconteceu comigo.. aconteceu pois o meu arquivo de persistência estava com o nome persistence-unit.xml, ao renomear para persistence.xml o problema parou de ocorrer.
18:23:55,912 ERROR [Ejb3Deployment] Exception while processing container metadata for EJB: TestServerBean in unit: test-ejb.jar
18:23:55,914 ERROR [AbstractKernelController] Error installing to Real: name=vfs:///C:/temp/test/jboss-6.0.0-M5/server/test-web/deploy/test-ee.ear state=PreReal mode=Manual requiredState=Real: org.jboss.deployers.spi.DeploymentException: Error deploying test-ejb.jar: Exception while processing container metadata for EJB: TestServerBean in unit: test-ejb.jar
at org.jboss.ejb3.deployers.Ejb3Deployer.deploy(Ejb3Deployer.java:189) [:6.0.0.20100911-M5]
[…]
Caused by: java.lang.IllegalArgumentException: Container jboss.j2ee:ear=test-ee.ear,jar=test-ejb.jar,name=TestServerBean,service=EJB3 failed to resolve persistence unit test
at org.jboss.injection.PersistenceUnitHandler.addPUDependency(PersistenceUnitHandler.java:135) [:1.5.1]
[…]
Caused by: java.lang.IllegalArgumentException: Can't find a persistence unit named 'test' in AbstractVFSDeploymentContext@22455058{vfs:///C:/temp/test/jboss-6.0.0-M5/server/test-web/deploy/test-ee.ear/test-ejb.jar/}
at org.jboss.jpa.resolvers.BasePersistenceUnitDependencyResolver.resolvePersistenceUnitSupplier(BasePersistenceUnitDependencyResolver.java:107) [:1.0.2-alpha-1]
18:23:55,912 ERROR [Ejb3Deployment] Exception while processing container metadata for EJB: TestServerBean in unit: test-ejb.jar
18:23:55,914 ERROR [AbstractKernelController] Error installing to Real: name=vfs:///C:/temp/test/jboss-6.0.0-M5/server/test-web/deploy/test-ee.ear state=PreReal mode=Manual requiredState=Real: org.jboss.deployers.spi.DeploymentException: Error deploying test-ejb.jar: Exception while processing container metadata for EJB: TestServerBean in unit: test-ejb.jar
at org.jboss.ejb3.deployers.Ejb3Deployer.deploy(Ejb3Deployer.java:189) [:6.0.0.20100911-M5]
[…]
Caused by: java.lang.IllegalArgumentException: Container jboss.j2ee:ear=test-ee.ear,jar=test-ejb.jar,name=TestServerBean,service=EJB3 failed to resolve persistence unit test
at org.jboss.injection.PersistenceUnitHandler.addPUDependency(PersistenceUnitHandler.java:135) [:1.5.1]
[…]
Caused by: java.lang.IllegalArgumentException: Can't find a persistence unit named 'test' in AbstractVFSDeploymentContext@22455058{vfs:///C:/temp/test/jboss-6.0.0-M5/server/test-web/deploy/test-ee.ear/test-ejb.jar/}
at org.jboss.jpa.resolvers.BasePersistenceUnitDependencyResolver.resolvePersistenceUnitSupplier(BasePersistenceUnitDependencyResolver.java:107) [:1.0.2-alpha-1]
Gerar código a partir de um banco
Bom, precisei gerar as classes que mapeiam as minhas tabelas com JPA..
utilizei os seguintes tutoriais para conseguir:
Começo:
http://pt.scribd.com/doc/73027102/Fazendo-Engenharia-Reversa-Com-Hibernate-Tools-Reverse-Engineering
Vídeo aula
http://docs.jboss.org/tools/archive/movies/demos/Reverse_engineering_and_code_generation/Reverse_engineering_and_code_generation.htm
Documentação:
Em HTML:
http://docs.jboss.org/tools/3.3.0.Final/en/hibernatetools/html/index.html
Em HTML (versão leve)
http://docs.jboss.org/tools/3.3.0.Final/en/hibernatetools/html_single/index.html
Em PDF
http://docs.jboss.org/tools/3.3.0.Final/en/hibernatetools/pdf/Hibernatetools_Reference_Guide.pdf
utilizei os seguintes tutoriais para conseguir:
Começo:
http://pt.scribd.com/doc/73027102/Fazendo-Engenharia-Reversa-Com-Hibernate-Tools-Reverse-Engineering
Vídeo aula
http://docs.jboss.org/tools/archive/movies/demos/Reverse_engineering_and_code_generation/Reverse_engineering_and_code_generation.htm
Documentação:
Em HTML:
http://docs.jboss.org/tools/3.3.0.Final/en/hibernatetools/html/index.html
Em HTML (versão leve)
http://docs.jboss.org/tools/3.3.0.Final/en/hibernatetools/html_single/index.html
Em PDF
http://docs.jboss.org/tools/3.3.0.Final/en/hibernatetools/pdf/Hibernatetools_Reference_Guide.pdf
illegal target for the requested operation
Access restriction BASE64Decoder
Oi : )
Hoje peguei um projeto novo aqui na empresa e aconteceram os seguintes erros:
Access restriction: The constructor BASE64Decoder() is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
Access restriction: The method decodeBuffer(String) from the type CharacterDecoder is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
Access restriction: The method encode(byte[]) from the type CharacterEncoder is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
Access restriction: The type BASE64Encoder is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
The project cannot be built until build path errors are resolved
Para resolver isso fiz o seguinte (no eclipse):
Botao direito no projeto > Properties > Java Compiler > Errors/Warnings > Deprecated and restricted API > Forbidden reference (access rules)
Nesse campo alterei o combobox de Error para Warning e pronto! Tudo certo o/
Talvez essa não seja a melhor solução mas resolveu o meu problema aqui, espero que possa ajudar outras pessoas.
Vaaaaleu! Até mais!
Hoje peguei um projeto novo aqui na empresa e aconteceram os seguintes erros:
Access restriction: The constructor BASE64Decoder() is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
Access restriction: The method decodeBuffer(String) from the type CharacterDecoder is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
Access restriction: The method encode(byte[]) from the type CharacterEncoder is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
Access restriction: The type BASE64Encoder is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
The project cannot be built until build path errors are resolved
Para resolver isso fiz o seguinte (no eclipse):
Botao direito no projeto > Properties > Java Compiler > Errors/Warnings > Deprecated and restricted API > Forbidden reference (access rules)
Nesse campo alterei o combobox de Error para Warning e pronto! Tudo certo o/
Talvez essa não seja a melhor solução mas resolveu o meu problema aqui, espero que possa ajudar outras pessoas.
Vaaaaleu! Até mais!
quinta-feira, 24 de junho de 2010
links flex
Pessoal, às vezes me perguntam se conheço alguns links legais de flex.. reuni alguns pra publicar aqui...
Vídeo com aplicações feitas em Flex
http://www.blip.tv/file/4250183
Fusioncharts
Exemplos de uso da biblioteca fusioncharts (tem gráficos e mapas muito interessantes)
http://www.fusioncharts.com/flex/demos/ChartExplorer/index.html
http://www.fusioncharts.com/flex/demos/MapExplorer/index.html
Mais em:
http://www.fusioncharts.com/flex/demos/
janelas-mdi-window
Aplicação bem bacana desenvolvida em flex:
http://luiztarabal.com.br/examples/MDIWindow/MDIWindow.html
Mais em:
http://luiztarabal.com.br/2010/03/25/janelas-mdi-window-no-flex/
Tour de Flex
Mostra diversos componentes bacanas com fonte que podem ser usados por você
http://www.adobe.com/devnet/flex/tourdeflex/web/
Você pode fazer download dessa aplicação (recomendado pois fica mais rápido)
http://www.adobe.com/devnet/flex/tourdeflex/
Dashboard
Aplicação de exemplo da adobe para um dashboard
http://examples.adobe.com/flex3/devnet/dashboard/main.html
Minha versão simplificada:
http://localhost8080.com.br/dashboard/main.swf
Flex Store
Aplicação de exemplo da adobe de e-commerce
http://examples.adobe.com/flex2/inproduct/sdk/flexstore/flexstore.html
Temas para o flex
http://fleksray.org/skins/edding/Edding.html
http://fleksray.org/skins/blueplastic/BluePlastic.html
http://ntt.cc/ext/Themes-Skins-For-Adobe-Flex/demo/Aeon/Aeon.html
http://ntt.cc/ext/Themes-Skins-For-Adobe-Flex/demo/Blend/Blend.html
Mais temas e downloads para você usar os temas no seu projeto em:
http://ntt.cc/2010/05/11/40-beautiful-themes-skins-for-adobe-flex-apps.html
http://www.scalenine.com/
http://fleksray.org/Flex_skin.html
ou procure por themes flex no google para encontrar mais
flex lib
Biblioteca de componentes flex, tem diversos componentes úteis que podem ser usados na sua aplicação
http://flexlib.googlecode.com/svn/trunk/examples/SuperTabNavigator_Sample.swf
http://flexlib.googlecode.com/svn/trunk/examples/ConvertibleTreeList_Sample.swf
http://flexlib.googlecode.com/svn/trunk/examples/Fire_Sample.swf
Mais em:
http://code.google.com/p/flexlib/wiki/ComponentList
http://flexlib.googlecode.com/svn/trunk/examples/
Component Explorer
Lista de componentes do flex 3 com exemplos de uso
http://examples.adobe.com/flex3/componentexplorer/explorer.html
Style Explorer
Muito útil para deixar sua aplicação com um visual mais atraente
http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html#
Assim que eu achar mais links legais postarei aqui.
Até mais!
Vídeo com aplicações feitas em Flex
http://www.blip.tv/file/4250183
Fusioncharts
Exemplos de uso da biblioteca fusioncharts (tem gráficos e mapas muito interessantes)
http://www.fusioncharts.com/flex/demos/ChartExplorer/index.html
http://www.fusioncharts.com/flex/demos/MapExplorer/index.html
Mais em:
http://www.fusioncharts.com/flex/demos/
janelas-mdi-window
Aplicação bem bacana desenvolvida em flex:
http://luiztarabal.com.br/examples/MDIWindow/MDIWindow.html
Mais em:
http://luiztarabal.com.br/2010/03/25/janelas-mdi-window-no-flex/
Tour de Flex
Mostra diversos componentes bacanas com fonte que podem ser usados por você
http://www.adobe.com/devnet/flex/tourdeflex/web/
Você pode fazer download dessa aplicação (recomendado pois fica mais rápido)
http://www.adobe.com/devnet/flex/tourdeflex/
Dashboard
Aplicação de exemplo da adobe para um dashboard
http://examples.adobe.com/flex3/devnet/dashboard/main.html
Minha versão simplificada:
http://localhost8080.com.br/dashboard/main.swf
Flex Store
Aplicação de exemplo da adobe de e-commerce
http://examples.adobe.com/flex2/inproduct/sdk/flexstore/flexstore.html
Temas para o flex
http://fleksray.org/skins/edding/Edding.html
http://fleksray.org/skins/blueplastic/BluePlastic.html
http://ntt.cc/ext/Themes-Skins-For-Adobe-Flex/demo/Aeon/Aeon.html
http://ntt.cc/ext/Themes-Skins-For-Adobe-Flex/demo/Blend/Blend.html
Mais temas e downloads para você usar os temas no seu projeto em:
http://ntt.cc/2010/05/11/40-beautiful-themes-skins-for-adobe-flex-apps.html
http://www.scalenine.com/
http://fleksray.org/Flex_skin.html
ou procure por themes flex no google para encontrar mais
flex lib
Biblioteca de componentes flex, tem diversos componentes úteis que podem ser usados na sua aplicação
http://flexlib.googlecode.com/svn/trunk/examples/SuperTabNavigator_Sample.swf
http://flexlib.googlecode.com/svn/trunk/examples/ConvertibleTreeList_Sample.swf
http://flexlib.googlecode.com/svn/trunk/examples/Fire_Sample.swf
Mais em:
http://code.google.com/p/flexlib/wiki/ComponentList
http://flexlib.googlecode.com/svn/trunk/examples/
Component Explorer
Lista de componentes do flex 3 com exemplos de uso
http://examples.adobe.com/flex3/componentexplorer/explorer.html
Style Explorer
Muito útil para deixar sua aplicação com um visual mais atraente
http://examples.adobe.com/flex3/consulting/styleexplorer/Flex3StyleExplorer.html#
Assim que eu achar mais links legais postarei aqui.
Até mais!
quarta-feira, 26 de maio de 2010
Download de Arquivos - JBoss
Em um sistema aqui da empresa, é gerado um arquivo xls (excel) e para fazer download o usuário acessa um link como esse:
http://nomedoservidor:porta/nomedosistema/meuarquivoexcel.xls
Porém, em alguns navegadores, ao abrir o link, o arquivo é exibido no browser, e todo desconfigurado ainda...
para resolver isso, basta adicionar as seguintes linhas
<mime-mapping>
<extension>xls</extension>
<mime-type>application/msexcel</mime-type>
</mime-mapping>
em:
<pasta do jboss>/server/<contexto>/deploy/jbossweb-tomcat55.sar/conf/web.xml
Pronto! problema resolvido.. ao acessar o link, o usuário escolherá se deseja apenas abrir o arquivo ou fazer download.
Expliquei aqui como resolvi o problema com xls, mas com outros formatos de arquivos, também é possível.
Valeu!
http://nomedoservidor:porta/nomedosistema/meuarquivoexcel.xls
Porém, em alguns navegadores, ao abrir o link, o arquivo é exibido no browser, e todo desconfigurado ainda...
para resolver isso, basta adicionar as seguintes linhas
<mime-mapping>
<extension>xls</extension>
<mime-type>application/msexcel</mime-type>
</mime-mapping>
em:
<pasta do jboss>/server/<contexto>/deploy/jbossweb-tomcat55.sar/conf/web.xml
Pronto! problema resolvido.. ao acessar o link, o usuário escolherá se deseja apenas abrir o arquivo ou fazer download.
Expliquei aqui como resolvi o problema com xls, mas com outros formatos de arquivos, também é possível.
Valeu!
sexta-feira, 21 de maio de 2010
compartilhar pasta ubuntu terminal
Hoje acessando um servidor linux aqui da empresa precisava compartilhar uma pasta, porém, não tinha interface gráfica, então tive que fazer na mão, via terminal...
para isso acessei o arquivo /etc/samba/smb.conf
e adicionei as seguintes linhas:
[reports]
comment = Diretorio relatorios
browseable = yes
path = /opt/jboss/jboss-4.0.5.GA/server/anyware/deploy/test.war/reports
writable = yes
guest ok = yes
Pronto, compartilhamento criado!
Agora uma explicação de cada linha:
##### Nome do compartilhamento
[reports]
##### comentario qualquer
comment = Diretorio relatorios
##### indica se o compartilhamento será visto na rede
browseable = yes
##### caminho do compartilhamento
path = /opt/jboss/jboss-4.0.5.GA/server/anyware/deploy/test.war/reports
##### indica se vai ser leitura e escrita
writable = yes
##### define se qualquer um vai ter acesso, caso você coloque "no", use valid users e defina quem terá acesso
guest ok = yes
####### outras propriedades que podem ser definidas
##### usuarios ou grupos que terao permissão de acesso (para grupos utilize um @ na frente @users)
valid users = usuario1
##### disponibilidade do compartilhamento, por padrão: yes.
available = yes
### habilita o compartilhamento como somente de leitura.
read only = yes
Fonte:
http://mentedolulu.blogspot.com/2009/01/como-compartilhar-pasta-do-linux-para-o.html
para isso acessei o arquivo /etc/samba/smb.conf
e adicionei as seguintes linhas:
[reports]
comment = Diretorio relatorios
browseable = yes
path = /opt/jboss/jboss-4.0.5.GA/server/anyware/deploy/test.war/reports
writable = yes
guest ok = yes
Pronto, compartilhamento criado!
Agora uma explicação de cada linha:
##### Nome do compartilhamento
[reports]
##### comentario qualquer
comment = Diretorio relatorios
##### indica se o compartilhamento será visto na rede
browseable = yes
##### caminho do compartilhamento
path = /opt/jboss/jboss-4.0.5.GA/server/anyware/deploy/test.war/reports
##### indica se vai ser leitura e escrita
writable = yes
##### define se qualquer um vai ter acesso, caso você coloque "no", use valid users e defina quem terá acesso
guest ok = yes
####### outras propriedades que podem ser definidas
##### usuarios ou grupos que terao permissão de acesso (para grupos utilize um @ na frente @users)
valid users = usuario1
##### disponibilidade do compartilhamento, por padrão: yes.
available = yes
### habilita o compartilhamento como somente de leitura.
read only = yes
Fonte:
http://mentedolulu.blogspot.com/2009/01/como-compartilhar-pasta-do-linux-para-o.html
domingo, 11 de abril de 2010
jMonkeyEngine Modelos 3D
Você está na série de posts sobre jMonkeyEngine. Acesse o post principal: jMonkeyEngine Tutorial
Nesse post vou mostrar como utilizar objetos 3D na sua aplicação, veja algumas imagens de exemplo:
jMonkeyEngine não suporta qualquer tipo de formato de arquivo 3D diretamente, é preciso fazer uma conversão para um formato propritário chamado "jME binary", mas felizmente, a api do jMonkey tem classes e métodos que ajudam muito nessas conversões.
Vamos ver alguns exemplos:
Arquivos .obj
http://www.localhost8080.com.br/jmonkeyengine/model/ModelLoadingObj.java
Arquivos .x3d
http://www.localhost8080.com.br/jmonkeyengine/model/ModelLoadingX3d.java
Arquivos .xml
http://www.localhost8080.com.br/jmonkeyengine/model/ModelLoadingXml.java
OBS: Para usar essas classes você precisará dos arquivos que estão dentro desse zip:
http://localhost8080.com.br/jmonkeyengine/model/jmonkeyengine-modelo3d-assets.zip
Descompacte e jogue a pasta assets na pata src do seu projeto.
Performance
Quando você estiver construindo uma grande aplicação poderá ter problemas de performance, pois as conversões estão sendo feitas em tempo de execução (o arquivo .obj, por exemplo, é tranformado em .jme apenas quando o programa está rodando).
Isso pode ser resolvido convertendo todos os modelos 3D apenas uma vez e gravando-os em arquivos .jme utilizando FileOutputStreams, quando sua aplicação começar, basta ler esse arquivo com FileInputStream e carregá-lo diretamente, sem conversões. Isso deixará a aplicação muito mais rápida!
Bounding
Você viu em todos os exemplos desse artigo algo como a seguinte linha:
BoundingSphere e BoundingBox são a chave da performance em jME.
Por quê? Imagine uma imagem 3D complexa, leva-se muita tempo para carregá-la, fazer cálculos com ela, desenhá-la, etc... então, quando você tem uma imagem 3D, você cerca ela com uma esfera ou um quadrado (invisíveis), assim se o jME precisa saber se a imagem 3D está na visão da camera, para então carregá-la e desenhá-la, ele faz cálculos com a esfera ou quadrado ao redor da imagem, o que é rápido e fácil, pois esses objetos são matematicamente simples.
Use sempre este artifício! Basta decidir se o objeto, baseado em seu formato, deve ser cercado por uma esfera (BoundingSphere) ou por um quadrado (BoundingBox), e então usar isso para melhorar a performance do seu programa.
Vaaleu!! Em breve postarei mais sobre jMonkeyEngine, até mais!
Nesse post vou mostrar como utilizar objetos 3D na sua aplicação, veja algumas imagens de exemplo:
jMonkeyEngine não suporta qualquer tipo de formato de arquivo 3D diretamente, é preciso fazer uma conversão para um formato propritário chamado "jME binary", mas felizmente, a api do jMonkey tem classes e métodos que ajudam muito nessas conversões.
Vamos ver alguns exemplos:
Arquivos .obj
http://www.localhost8080.com.br/jmonkeyengine/model/ModelLoadingObj.java
Arquivos .x3d
http://www.localhost8080.com.br/jmonkeyengine/model/ModelLoadingX3d.java
Arquivos .xml
http://www.localhost8080.com.br/jmonkeyengine/model/ModelLoadingXml.java
OBS: Para usar essas classes você precisará dos arquivos que estão dentro desse zip:
http://localhost8080.com.br/jmonkeyengine/model/jmonkeyengine-modelo3d-assets.zip
Descompacte e jogue a pasta assets na pata src do seu projeto.
Performance
Quando você estiver construindo uma grande aplicação poderá ter problemas de performance, pois as conversões estão sendo feitas em tempo de execução (o arquivo .obj, por exemplo, é tranformado em .jme apenas quando o programa está rodando).
Isso pode ser resolvido convertendo todos os modelos 3D apenas uma vez e gravando-os em arquivos .jme utilizando FileOutputStreams, quando sua aplicação começar, basta ler esse arquivo com FileInputStream e carregá-lo diretamente, sem conversões. Isso deixará a aplicação muito mais rápida!
Bounding
Você viu em todos os exemplos desse artigo algo como a seguinte linha:
// cerca a imagem com limites invisiveis
spatial.setModelBound(new BoundingBox());
spatial.updateModelBound();
BoundingSphere e BoundingBox são a chave da performance em jME.
Por quê? Imagine uma imagem 3D complexa, leva-se muita tempo para carregá-la, fazer cálculos com ela, desenhá-la, etc... então, quando você tem uma imagem 3D, você cerca ela com uma esfera ou um quadrado (invisíveis), assim se o jME precisa saber se a imagem 3D está na visão da camera, para então carregá-la e desenhá-la, ele faz cálculos com a esfera ou quadrado ao redor da imagem, o que é rápido e fácil, pois esses objetos são matematicamente simples.
Use sempre este artifício! Basta decidir se o objeto, baseado em seu formato, deve ser cercado por uma esfera (BoundingSphere) ou por um quadrado (BoundingBox), e então usar isso para melhorar a performance do seu programa.
Vaaleu!! Em breve postarei mais sobre jMonkeyEngine, até mais!
sexta-feira, 9 de abril de 2010
SQL hifen
colunas ou tabelas com hifen em um banco de dados podem dar muita dor de cabeça...
use sempre underlines (_) e não hífens (-)...
entretando.. se você estiver mexendo em um sistema que tenha essa situação, como aconteceu comigo hoje, terá que usar aspas duplas!
a seguinte query não funciona
select * from pub.empresa where ep-codigo = 1
Você obtém erros como:
Error: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Column não encontrada ou especificada (7520)
Error: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Column "EP" cannot be found or is not specified for query. (13865)
Caused by: java.sql.SQLException: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Column "EMPRESA0_.EP" cannot be found or is not specified for query. (13865)
para resolver use aspas duplas:
select * from pub.empresa where "ep-codigo" = 1
e tudo funcionará perfeitamente..
se você usar hibernate, jpa.. e for mapear um campo com hífen, terá que colocar aspas também, mas terá que usar o caracter de escape \"
@Column(name = "\"ep-codigo\"")
private Long epCodigo;
é isso aí, valeu!
use sempre underlines (_) e não hífens (-)...
entretando.. se você estiver mexendo em um sistema que tenha essa situação, como aconteceu comigo hoje, terá que usar aspas duplas!
a seguinte query não funciona
select * from pub.empresa where ep-codigo = 1
Você obtém erros como:
Error: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Column não encontrada ou especificada (7520)
Error: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Column "EP" cannot be found or is not specified for query. (13865)
Caused by: java.sql.SQLException: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Column "EMPRESA0_.EP" cannot be found or is not specified for query. (13865)
para resolver use aspas duplas:
select * from pub.empresa where "ep-codigo" = 1
e tudo funcionará perfeitamente..
se você usar hibernate, jpa.. e for mapear um campo com hífen, terá que colocar aspas também, mas terá que usar o caracter de escape \"
@Column(name = "\"ep-codigo\"")
private Long epCodigo;
é isso aí, valeu!
terça-feira, 6 de abril de 2010
redirecionar HTML
Olá, você pode acessar esse blog pelo domínio http://www.localhost8080.com.br, e então será redirecionado para http://localhost8080.blogspot.com, pois o index.html do localhost8080.com.br é assim:
Esse código redireciona para a página que você colocar no atributo url... aquele 0 depois do content é o número de segundos antes do redirecionamento ser feito, se você colocar 10, depois de 10 segundos após abrir a página vai acontecer o redirecionamento...
Dá para fazer o mesmo sem mudar o link no browser, basta usar o seguinte código:
é isso aí! valeu!
<html>
<head>
<title>localhost8080</title>
</head>
<body>
<meta http-equiv="refresh" content="0; url=http://localhost8080.blogspot.com">
</body>
</html>
Esse código redireciona para a página que você colocar no atributo url... aquele 0 depois do content é o número de segundos antes do redirecionamento ser feito, se você colocar 10, depois de 10 segundos após abrir a página vai acontecer o redirecionamento...
Dá para fazer o mesmo sem mudar o link no browser, basta usar o seguinte código:
<html>
<head>
<title>localhost8080</title>
</head>
<body leftmargin="0" marginheight="0" marginwidth="0" scroll="no" topmargin="0">
<iframe frameborder="0" height="100%" src="http://localhost8080.blogspot.com" width="100%">
<script language="JavaScript">
location = "http://localhost8080.blogspot.com";
</script>
<noscript>
<p>
<a href="http://localhost8080.blogspot.com">Seu Browser nao suporta Frames, Clique Aqui...</a>
</p>
</noscript>
</iframe>
</body>
</html>
é isso aí! valeu!
segunda-feira, 5 de abril de 2010
Permissão negada:80
Ao inicializar o JBoss, aconteceu o seguinte erro:
Isso acontece aqui no ubuntu quando inicio o JBoss na porta 80, então para resolver simplesmente altero a porta do JBoss, fazer isso é simples, basta acessar o arquivo:
<PASTA DO JBOSS> /server/ <PASTA DO CONTEXTO> /deploy/jbossweb-tomcat55.sar/server.xml
e alterar o atributo port como abaixo:
De:
<Connector port="80" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true">
Para:
<Connector port="8080" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true">
e pronto o problema estará resolvido!
11:13:53,412 INFO [Embedded] Catalina naming disabled
11:13:53,586 ERROR [Http11Protocol] Error initializing endpoint
java.net.BindException: Permissão negada:80
at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoint.java:297)
[...]
at java.lang.Thread.run(Thread.java:619)
11:13:53,588 ERROR [Catalina] Catalina.start
LifecycleException: Protocol handler initialization failed: java.net.BindException: Permissão negada:80
at org.apache.catalina.connector.Connector.initialize(Connector.java:930)
[...]
at java.lang.Thread.run(Thread.java:619)
11:13:53,590 INFO [Catalina] Initialization processed in 150 ms
11:13:53,591 INFO [StandardService] Starting service jboss.web
Isso acontece aqui no ubuntu quando inicio o JBoss na porta 80, então para resolver simplesmente altero a porta do JBoss, fazer isso é simples, basta acessar o arquivo:
<PASTA DO JBOSS> /server/ <PASTA DO CONTEXTO> /deploy/jbossweb-tomcat55.sar/server.xml
e alterar o atributo port como abaixo:
De:
<Connector port="80" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true">
Para:
<Connector port="8080" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true">
e pronto o problema estará resolvido!
sexta-feira, 2 de abril de 2010
jMonkeyEngine HelloWorld II
Você está na série de posts sobre jMonkeyEngine. Acesse o post principal: jMonkeyEngine Tutorial
Caso seja seu primeiro contato com jMonkeyEngine, leia antes o post jMonkeyEngine HelloWorld para aprender a configurar o ambiente e executar sua aplicação.
Com esse exemplo quero passar um pouco mais sobre jMonkeyEngine... sobre outras formas geométricas, como posicioná-las na tela (grafo de cena) e como alterar seu tamanho.
Crie uma classe chamada HelloWorldII com o código abaixo e execute-a. (Dúvidas quanto a isso? Leia jMonkeyEngine HelloWorld)
Você obterá algo semelhante a essas imagens:
Explicando o código
Formas geométricas
Nesse exemplo foram utilizadas as seguintes formas: Teapot (Chaleira), Arrow (Seta), Box (Caixa, cubo), Sphere (Esfera, bola).
Teapot
Teapot é uma chaleira, para usar basta criar uma instância passando um nome qualquer:
Teapot teapot = new Teapot("teapot");
e depois adicionar na tela:
rootNode.attachChild(teapot);
Arrow
Uma seta, seu construtor recebe, um nome, o comprimento e a largura
Arrow arrow = new Arrow("arrow", 3, 1);
para visualizá-la é necessário adicionar o objeto na tela
rootNode.attachChild(arrow);
Box
Box representa uma caixa, um cubo, o seu construtor recebe um nome e dois vetores, o primeiro vetor representa onde a caixa começa, o segungo, onde ela termina
//cria uma caixa do ponto (x=0, y=0, z=0) até o ponto (x=2, y=2, z=2)
Box box = new Box("box", new Vector3f(0, 0, 0), new Vector3f(2, 2, 2));
Depois, basta adicionar à tela:
rootNode.attachChild(box);
Sphere
Utilizada para desenhar esferas, globos. Para criar é necessário passar ao construtor um nome, dois atributos que representam a circunferência da esfera e o raio:
Sphere sphere = new Sphere("sphere", 30, 30, 2);
jME não pode desenhar curvas, então desenha triângulos, utilizando muitos triângulos é possível desenhar uma esfera. Os dois primeiros números representam a proximidade dos triangulos, se você alterar de 30, 30 para 7, 7 você vai ver uma esfera como a abaixo:
Quanto maior os números passados, mais esférico ficará o componente. Porém, números muito altos criam muitos triângulos, podendo deixar a aplicação pesada e lenta... é preciso encontrar um equilíbrio entre perfomance e aparência.
como sempre, é necessário adicionar na tela:
rootNode.attachChild(sphere);
Posicionamento
Mover objetos no cenário é simples, é só chamar o método setLocalTranslation.
Sphere sphere = new Sphere("sphere", 30, 30, 2);
sphere.setLocalTranslation(new Vector3f(0,2,0));
Um Vector3f, na jME API, tem o formato (x, y, z), então o código acima com Vector3f(0,2,0) movimenta o objeto duas unidades para cima (eixo y). Se eu tivesse usado Vector3f(0,-2,0) então a esfera teria sido movida duas unidades para baixo.
Mover objetos é realmente fácil. Você apenas tem que lembrar que x é direita/esquerda, y é cima/baixo, e z é trás/frente.
Alterar tamanho
Para alterar o tamanho de algum objeto o método setLocalScale é chamado.
Sphere sphere = new Sphere("sphere", 30, 30, 2);
sphere.setLocalScale(2);
Nele é passado quantas vezes maior ou menor você quer que o objeto fique, passando 2, o objeto fica duas vezes maior, passando 5, o objeto fica 5 vezes maior, passando 0.5, o objeto fica com metade do seu tamanho.
E é isso! Leia o post jMonkeyEngine Modelos 3D
Caso seja seu primeiro contato com jMonkeyEngine, leia antes o post jMonkeyEngine HelloWorld para aprender a configurar o ambiente e executar sua aplicação.
Com esse exemplo quero passar um pouco mais sobre jMonkeyEngine... sobre outras formas geométricas, como posicioná-las na tela (grafo de cena) e como alterar seu tamanho.
Crie uma classe chamada HelloWorldII com o código abaixo e execute-a. (Dúvidas quanto a isso? Leia jMonkeyEngine HelloWorld)
import com.jme.app.SimpleGame;
import com.jme.math.Vector3f;
import com.jme.scene.shape.Arrow;
import com.jme.scene.shape.Box;
import com.jme.scene.shape.Sphere;
import com.jme.scene.shape.Teapot;
public class HelloWorldII extends SimpleGame {
private Teapot teapot1;
private Teapot teapot2;
private Arrow arrow;
private Box box;
private Sphere sphere;
public static void main(String[] args) {
HelloWorldII app = new HelloWorldII();
app.setConfigShowMode(ConfigShowMode.AlwaysShow);
app.start();
}
protected void simpleInitGame() {
//cria uma chaleira 3D
teapot1 = new Teapot("teapot1");
//move a chaleira (diminui 7 no eixo x, aumenta 2 no eixo y e 1 no eixo z)
teapot1.setLocalTranslation(new Vector3f(-7, 2, 1));
//aumenta o tamanho do objeto em duas vezes
teapot1.setLocalScale(2);
//Adiciona a chaleira na tela
rootNode.attachChild(teapot1);
//cria uma chaleira 3D
teapot2 = new Teapot("teapot2");
//move a chaleira (aumenta 3 no eixo x, diminui 2 no eixo y e não mexe no eixo z)
teapot2.setLocalTranslation(3, -2, 0);
//diminui o tamanho do objeto pela metade
teapot2.setLocalScale(0.5F);
//Adiciona a chaleira na tela
rootNode.attachChild(teapot2);
//vamos criar outros objetos 3D agora!
//cria uma seta de 3 de comprimento e 1 de largura
arrow = new Arrow("arrow", 3, 1);
//posiciona a seta no canto inferior esquerdo da tela
arrow.setLocalTranslation(-10, -5, 0);
//adiciona a seta na tela
rootNode.attachChild(arrow);
//cria uma caixa do ponto (x=0, y=0, z=0) até o ponto (x=2, y=2, z=2)
box = new Box("box", new Vector3f(0, 0, 0), new Vector3f(2, 2, 2));
//posiciona a caixa no canto inferior esquerdo da tela
box.setLocalTranslation(-8, -6, 0);
//adiciona a caixa na tela
rootNode.attachChild(box);
//cria uma esfera de raio 2
sphere = new Sphere("sphere", 30, 30, 2);
//posiciona a esfera no canto superior direito da tela
sphere.setLocalTranslation(4, 5, 0);
//adiciona a esfera na tela
rootNode.attachChild(sphere);
}
}
Você obterá algo semelhante a essas imagens:
Explicando o código
Formas geométricas
Nesse exemplo foram utilizadas as seguintes formas: Teapot (Chaleira), Arrow (Seta), Box (Caixa, cubo), Sphere (Esfera, bola).
Teapot
Teapot é uma chaleira, para usar basta criar uma instância passando um nome qualquer:
Teapot teapot = new Teapot("teapot");
e depois adicionar na tela:
rootNode.attachChild(teapot);
Arrow
Uma seta, seu construtor recebe, um nome, o comprimento e a largura
Arrow arrow = new Arrow("arrow", 3, 1);
para visualizá-la é necessário adicionar o objeto na tela
rootNode.attachChild(arrow);
Box
Box representa uma caixa, um cubo, o seu construtor recebe um nome e dois vetores, o primeiro vetor representa onde a caixa começa, o segungo, onde ela termina
//cria uma caixa do ponto (x=0, y=0, z=0) até o ponto (x=2, y=2, z=2)
Box box = new Box("box", new Vector3f(0, 0, 0), new Vector3f(2, 2, 2));
Depois, basta adicionar à tela:
rootNode.attachChild(box);
Sphere
Utilizada para desenhar esferas, globos. Para criar é necessário passar ao construtor um nome, dois atributos que representam a circunferência da esfera e o raio:
Sphere sphere = new Sphere("sphere", 30, 30, 2);
jME não pode desenhar curvas, então desenha triângulos, utilizando muitos triângulos é possível desenhar uma esfera. Os dois primeiros números representam a proximidade dos triangulos, se você alterar de 30, 30 para 7, 7 você vai ver uma esfera como a abaixo:
7 x 7 | 30 x 30 |
Quanto maior os números passados, mais esférico ficará o componente. Porém, números muito altos criam muitos triângulos, podendo deixar a aplicação pesada e lenta... é preciso encontrar um equilíbrio entre perfomance e aparência.
como sempre, é necessário adicionar na tela:
rootNode.attachChild(sphere);
Posicionamento
Mover objetos no cenário é simples, é só chamar o método setLocalTranslation.
Sphere sphere = new Sphere("sphere", 30, 30, 2);
sphere.setLocalTranslation(new Vector3f(0,2,0));
Um Vector3f, na jME API, tem o formato (x, y, z), então o código acima com Vector3f(0,2,0) movimenta o objeto duas unidades para cima (eixo y). Se eu tivesse usado Vector3f(0,-2,0) então a esfera teria sido movida duas unidades para baixo.
Mover objetos é realmente fácil. Você apenas tem que lembrar que x é direita/esquerda, y é cima/baixo, e z é trás/frente.
Alterar tamanho
Para alterar o tamanho de algum objeto o método setLocalScale é chamado.
Sphere sphere = new Sphere("sphere", 30, 30, 2);
sphere.setLocalScale(2);
Nele é passado quantas vezes maior ou menor você quer que o objeto fique, passando 2, o objeto fica duas vezes maior, passando 5, o objeto fica 5 vezes maior, passando 0.5, o objeto fica com metade do seu tamanho.
E é isso! Leia o post jMonkeyEngine Modelos 3D
quarta-feira, 24 de março de 2010
jMonkeyEngine HelloWorld
Você está na série de posts sobre jMonkeyEngine. Acesse o post principal: jMonkeyEngine Tutorial
Vamos fazer um HelloWorld em 3 etapas: 1) Montar o ambiente 2) Codificar 3) Executar
1) Montar o ambiente
- Baixe o jMonkeyEngine e descompacte: Download
- Crie um novo projeto no eclipse (Eu uso o eclipse, mas se você quiser usar netbeans ou outra IDE também funcionará)
- Clique com botão direito no projeto > clique em "build path" > clique em "configure build path"
- vá na aba Libraries > clique em Add Externals JARs
- adicione todos os JARs que estiverem na lib da pasta do jMonkey que você descompactou e também os JARs que estiverem na pasta lwjgl dentro da pasta lib da pasta lib (sim, são duas pastas 'lib') da pasta do jMonkey
- Clique em OK
2) Codificar
- Crie uma classe chamada HelloWorld dentro da pasta src do seu projeto
- cole o seguinte código:
resumindo, essa classe cria uma chaleira 3D (Teapot), explicarei mais detalhes nos próximos posts
3) Executar
- Clique com o botão direito na sua classe e clique em "Run As" e depois clique em "Java Application"
- Vai acontecer o erro: java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
- Você precisa fazer o seguinte:
- Clique com o botão direito na sua classe e clique em "Run As" e depois clique em "Run Configurations"
- Clique na aba "Arguments" e no campo "VM Arguments" você vai colar o seguinte:
-Djava.library.path=[caminho para a pasta LWJGL dentro da pasta do jMonkey]/native/[seu sistema operacional]
- Aqui ficou assim:
-Djava.library.path=/home/adriano/temp/blog/jME2_0_1-Stable/lib/lib/lwjgl/native/linux
- Se você usa windows, ficará mais ou menos assim (talvez com as barras pro outro lado, não sei)
-Djava.library.path=C:\jmonkey\jME2_0_1-Stable\lib\lib\lwjgl\native\windows
- Clique em "Aplly" e depois em "Run"
- Aparecerá uma janela, desmaque a opção fullscreen e clique em OK
- PRONTO! mexa o mouse e as teclas A S D W para visualizar o outro lado da chaleira, qualquer coisa aperte ESC e rode novamente (botão direito > run as > java application)
Agora que você já fez esse HelloWorld, leia jMonkeyEngine HelloWorld II e faça um HelloWorld mias interessante!
Vamos fazer um HelloWorld em 3 etapas: 1) Montar o ambiente 2) Codificar 3) Executar
1) Montar o ambiente
- Baixe o jMonkeyEngine e descompacte: Download
- Crie um novo projeto no eclipse (Eu uso o eclipse, mas se você quiser usar netbeans ou outra IDE também funcionará)
- Clique com botão direito no projeto > clique em "build path" > clique em "configure build path"
- vá na aba Libraries > clique em Add Externals JARs
- adicione todos os JARs que estiverem na lib da pasta do jMonkey que você descompactou e também os JARs que estiverem na pasta lwjgl dentro da pasta lib da pasta lib (sim, são duas pastas 'lib') da pasta do jMonkey
- Clique em OK
2) Codificar
- Crie uma classe chamada HelloWorld dentro da pasta src do seu projeto
- cole o seguinte código:
import com.jme.app.SimpleGame;
import com.jme.scene.shape.Teapot;
public class HelloWorld extends SimpleGame {
private Teapot teapot;
public static void main(String[] args) {
HelloWorld app = new HelloWorld();
app.setConfigShowMode(ConfigShowMode.AlwaysShow);
app.start();
}
protected void simpleInitGame() {
teapot = new Teapot("Teapot");
rootNode.attachChild(teapot);
}
}
resumindo, essa classe cria uma chaleira 3D (Teapot), explicarei mais detalhes nos próximos posts
3) Executar
- Clique com o botão direito na sua classe e clique em "Run As" e depois clique em "Java Application"
- Vai acontecer o erro: java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
- Você precisa fazer o seguinte:
- Clique com o botão direito na sua classe e clique em "Run As" e depois clique em "Run Configurations"
- Clique na aba "Arguments" e no campo "VM Arguments" você vai colar o seguinte:
-Djava.library.path=[caminho para a pasta LWJGL dentro da pasta do jMonkey]/native/[seu sistema operacional]
- Aqui ficou assim:
-Djava.library.path=/home/adriano/temp/blog/jME2_0_1-Stable/lib/lib/lwjgl/native/linux
- Se você usa windows, ficará mais ou menos assim (talvez com as barras pro outro lado, não sei)
-Djava.library.path=C:\jmonkey\jME2_0_1-Stable\lib\lib\lwjgl\native\windows
- Clique em "Aplly" e depois em "Run"
- Aparecerá uma janela, desmaque a opção fullscreen e clique em OK
- PRONTO! mexa o mouse e as teclas A S D W para visualizar o outro lado da chaleira, qualquer coisa aperte ESC e rode novamente (botão direito > run as > java application)
Agora que você já fez esse HelloWorld, leia jMonkeyEngine HelloWorld II e faça um HelloWorld mias interessante!
jMonkeyEngine Introdução
Você está na série de posts sobre jMonkeyEngine. Acesse o post principal: jMonkeyEngine Tutorial
O que é o jMonkeyEngine?
jME ou jMonkeyEngine é uma game engine de alto nível e perfomance, open source, escrita em Java, baseada na API gráfica OpenGL.
Com jMonkeyEngine é possível desenvolver gráficos, cenários, jogos e animações, 2D e 3D, simples e complexos, com facilidade, praticidade e alta performance.
Veja alguns jogos e aplicações desenvolvidos com jME: (veja até o final, os melhores jogos estão no final)
Faça sua primeira aplicação com jMonkeyEngine! Acesse jMonkeyEngine HelloWorld
Vaaleu!!
O que é o jMonkeyEngine?
jME ou jMonkeyEngine é uma game engine de alto nível e perfomance, open source, escrita em Java, baseada na API gráfica OpenGL.
Com jMonkeyEngine é possível desenvolver gráficos, cenários, jogos e animações, 2D e 3D, simples e complexos, com facilidade, praticidade e alta performance.
Veja alguns jogos e aplicações desenvolvidos com jME: (veja até o final, os melhores jogos estão no final)
Faça sua primeira aplicação com jMonkeyEngine! Acesse jMonkeyEngine HelloWorld
Vaaleu!!
terça-feira, 23 de março de 2010
jMonkeyEngine Tutorial
Seja bem-vindo à série de posts sobre jMonkeyEngine.
Introdução ao jMonkeyEngine: (O que é? O que dá pra fazer?)
http://localhost8080.blogspot.com/2010/03/jmonkeyengine-introducao.html
HelloWorld: (faça sua primeira aplicação!)
http://localhost8080.blogspot.com/2010/03/jmonkeyengine-helloworld.html
HelloWorld II (Vamos fazer um HelloWorld mais interessante!)
http://localhost8080.blogspot.com/2010/04/jmonkeyengine-helloworld-ii.html
Modelos 3D (bem bacana!)
http://localhost8080.blogspot.com/2010/04/jmonkeyengine-modelos-3d.html
Tenho o objetivo de postar muito mais sobre jMonkeyEngine! Fique sempre atento a esse blog para ler os novos posts!
Dúvidas comentem no post ou me enviem um e-mail: adriano@localhost8080.com.br
Vaaleu!
Introdução ao jMonkeyEngine: (O que é? O que dá pra fazer?)
http://localhost8080.blogspot.com/2010/03/jmonkeyengine-introducao.html
HelloWorld: (faça sua primeira aplicação!)
http://localhost8080.blogspot.com/2010/03/jmonkeyengine-helloworld.html
HelloWorld II (Vamos fazer um HelloWorld mais interessante!)
http://localhost8080.blogspot.com/2010/04/jmonkeyengine-helloworld-ii.html
Modelos 3D (bem bacana!)
http://localhost8080.blogspot.com/2010/04/jmonkeyengine-modelos-3d.html
Tenho o objetivo de postar muito mais sobre jMonkeyEngine! Fique sempre atento a esse blog para ler os novos posts!
Dúvidas comentem no post ou me enviem um e-mail: adriano@localhost8080.com.br
Vaaleu!
quinta-feira, 18 de março de 2010
compartilhamento de rede de usuário retornou erro 255: info_fn: file /var/lib/samba/usershares/ is not a well formed usershare
muitas vezes, no ubuntu, estou com muitas pastas compartilhadas e quero tirar todos os compartilhamentos e fazer isso um a um pode ser chato se existirem muitos compartilhamentos...
para deletar todos de uma vez basta deletar todos os arquivos (ou só os que você quiser) da pasta:
/var/lib/samba/usershares/
Isso também é útil caso aconteça o erro:
"compartilhamento de rede de usuário" retornou erro 255: info_fn: file /var/lib/samba/usershares/ is not a well formed usershare
isso deve acontecer pois alguma pasta que você compartilhou foi deletada e o compartilhamento continuou existindo : / então você deve ir na pasta /var/lib/samba/usershares/ e deletar os compartilhamentos problemáticos.
para deletar todos de uma vez basta deletar todos os arquivos (ou só os que você quiser) da pasta:
/var/lib/samba/usershares/
Isso também é útil caso aconteça o erro:
"compartilhamento de rede de usuário" retornou erro 255: info_fn: file /var/lib/samba/usershares/ is not a well formed usershare
isso deve acontecer pois alguma pasta que você compartilhou foi deletada e o compartilhamento continuou existindo : / então você deve ir na pasta /var/lib/samba/usershares/ e deletar os compartilhamentos problemáticos.
quarta-feira, 17 de março de 2010
byte array to image flex 2
No flex 3, se você tem um ByteArray de uma imagem, basta você passá-lo para o source do image que o bytearray vira uma imagem.
public var myByteArray:ByteArray;
<mx:Image source="{this.myByteArray}"/>
já no flex 2... não funciona!
aqui na empresa tem um projeto antigo que é em flex 2 e tive que fazer isso, tentei bastante mas não consegui fazer isso apenas no flex, então fiz o seguinte:
criei um servlet para escrever a imagem e o chamei a partir do source do mx:Image
//servlet
byte[] image = /*busca byte array no banco*/;
OutputStream out = response.getOutputStream();
out.write(image);
out.close();
//flex
<mx:Image source="{this.getContextPath() + '/showimage'}"/>
public function getContextPath():String
{
var url:String = Application.application.url;
var pos:int = url.lastIndexOf("/");
url = url.substring(0, pos);
return url;
}
public var myByteArray:ByteArray;
<mx:Image source="{this.myByteArray}"/>
já no flex 2... não funciona!
aqui na empresa tem um projeto antigo que é em flex 2 e tive que fazer isso, tentei bastante mas não consegui fazer isso apenas no flex, então fiz o seguinte:
criei um servlet para escrever a imagem e o chamei a partir do source do mx:Image
//servlet
byte[] image = /*busca byte array no banco*/;
OutputStream out = response.getOutputStream();
out.write(image);
out.close();
//flex
<mx:Image source="{this.getContextPath() + '/showimage'}"/>
public function getContextPath():String
{
var url:String = Application.application.url;
var pos:int = url.lastIndexOf("/");
url = url.substring(0, pos);
return url;
}
mxml e o & (E comercial ou ampersand ou sinal tironiano)
Se você usar & (E comercial) em um mxml terá problemas... então use & ao invés de &
por exemplo, se vai usar o operador AND (true && true), você terá que usar (true && true)
por exemplo, se vai usar o operador AND (true && true), você terá que usar (true && true)
domingo, 14 de março de 2010
Missing classpath entry default/lib/mail.jar
Olá, tenho sempre esse problema quando crio um novo servidor no eclipse... ele acontece pois o eclipse verifica se dentro do contexto do JBoss existe o arquivo mail.jar dentro da pasta lib, porém, se o seu contexto não se chamar 'default', esse problema ocorre...
para resolver é fácil, basta dentro da pasta 'server' dentro do seu jboss, criar uma pasta chamada 'default', dentro dela criar uma pasta chamada 'lib', e por fim, dentro da pasta lib é necessário criar um arquivo chamado mail.jar (pegue qualquer arquivo .jar, cole lá e renomeie, ou então crie um arquivo de texto 'texto.txt' e renomeie para 'mail.jar')
assim, você passa da validação e pode usar o seu contexto normamente!
Existe uma forma mais complexa para resolver isso (só continue lendo se os paragrafos anteriores não te satisfizeram)... dentro da pasta plugins da pasta do eclipse, existe uma pasta com nome mais ou menos assim 'org.eclipse.jst.server.generic.jboss_1.6.1.v200904151730', aí dentro tem uma pasta 'servers' com alguns xmls, neles ficam as validações para criação de um novo servidor no eclipse, alterando esse xmls da forma correta você nunca mais terá esse problema... você encontrará linhas como essas:
for validation to work this library is defined as an archive
exclude name="server/default/lib/mail.jar"
se estiver interessado em testar, exclua essas linhas e outras que possam inteferir, no momento estou sem tempo para ver isso mais a fundo, mas fica a dica.
Valeeu!
para resolver é fácil, basta dentro da pasta 'server' dentro do seu jboss, criar uma pasta chamada 'default', dentro dela criar uma pasta chamada 'lib', e por fim, dentro da pasta lib é necessário criar um arquivo chamado mail.jar (pegue qualquer arquivo .jar, cole lá e renomeie, ou então crie um arquivo de texto 'texto.txt' e renomeie para 'mail.jar')
assim, você passa da validação e pode usar o seu contexto normamente!
Existe uma forma mais complexa para resolver isso (só continue lendo se os paragrafos anteriores não te satisfizeram)... dentro da pasta plugins da pasta do eclipse, existe uma pasta com nome mais ou menos assim 'org.eclipse.jst.server.generic.jboss_1.6.1.v200904151730', aí dentro tem uma pasta 'servers' com alguns xmls, neles ficam as validações para criação de um novo servidor no eclipse, alterando esse xmls da forma correta você nunca mais terá esse problema... você encontrará linhas como essas:
for validation to work this library is defined as an archive
exclude name="server/default/lib/mail.jar"
se estiver interessado em testar, exclua essas linhas e outras que possam inteferir, no momento estou sem tempo para ver isso mais a fundo, mas fica a dica.
Valeeu!
quinta-feira, 4 de março de 2010
documentar identar formatar flex
Aeww,
Existe um plugin para o eclipse que ajuda muito na hora de documentar, identar e/ou formatar o código flex... é o flexprettyprintcommand que pode ser baixado no link abaixo:
http://sourceforge.net/projects/flexformatter/files/
Se você quer documentar seu código flex você pode dar uma olhada nesse pdf que vai te ajudar um pouco também...
http://blog.dclick.com.br/wp-content/uploads/documentando-actionscript-e-mxml-v10.pdf
vaaleu!
Existe um plugin para o eclipse que ajuda muito na hora de documentar, identar e/ou formatar o código flex... é o flexprettyprintcommand que pode ser baixado no link abaixo:
http://sourceforge.net/projects/flexformatter/files/
Se você quer documentar seu código flex você pode dar uma olhada nesse pdf que vai te ajudar um pouco também...
http://blog.dclick.com.br/wp-content/uploads/documentando-actionscript-e-mxml-v10.pdf
vaaleu!
ícones flex
Eu estava querendo customizar um radiobutton e colocar ícones diferentes quando o mouse estivesse em cima, quando estivesse selecionado, essas coisas... em Flex isso é muito fácil, basta usar as propriedades da tabela abaixo...
uma breve explicação...
* quando a propriedade começa com 'selected' (ex: selectedDownSkin) altera o ícone apenas se ele estiver selecionado, caso não começe (ex: downSkin) altera o ícone apenas se ele não estiver selecionado.
* quando termina com 'Skin' (ex: disabledSkin) ele não altera o ícone em si, e sim o plano de fundo, atrás do ícone, alterando o alpha você pode verificar isso, já se terminar com 'Icon' (ex: disabledIcon) ele altera o ícone mesmo.
* se tiver 'down' no nome (ex: downIcon) altera o ícone quando ele for clicado
* se tiver 'disabled' no nome (ex: disabledIcon) altera o ícone quando ele estiver desativado (enable = false)
* se tiver 'over' no nome (ex: selectedOverIcon) altera o ícone quando o mouse passar por cima
* se tiver 'up' no nome (ex: upSkin) altera o ícone quando o mouse não estiver sobre o ícone
uma breve explicação...
* quando a propriedade começa com 'selected' (ex: selectedDownSkin) altera o ícone apenas se ele estiver selecionado, caso não começe (ex: downSkin) altera o ícone apenas se ele não estiver selecionado.
* quando termina com 'Skin' (ex: disabledSkin) ele não altera o ícone em si, e sim o plano de fundo, atrás do ícone, alterando o alpha você pode verificar isso, já se terminar com 'Icon' (ex: disabledIcon) ele altera o ícone mesmo.
* se tiver 'down' no nome (ex: downIcon) altera o ícone quando ele for clicado
* se tiver 'disabled' no nome (ex: disabledIcon) altera o ícone quando ele estiver desativado (enable = false)
* se tiver 'over' no nome (ex: selectedOverIcon) altera o ícone quando o mouse passar por cima
* se tiver 'up' no nome (ex: upSkin) altera o ícone quando o mouse não estiver sobre o ícone
Propriedade | Apenas selecionado | Altera apenas o fundo | Momento |
---|---|---|---|
disabledIcon | Não | Não | enable = false |
disabledSkin | Não | Sim | enable = false |
downIcon | Não | Não | com o click do mouse em cima |
downSkin | Não | Sim | com o click do mouse em cima |
overIcon | Não | Não | com o mouse em cima |
overSkin | Não | Sim | com o mouse em cima |
upIcon | Não | Não | sem o mouse em cima |
upSkin | Não | Sim | sem o mouse em cima |
selectedDisabledIcon | Sim | Não | enable = false |
selectedDisabledSkin | Sim | Sim | enable = false |
selectedDownIcon | Sim | Não | com o click do mouse em cima |
selectedDownSkin | Sim | Sim | com o click do mouse em cima |
selectedOverIcon | Sim | Não | com o mouse em cima |
selectedOverSkin | Sim | Sim | com o mouse em cima |
selectedUpIcon | Sim | Não | sem o mouse em cima |
selectedUpSkin | Sim | Sim | sem o mouse em cima |
domingo, 28 de fevereiro de 2010
asc ii ubuntu
☯ ☔ ☎ ♥ ☺ ☠
eu estava querendo usar caracteres especiais mas o alt+255 só funciona no windows... no ubuntu você tem que digitar ctrl + shift + U + 255
255 é um exemplo, você tem que digitar o número hexadecimal correspondente ao caracter...
Acesse acessórios/mapa de caracteres e você terá a lista com todos os caracteres... se quiser algum, clique duas vezes e você poderá copiá-lo ou ver seu código hexadecimal para usar o ctrl shift u... se quiser pesquisar o código hexadecimal de algum caracter, você pode pesquisar no mapa apertando ctrl + F
vaaaleu!
eu estava querendo usar caracteres especiais mas o alt+255 só funciona no windows... no ubuntu você tem que digitar ctrl + shift + U + 255
255 é um exemplo, você tem que digitar o número hexadecimal correspondente ao caracter...
Acesse acessórios/mapa de caracteres e você terá a lista com todos os caracteres... se quiser algum, clique duas vezes e você poderá copiá-lo ou ver seu código hexadecimal para usar o ctrl shift u... se quiser pesquisar o código hexadecimal de algum caracter, você pode pesquisar no mapa apertando ctrl + F
vaaaleu!
terça-feira, 23 de fevereiro de 2010
nothing was specified to be included in the library
Olá,
Ao criar um Flex Library Project me deparei com o erro "nothing was specified to be included in the library"
eu tinha colado uma pasta 'src' que tinha os fontes do projeto library, e apareceu esse erro...
para corrigir fiz o seguinte:
Cliquei com botão direito no projeto > properties > Flex Library Build Path'
Na aba 'classes' selecionei tudo. E em "Main source folder" (Lá embaixo) selecionei a pasta 'src'
Pronto, problema resolvido.
Vaaleu!!!
Ao criar um Flex Library Project me deparei com o erro "nothing was specified to be included in the library"
eu tinha colado uma pasta 'src' que tinha os fontes do projeto library, e apareceu esse erro...
para corrigir fiz o seguinte:
Cliquei com botão direito no projeto > properties > Flex Library Build Path'
Na aba 'classes' selecionei tudo. E em "Main source folder" (Lá embaixo) selecionei a pasta 'src'
Pronto, problema resolvido.
Vaaleu!!!
quinta-feira, 18 de fevereiro de 2010
Números com vírgulas no Squirrel
Estava lendo o faq.html do Squirrel (pasta de instalação do squirrel/doc/faq.html) e achei algo legal..
Muitas vezes eu ia copiar o valor de um campo numérico de alguma tabela, só que ele tinha um monte de vírgulas, então depois de colar eu tinha que tirar as vírgulas...
Não é um puta problema, mas eu não gostava... para tirar as vírgular basta acessar o "Controle de tipos de dados" (Canto superior esquerdo 'File > Open Global Preferences > Data Type Control tab' ou se for em português 'Arquivo > Preferências Globais > Controle de tipos de dados').
Lá é só descer até "FLOAT, REAL, DOUBLE, NUMERIC" e então selecionar "Use default format".
Pronto! Nada de vírgulas.
As vírgulas são boas para facilitar a visualização, mas às vezes encomodam, enfim, se quiser tirá-las, agora você já sabe como fazer.
té mais (:
Muitas vezes eu ia copiar o valor de um campo numérico de alguma tabela, só que ele tinha um monte de vírgulas, então depois de colar eu tinha que tirar as vírgulas...
Não é um puta problema, mas eu não gostava... para tirar as vírgular basta acessar o "Controle de tipos de dados" (Canto superior esquerdo 'File > Open Global Preferences > Data Type Control tab' ou se for em português 'Arquivo > Preferências Globais > Controle de tipos de dados').
Lá é só descer até "FLOAT, REAL, DOUBLE, NUMERIC" e então selecionar "Use default format".
Pronto! Nada de vírgulas.
As vírgulas são boas para facilitar a visualização, mas às vezes encomodam, enfim, se quiser tirá-las, agora você já sabe como fazer.
té mais (:
Squirrel não abre
Fala galera,
Hoje fui abrir o SQuirreL SQL Client e.. ele não abriu : /
O problema estava na pasta onde ficam as preferências e configurações do squirrel (esta pasta geralmente fica em /home/ no linux e C:\Documents and Settings\ no Windows, na minha máquina está em /home/adriano/.squirrel-sql)...
Como o problema não estava na instalação do Squirrel não adiantou instalar novamente...
Provavelmente, excluindo esta pasta (.squirrel-sql) resolveria o problema, porém, eu perderia minhas preferências. Então excluí apenas o arquivo SQLAliases23_treeStructure.xml e ao iniciar o squirrel novamente, tudo funcionou perfeitamente!
Dentro da pasta de instalação do squirrel tem uma pasta chamada doc com o arquivo faq.html... nele há muitas informações que podem te ajudar com problemas no squirrel.
Vaaaleu!!
Hoje fui abrir o SQuirreL SQL Client e.. ele não abriu : /
O problema estava na pasta onde ficam as preferências e configurações do squirrel (esta pasta geralmente fica em /home/ no linux e C:\Documents and Settings\ no Windows, na minha máquina está em /home/adriano/.squirrel-sql)...
Como o problema não estava na instalação do Squirrel não adiantou instalar novamente...
Provavelmente, excluindo esta pasta (.squirrel-sql) resolveria o problema, porém, eu perderia minhas preferências. Então excluí apenas o arquivo SQLAliases23_treeStructure.xml e ao iniciar o squirrel novamente, tudo funcionou perfeitamente!
Dentro da pasta de instalação do squirrel tem uma pasta chamada doc com o arquivo faq.html... nele há muitas informações que podem te ajudar com problemas no squirrel.
Vaaaleu!!
terça-feira, 16 de fevereiro de 2010
Descompilador java - plugin eclipse
daeew
agora vou mostrar como descompilar .class diretamente do eclipse, existe um plugin que faz esse serviço, para usá-lo siga esses passos:
Baixe o jad (de acordo com o sistema operacional que você usa) em http://www.varaneckas.com/jad e descompacte em alguma pasta da sua máquina. Por exemplo, eu como uso ubuntu baixei o "Jad 1.5.8e for Linux on Intel platform" e descompactei em "/home/adriano/jad"
Depois, baixe o plugin para o eclipse em http://sourceforge.net/projects/jadclipse/ e cole-o na pasta plugins, dentro da pasta de instalação do eclipse.
Reinicie o eclipse.
No eclipse, em "Window > Preferences > Java > JadClipse" Configure o primeiro campo com o caminho onde o jad foi instalado. Aqui está /home/adriano/jad/jad, em uma máquina Windows ficaria algo como C:/jad/jad.exe
Talvez tenha que reiniciar o eclipse, não tenho certeza, eu reiniciei.
Teste! Abra qualquer arquivo .class no eclipse que lhe será mostrado o descompilado.
Aqui deu o seguinte problema: error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory
Para resolver fiz o seguinte:
Baixei o arquivo http://packages.ubuntu.com/dapper/i386/libstdc++2.10-glibc2.2/download
Via terminal dei 2 comandos:
sudo dpkg --force-architecture -i libstdc++2.10-glibc2.2_2.95.4-24_i386.deb
sudo ldconfig
E pronto, ao reiniciar o eclipse, tudo estava ok.
Vaaleu!!
agora vou mostrar como descompilar .class diretamente do eclipse, existe um plugin que faz esse serviço, para usá-lo siga esses passos:
Baixe o jad (de acordo com o sistema operacional que você usa) em http://www.varaneckas.com/jad e descompacte em alguma pasta da sua máquina. Por exemplo, eu como uso ubuntu baixei o "Jad 1.5.8e for Linux on Intel platform" e descompactei em "/home/adriano/jad"
Depois, baixe o plugin para o eclipse em http://sourceforge.net/projects/jadclipse/ e cole-o na pasta plugins, dentro da pasta de instalação do eclipse.
Reinicie o eclipse.
No eclipse, em "Window > Preferences > Java > JadClipse" Configure o primeiro campo com o caminho onde o jad foi instalado. Aqui está /home/adriano/jad/jad, em uma máquina Windows ficaria algo como C:/jad/jad.exe
Talvez tenha que reiniciar o eclipse, não tenho certeza, eu reiniciei.
Teste! Abra qualquer arquivo .class no eclipse que lhe será mostrado o descompilado.
Aqui deu o seguinte problema: error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory
Para resolver fiz o seguinte:
Baixei o arquivo http://packages.ubuntu.com/dapper/i386/libstdc++2.10-glibc2.2/download
Via terminal dei 2 comandos:
sudo dpkg --force-architecture -i libstdc++2.10-glibc2.2_2.95.4-24_i386.deb
sudo ldconfig
E pronto, ao reiniciar o eclipse, tudo estava ok.
Vaaleu!!
quinta-feira, 11 de fevereiro de 2010
Simplifique suas labelfunctions - Flex
Quem nunca teve que escrever um mooonte de label functions para um datagrid e depois viu que todas fazem a mesma coisa??
Pensando nisso, resolvi fazer uma classe bem genérica que auxiliasse nesse problema...
Assim se você quiser pegar um objeto dentro de um objeto (o nome do vendedor por exemplo), basta no datefield colocar "seller.name"
e se você quiser concatenar um código e uma descrição? é só colocar no datefield o nome dos atributos separados por hífen "code-description"
E formatações de preço, data, entre outras coisas, por que isso também não pode ser centralizado?
Acesse http://localhost8080.com.br/labelfunctions/main.swf e veja como isso funciona!
Na classe LabelFunctions há vários métodos para auxiliar você, método para concatenar, pegar um objeto dentro de outro, formatações, etc...
Como sempre, para ver o código basta apertar o botão direito após abrir a página acima e clicar em 'view source'.
Vaaaleu!
Pensando nisso, resolvi fazer uma classe bem genérica que auxiliasse nesse problema...
Assim se você quiser pegar um objeto dentro de um objeto (o nome do vendedor por exemplo), basta no datefield colocar "seller.name"
e se você quiser concatenar um código e uma descrição? é só colocar no datefield o nome dos atributos separados por hífen "code-description"
E formatações de preço, data, entre outras coisas, por que isso também não pode ser centralizado?
Acesse http://localhost8080.com.br/labelfunctions/main.swf e veja como isso funciona!
Na classe LabelFunctions há vários métodos para auxiliar você, método para concatenar, pegar um objeto dentro de outro, formatações, etc...
Como sempre, para ver o código basta apertar o botão direito após abrir a página acima e clicar em 'view source'.
Vaaaleu!
Menu ocutável Flex
Fala gente, mais um pouco de flex...
Vendo alguma coisas na net e fazendo algumas melhorias eu fiz um menu ocultável em flex, acesse http://localhost8080.com.br/panel/main.swf e veja como ficou, sinta-se à vontade para usar, alterar, chingar, dançar.
Para ver o código basta apertar o botão direito após abrir a página acima e clicar em 'view source'.
té a próxima!
Vendo alguma coisas na net e fazendo algumas melhorias eu fiz um menu ocultável em flex, acesse http://localhost8080.com.br/panel/main.swf e veja como ficou, sinta-se à vontade para usar, alterar, chingar, dançar.
Para ver o código basta apertar o botão direito após abrir a página acima e clicar em 'view source'.
té a próxima!
terça-feira, 9 de fevereiro de 2010
Mural de recados em Flex
Olá,
Ao ver o exemplo dashboard da adobe resolvi mexer nele, ao baixar o fonte pude ver que era muito complexo, então eu fui retirando toda a complexidade do código, retirei as partes desnecessárias e consegui simplificar bastante, como exemplo fiz um mural de recados, uma espécie de quadro de post-it, ainda quero melhorá-lo mais, porém, já está bem interessante compartilho para quem quiser utilizar.
http://localhost8080.com.br/dashboard/main.swf
Para ver o código basta apertar o botão direito após abrir a página acima e clicar em 'view source'.
Está bem componentizado, para customizar você mexerá apenas no pacote 'example'.
té mais ( :
Ao ver o exemplo dashboard da adobe resolvi mexer nele, ao baixar o fonte pude ver que era muito complexo, então eu fui retirando toda a complexidade do código, retirei as partes desnecessárias e consegui simplificar bastante, como exemplo fiz um mural de recados, uma espécie de quadro de post-it, ainda quero melhorá-lo mais, porém, já está bem interessante compartilho para quem quiser utilizar.
http://localhost8080.com.br/dashboard/main.swf
Para ver o código basta apertar o botão direito após abrir a página acima e clicar em 'view source'.
Está bem componentizado, para customizar você mexerá apenas no pacote 'example'.
té mais ( :
quarta-feira, 3 de fevereiro de 2010
editor mxml parou de funcionar
Após atualizar o o flexbuilder para o alpha 5 no ubuntu, o editor do mxml parou de funcionar...
Esse é um problema das versões mais novas do eclipse, no europa funciona, mas tem um jeito de resolver...
Baixe o jar com.adobe.flexbuilder.editors.derived_3.0.194161.jar (clique aqui para baixar) ele é um jar de uma versão antiga do eclpse, cole-o emPastaDoPluginDoFlexBuilder/eclipse/plugins
Terá um outro jar com o mesmo nome, porém com versão diferente, delete o antigo e altere a versão no nome do arquivo novo para a mesma versão do arquivo antigo
abra esse jar novo e altere a versão no manifest.mf também
inicie o eclipse com –clean e tudo estará ok.
Vaaaleu!!
Esse é um problema das versões mais novas do eclipse, no europa funciona, mas tem um jeito de resolver...
Baixe o jar com.adobe.flexbuilder.editors.derived_3.0.194161.jar (clique aqui para baixar) ele é um jar de uma versão antiga do eclpse, cole-o em
Terá um outro jar com o mesmo nome, porém com versão diferente, delete o antigo e altere a versão no nome do arquivo novo para a mesma versão do arquivo antigo
abra esse jar novo e altere a versão no manifest.mf também
inicie o eclipse com –clean e tudo estará ok.
Vaaaleu!!
flexbuilder expirou - ubuntu (não é crack)
Pessoal, meu flexbuilder tinha expirado e consegui resolver da seguinte forma...
- Desinstalei o flex builder atual (que é o alpha 4)... na pasta de instalação tem um uninstall...
- Depois instalei o alpha 5 (procure no google para fazer download). Depois de baixar basta, via terminal, digitar "sh flexbuilder_linux_install_a5_112409.bin” na pasta onde está o instalador.
E pronto, mais 465 dias de licença.
- Desinstalei o flex builder atual (que é o alpha 4)... na pasta de instalação tem um uninstall...
- Depois instalei o alpha 5 (procure no google para fazer download). Depois de baixar basta, via terminal, digitar "sh flexbuilder_linux_install_a5_112409.bin” na pasta onde está o instalador.
E pronto, mais 465 dias de licença.
segunda-feira, 1 de fevereiro de 2010
Não consigo fazer login no ubuntu
Boa tarde, cheguei na tela de login, porém, ao digitar usuário e senha, a tela fica preta e volta para a tela de login : /
Para resolver acessei o gnome no MODO DE SEGURANÇA (Na tela de login, após escolher o usuário (Ubuntu 9.10), na barra inferior no campo "sessão" escolha "gnome (modo de segurança)").
Atualize o ubuntu (Sistema > Administração > Gerenciador de Atualizações)
Faça logoff, faça login novamente com a sessão Gnome (sem modo de segurança) e pronto.
Isso funcionou para mim... caso não dê certo para você, te dou mais umas dicas:
Na tela de login aperte ctrl+alt+F2 e faça LOGIN PELO MODO TEXTO, basta digitar o usuário, apertar enter e digitar a senha, enter novamente e então você saberá se o problema não é o seu usuário.
Se você conseguir fazer login você pode VISUALIZAR UM LOG que talvez lhe ajude:
cd /var/log
cat messages
Se você não conseguir fazer login, talvez seja necessário TROCAR A SENHA, para isso, faça BOOT COM O CD DO UBUNTU, via terminal, faça o seguinte:
sudo su (faz você ser o root)
cd /media/ (move para a pasta /media)
ls (lista o conteúdo da pasta atual)
chroot /media/disk (troque o 'disk' por algum valor que aparece na saída do ls)
passwd nomedousuario (coloque o nome do usuário que você quer trocar a senha)
(digite a senha atual e depois a nova senha duas vezes)
reinicie o computador (não esqueça de tirar o CD do ubuntu)
faça login com a nova senha
Caso você não consiga fazer login, tente CRIAR UM NOVO USUÁRIO, com os seguintes comandos via terminal fazendo boot com o cd do ubuntu:
sudo su (faz você ser o root)
cd /media/ (move para a pasta /media)
ls (lista o conteúdo da pasta atual)
chroot /media/disk (troque o 'disk' por algum valor que aparece na saída do ls)
adduser nome (cria o usuário)
adduser nome admin (adiciona o usuário no grupo admin)
chown -R nome /home/nome (torna o novo usuário proprietário da sua pasta no home)
reinicie o computador (não esqueça de tirar o CD do ubuntu)
faça login com o novo usuário.
Para resolver acessei o gnome no MODO DE SEGURANÇA (Na tela de login, após escolher o usuário (Ubuntu 9.10), na barra inferior no campo "sessão" escolha "gnome (modo de segurança)").
Atualize o ubuntu (Sistema > Administração > Gerenciador de Atualizações)
Faça logoff, faça login novamente com a sessão Gnome (sem modo de segurança) e pronto.
Isso funcionou para mim... caso não dê certo para você, te dou mais umas dicas:
Na tela de login aperte ctrl+alt+F2 e faça LOGIN PELO MODO TEXTO, basta digitar o usuário, apertar enter e digitar a senha, enter novamente e então você saberá se o problema não é o seu usuário.
Se você conseguir fazer login você pode VISUALIZAR UM LOG que talvez lhe ajude:
cd /var/log
cat messages
Se você não conseguir fazer login, talvez seja necessário TROCAR A SENHA, para isso, faça BOOT COM O CD DO UBUNTU, via terminal, faça o seguinte:
sudo su (faz você ser o root)
cd /media/ (move para a pasta /media)
ls (lista o conteúdo da pasta atual)
chroot /media/disk (troque o 'disk' por algum valor que aparece na saída do ls)
passwd nomedousuario (coloque o nome do usuário que você quer trocar a senha)
(digite a senha atual e depois a nova senha duas vezes)
reinicie o computador (não esqueça de tirar o CD do ubuntu)
faça login com a nova senha
Caso você não consiga fazer login, tente CRIAR UM NOVO USUÁRIO, com os seguintes comandos via terminal fazendo boot com o cd do ubuntu:
sudo su (faz você ser o root)
cd /media/ (move para a pasta /media)
ls (lista o conteúdo da pasta atual)
chroot /media/disk (troque o 'disk' por algum valor que aparece na saída do ls)
adduser nome (cria o usuário)
adduser nome admin (adiciona o usuário no grupo admin)
chown -R nome /home/nome (torna o novo usuário proprietário da sua pasta no home)
reinicie o computador (não esqueça de tirar o CD do ubuntu)
faça login com o novo usuário.
ubuntu - mountall: symbol lookup error
Olá, fui reiniciar minha máquina, porém, ao ligar me deparei com um problema:
mountall: symbol lookup error: mountall: undefined symbol: udev_monitor_filter_add_match_subsytem_devtype
init: mountall main process (313) terminated with status 127
Eu estava um tempo SEM ATUALIZAR O UBUNTU (ainda estava no 9.04)... acredito que devido a isso aconteceu o problema, então fiz o seguinte:
- Fiz boot com o CD do ubuntu
- Abri o terminal e digitei:
sudo su (faz você ser o root)
cd / (move para raiz)
sudo fdisk -l (lista os dispositivos, assim dá para descobrir a partição root)
[...]
Dispositivo Boot Início Fim Blocos Id Sistema
/dev/sdb1 * 1 10942 87891583+ 83 Linux
/dev/sdb2 10943 19457 68396737+ 5 Estendida
/dev/sdb5 10943 11550 4883728+ 82 Linux swap / Solaris
/dev/sdb6 11551 19457 63512946 83 Linux
mkdir /mnt/hello (Cria uma pasta onde será montada a partição root)
mount /dev/sdb6 /mnt/hello (Monta a partição root)
chroot /mnt/hello (Muda o diretório raiz (do CD para o HD))
apt-get update (Obtém novas listas de pacotes)
apt-get dist-upgrade (Atualiza a distribuição)
dpkg --configure -a (Configura algumas coisas)
Após isso reiniciei e estava OK. Espero que isso ajude mais pessoas.
Até a próxima.
mountall: symbol lookup error: mountall: undefined symbol: udev_monitor_filter_add_match_subsytem_devtype
init: mountall main process (313) terminated with status 127
Eu estava um tempo SEM ATUALIZAR O UBUNTU (ainda estava no 9.04)... acredito que devido a isso aconteceu o problema, então fiz o seguinte:
- Fiz boot com o CD do ubuntu
- Abri o terminal e digitei:
sudo su (faz você ser o root)
cd / (move para raiz)
sudo fdisk -l (lista os dispositivos, assim dá para descobrir a partição root)
[...]
Dispositivo Boot Início Fim Blocos Id Sistema
/dev/sdb1 * 1 10942 87891583+ 83 Linux
/dev/sdb2 10943 19457 68396737+ 5 Estendida
/dev/sdb5 10943 11550 4883728+ 82 Linux swap / Solaris
/dev/sdb6 11551 19457 63512946 83 Linux
mkdir /mnt/hello (Cria uma pasta onde será montada a partição root)
mount /dev/sdb6 /mnt/hello (Monta a partição root)
chroot /mnt/hello (Muda o diretório raiz (do CD para o HD))
apt-get update (Obtém novas listas de pacotes)
apt-get dist-upgrade (Atualiza a distribuição)
dpkg --configure -a (Configura algumas coisas)
Após isso reiniciei e estava OK. Espero que isso ajude mais pessoas.
Até a próxima.
terça-feira, 26 de janeiro de 2010
localhost8080
Olá, seja muito bem-vindo ao blog localhost8080!!!
Aqui contarei as soluções que encontro nos meus problemas do dia-a-dia com java, flex, ubuntu... falerei sobre novas tecnologias, padrões de projeto, tendências e o que mais me der vontade.
: ~ )
Aqui contarei as soluções que encontro nos meus problemas do dia-a-dia com java, flex, ubuntu... falerei sobre novas tecnologias, padrões de projeto, tendências e o que mais me der vontade.
: ~ )
Assinar:
Postagens (Atom)