Maciel Escudero Bombonato
TI com foco em desenvolvimento.
terça-feira, 3 de agosto de 2021
terça-feira, 18 de outubro de 2016
Rocket.chat no Ubuntu 16: problemas nas notificações
Mais uma da linha para lembrança futura.
Quando atualizei minha máquina para o ubuntu 16 o rocket.chat começou a enviar as mensagens de notificação no formato de alerts clássicos (o que atrapalha bastante).
Procurando por uma solução para este problema, achei o seguinte post: http://askubuntu.com/questions/766306/notifications-not-showing-up-properly-in-slack-and-other-electron-apps que basicamente indica que devemos executar o seguinte no console:
Funcionou perfeitamente e as notificações passaram a ser aquelas "bunitinhas" no canto da tela.
Quando atualizei minha máquina para o ubuntu 16 o rocket.chat começou a enviar as mensagens de notificação no formato de alerts clássicos (o que atrapalha bastante).
Procurando por uma solução para este problema, achei o seguinte post: http://askubuntu.com/questions/766306/notifications-not-showing-up-properly-in-slack-and-other-electron-apps que basicamente indica que devemos executar o seguinte no console:
$ sudo touch /usr/lib/libunity-electron_notification_fix
Funcionou perfeitamente e as notificações passaram a ser aquelas "bunitinhas" no canto da tela.
segunda-feira, 5 de setembro de 2016
Copiar chave pública SSH sem precisar do tradicional copy/paste
Bom, este micro artigo é mais um da série "vou precisar disso denovo, mas vou esquecer".
Depois que geramos uma chave SSH em uma máquina unix:
$ ssh-keygen -t rsa
Vamos precisar copiar a chave pública para inserí-la em alguns lugares.
Bom, existe um comandinho mágico no OS X que faz com que não precisemos selecionar, e usar o Ctrl+C (Cmd+C no OS X) para pegar o conteúdo da chave, para isso basta usar o seguinte comando:
$ cat ~/.ssh/id_rsa.pub | pbcopy
O pbcopy faz todo o trabalho sujo de copiar o conteúdo que devemos colocar no github (por exemplo).
Beleza, bora fazer isso no Linux então. SQN.
Para que isso funcione no linux (sim, existe similar), é necessário:
1- Instalar o xclip (ele faz um trabalho similar):
$ sudo apt-get install xclip
2- Agora (eu recomendo) é só criar um alias no seu arquivo de profile (.profile ou .bashrc dentro da pasta home do seu usuário), para isso, adicione a seguinte linha em um desses arquivos:
alias pbcopy="xclip -selection clipboard"
Depois, no terminal execute o seguinte comando (supondo que isso foi inserido no .bashrc):
$ source ~/.bashrc
Agora é só ficar feliz e utilizar no seu linux o mesmo comando feito no OS X.
OBS.: Depois de executar o comando é só ir até o local necessário e colar o conteúdo.
Depois que geramos uma chave SSH em uma máquina unix:
$ ssh-keygen -t rsa
Vamos precisar copiar a chave pública para inserí-la em alguns lugares.
Bom, existe um comandinho mágico no OS X que faz com que não precisemos selecionar, e usar o Ctrl+C (Cmd+C no OS X) para pegar o conteúdo da chave, para isso basta usar o seguinte comando:
$ cat ~/.ssh/id_rsa.pub | pbcopy
O pbcopy faz todo o trabalho sujo de copiar o conteúdo que devemos colocar no github (por exemplo).
Beleza, bora fazer isso no Linux então. SQN.
Para que isso funcione no linux (sim, existe similar), é necessário:
1- Instalar o xclip (ele faz um trabalho similar):
$ sudo apt-get install xclip
2- Agora (eu recomendo) é só criar um alias no seu arquivo de profile (.profile ou .bashrc dentro da pasta home do seu usuário), para isso, adicione a seguinte linha em um desses arquivos:
alias pbcopy="xclip -selection clipboard"
Depois, no terminal execute o seguinte comando (supondo que isso foi inserido no .bashrc):
$ source ~/.bashrc
Agora é só ficar feliz e utilizar no seu linux o mesmo comando feito no OS X.
OBS.: Depois de executar o comando é só ir até o local necessário e colar o conteúdo.
quarta-feira, 31 de agosto de 2016
Problemas com segundo monitor no Mac OS X
Há um bom tempo não escrevo, na verdade, uso o blog só pra servir como referência futura (pra quando eu esquecer de algo que seria bom lembrar. rs).
Então, Maciel, caso você tenha esquecido como se faz isso de novo, lá vai.
Caso alguém mais esteja lendo e usa o Mac OS X e tem um monitor Samsung SyncMaster 933sn (não recomendo, monitor zuadinho).
Seu Mac OS provavelmente não vai detectar a resolução mais apropriada para o monitor e de quebra vai te empurrar um 800x600 (sim, é verdade).
A dica é:
Vá nas configurações de monitor (Displays) em preferências do sistema. Isso fará com que duas telas se abram, uma delas no monitor zuado. Bom, a opção Default for display provavelmente estará selecionada, nesse momento, segure a tecla option (alt) e depois clique em Scaled.
Para esse monitor a melhor opção seria 1360x768 (não tem essa no Mac) a melhor opção que achei (que funcionou) foi 1280x768. Fica um pouco distorcido, mas dá pra ler log de console de boa. ;-)
Então, Maciel, caso você tenha esquecido como se faz isso de novo, lá vai.
Caso alguém mais esteja lendo e usa o Mac OS X e tem um monitor Samsung SyncMaster 933sn (não recomendo, monitor zuadinho).
Seu Mac OS provavelmente não vai detectar a resolução mais apropriada para o monitor e de quebra vai te empurrar um 800x600 (sim, é verdade).
A dica é:
Vá nas configurações de monitor (Displays) em preferências do sistema. Isso fará com que duas telas se abram, uma delas no monitor zuado. Bom, a opção Default for display provavelmente estará selecionada, nesse momento, segure a tecla option (alt) e depois clique em Scaled.
Para esse monitor a melhor opção seria 1360x768 (não tem essa no Mac) a melhor opção que achei (que funcionou) foi 1280x768. Fica um pouco distorcido, mas dá pra ler log de console de boa. ;-)
sexta-feira, 24 de julho de 2015
IntelliJ IDEA rodando com JVM mais nova no MAC OS X
Caso tenha atualizado seu MAC OS X e após isso passou a receber a mensagem que o IntelliJ IDEA precisa rodar em uma versão legada (legacy) da JVM, a solução para mim foi a seguinte.
No terminal:
OBS.: O número 14 no caminho acima é a versão do meu IntelliJ, mude esse número para a sua versão da aplicação.
Após isso, digite "/" para habilitar a busca e em seguida digite "JVMVersion" e "enter".
Note que logo abaixo da string encontrada vc verá a versão 1.6*. Mude o 6 por 8 e em seguida salve o documento "esc + wq + enter".
Tente abrir o Intellij novamente. ;-)
No terminal:
cd /Applications/IntelliJ\ IDEA\ 14.app/Contents
vi Info.plist
OBS.: O número 14 no caminho acima é a versão do meu IntelliJ, mude esse número para a sua versão da aplicação.
Após isso, digite "/" para habilitar a busca e em seguida digite "JVMVersion" e "enter".
Note que logo abaixo da string encontrada vc verá a versão 1.6*. Mude o 6 por 8 e em seguida salve o documento "esc + wq + enter".
Tente abrir o Intellij novamente. ;-)
terça-feira, 27 de agosto de 2013
Problemas com upload de arquivos utilizando spring MVC
Só uma dica rápida para aquele caso que está tudo certo e quando o Spring valida o conteúdo do campo de arquivos e vc recebe a seguinte mensagem:
Confirme se o formulário está com a propriedade enctype...
Este pequeno detalhe causou o erro acima. ;-)
Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.web.multipart.MultipartFile' for property 'XXX'
Confirme se o formulário está com a propriedade enctype...
<form action="URL/" enctype="multipart/form-data" id="form" method="post">
Este pequeno detalhe causou o erro acima. ;-)
terça-feira, 26 de março de 2013
Apache não sobe na porta 80
Instalei o Apache algumas vezes pra rodar algumas aplicações de teste no meu ambiente de desenvolvimento.
Normalmente eu não conseguia fazer com que ele subisse na porta 80 até descobrir que o Skype era o responsável por isso (o próprio Apache entrega isso).
Pra acabar com este conflito, no Skype, vá até Ferramentas, Opções e Conexão, em seguida desative o primeiro check box (como na imagem abaixo), clique em salvar e reinicie o skype.
Agora este não é mais um problema para subir o Apache.
Normalmente eu não conseguia fazer com que ele subisse na porta 80 até descobrir que o Skype era o responsável por isso (o próprio Apache entrega isso).
Pra acabar com este conflito, no Skype, vá até Ferramentas, Opções e Conexão, em seguida desative o primeiro check box (como na imagem abaixo), clique em salvar e reinicie o skype.
Agora este não é mais um problema para subir o Apache.
terça-feira, 12 de março de 2013
jquery-chosen - Busca de termos não funciona
Incluindo o chosen em algumas de minhas páginas (sistemas) notei que um probleminha estava acontecendo. Toda vez que eu tentava preencher com alguns caracteres para ele filtrar os termos e facilitar minha escolha eu recebia a mensagem de que o termo não foi encontrado, porém, quando o termo possuia mais de uma palavra e eu preenchia os caracteres relativos a esta segunda palavra, a busca funcionava.
A solução para isso é bem simples, basta retirar a identação deste ponto da página, por exemplo, quando colocado conforme abaixo:
<option>
Valor a escolher
</option>
Se você preencher o termo de busca com "esco" ele vai encontrar o termo, porém, se colocar "valo" o termo não será encontrado.
Agora, sem a identação:
Agora, sem a identação:
<option>Valor a escolher</option>
A busca funciona normalmente.
segunda-feira, 19 de novembro de 2012
Log de Auditoria - JPA + Spring
Vira e volta, aparecem sistemas onde é necessário fazer um esquema de log de auditoria para uma tabela ou várias.
Montei um esquema que pode ser facilmente extendido para outras tabelas do sistema, para fazê-lo, basta seguir os passos abaixo:
1- Criar um enum para representar as ações de banco:
2- Criar a entidade de log de auditoria:
3- Criar o repositório (DAO) e o serviço como está sendo feito no restante do sistema;
4- Criar o listener que será disparado pelo hibernate:
Observações:
1- O listener é disparado pelo mecanismo JPA. Uma vez que a classe não foi instanciada pelo Spring, as dependências não são injetadas e para resolver isso, podemos usar aspéctos (AOP) ou uma abordagem mais simples como a feita acima;
2- A lógica de recuperação do usuário logado (via consulta ou busca na sessão) está no serviço neste caso;
3- Alguns projetos adotam o uso da anotação
5- Anotar entidades que devem ser auditadas:
As entidades que devem ser auditadas recebem a anotação
Com isso, sempre que uma das operações monitoradas pelo listener acontecer, são as anotações que estão sobre os métodos:
Para que outra tabela/entidade seja autitada, basta repetir o passo 5 (incluir a anotação na entidade).
NOTA: Normalmente as entidades de um sistema extendem uma entidade base ou implementam uma interface para que um padrão "mínimo" seja seguido. Este exemplo foi construído considerando este caso, ou seja, as entidades extendem
Montei um esquema que pode ser facilmente extendido para outras tabelas do sistema, para fazê-lo, basta seguir os passos abaixo:
1- Criar um enum para representar as ações de banco:
public enum TransactionType {
CREATE, UPDATE, DELETE;
}
2- Criar a entidade de log de auditoria:
@Entity
@Table(name = "log_trace")
@AttributeOverride(name = "id", column = @Column(name = "log_trace_id"))
public class LogTrace extends BaseEntity {
@Column(name = "transaction_type", nullable = false)
@Enumerated(EnumType.STRING)
private TransactionType transactionType;
@Column(name = "entity_name", nullable = false)
private String entityName;
@Column(name = "registry_id", nullable = false)
private Long registryId;
@Column(name = "operation_date", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date operationDate;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "executed_by", nullable = false)
private User executedBy;
...getters e setters...
}
3- Criar o repositório (DAO) e o serviço como está sendo feito no restante do sistema;
4- Criar o listener que será disparado pelo hibernate:
public class LogTraceListener {
@Autowired
LogTraceService logTraceService;
@Autowired
UserService userService;
@PostRemove
void postDelete(BaseEntity e) {
createLog(TransactionType.DELETE, e);
}
@PostPersist
void postPersist(BaseEntity e) {
createLog(TransactionType.CREATE, e);
}
@PostUpdate
void postUpdate(BaseEntity e) {
createLog(TransactionType.UPDATE, e);
}
private void createLog(TransactionType transactionType, BaseEntity e) {
/*
* OBSERVAÇÃO 1.
*/
if (logTraceService == null) {
ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();
logTraceService = (LogTraceService) ctx.getBean("logTraceService");
}
/*
* OBSERVAÇÃO 2.
*/
User user = userService.getAuthenticatedUser();
LogTrace logTrace = new LogTrace();
/*
* OBSERVAÇÃO 3.
*/
String entityName = e.getClass().getAnnotation(Table.class).name();
if (entityName == null || entityName.isEmpty()) {
entityName = e.getClass().getSimpleName();
}
logTrace.setTransactionType(transactionType);
logTrace.setEntityName(entityName);
logTrace.setRegistryId(e.getId());
logTrace.setExecutedBy(user);
logTrace.setOperationDate(new Date());
logTraceService.save(logTrace);
}
}
Observações:
1- O listener é disparado pelo mecanismo JPA. Uma vez que a classe não foi instanciada pelo Spring, as dependências não são injetadas e para resolver isso, podemos usar aspéctos (AOP) ou uma abordagem mais simples como a feita acima;
2- A lógica de recuperação do usuário logado (via consulta ou busca na sessão) está no serviço neste caso;
3- Alguns projetos adotam o uso da anotação
@Table
, neste listener, coloquei uma lógica que abrange esta abordagem (como principal) e se não for o caso, o campo receberá o nome da entidade, por exemplo, "PedidoInterno", ao invés de "pedido_interno" (que é a forma como os bancos normalmente são modelados. Veja que nossa "LogTrace" teria o campo salvo como "log_trace";5- Anotar entidades que devem ser auditadas:
As entidades que devem ser auditadas recebem a anotação
@EntityListeners(value = LogTraceListener.class)
. Para melhorar a leitura da classe, indico colocar esta anotação logo após a anotação @Entity
ou @Table(name = "minha_entidade")
.Com isso, sempre que uma das operações monitoradas pelo listener acontecer, são as anotações que estão sobre os métodos:
@PostPersist, @PostUpdate e @PostRemove
, um registro será gerado na tabela de log de auditoria.Para que outra tabela/entidade seja autitada, basta repetir o passo 5 (incluir a anotação na entidade).
NOTA: Normalmente as entidades de um sistema extendem uma entidade base ou implementam uma interface para que um padrão "mínimo" seja seguido. Este exemplo foi construído considerando este caso, ou seja, as entidades extendem
BaseEntity
.
segunda-feira, 17 de setembro de 2012
App web Java + Maven não roda no ecplise
Imagine que você desenvolveu uma aplicação java com maven e versionou ela em algum repositório da vida, por exemplo, github, e ao instalá-la em outro computador ela apresenta a seguinte mensagem quando o servidor sobe:
Essas dicas foram retiradas do post 6210757 - java-lang-classnotfoundexception-org-springframework-web-context-contextloaderl no stackoverflow.com
Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
Consultando este problema na internet achei a seguinte solução:
- Abre as propriedades do projeto (botão direito no projeto e propriedades);
- Selecione "Deployment Assembly";
- Clique em "Add...";
- Selecione "Java Build Path Entries" e clique em "Next";
- Selecione "Maven Dependencies" e clique "Finish";
Essas dicas foram retiradas do post 6210757 - java-lang-classnotfoundexception-org-springframework-web-context-contextloaderl no stackoverflow.com
quarta-feira, 18 de julho de 2012
JSF - Página de erro após sessão expirada?
Eu estava pegando sempre uma página de erro após muito tempo de inatividade em uma aplicação JSF ou quando reiniciava o servidor e clicava em algum link na página.
Para resolver esse problema chato, usei as seguintes linhas no web.xml da aplicação.
Para resolver esse problema chato, usei as seguintes linhas no web.xml da aplicação.
<error-page>
<exception-type>
javax.faces.application.ViewExpiredException
</exception-type>
<location>
/index.html
</location>
</error-page>
Com essas linhas no web.xml a aplicação ao invés de exibir a página de erro quando a view estiver expirada, vai redirecionar o usuário para a página indicada.
JSF - URL não muda após redirect?
Em situações que um método retorna a url de redirect da sua página, como por exemplo:
public String listar() {
return "/pages/list.xhtml";
}
E o JSF não muda a URL na barra do browser, recomendo a inclusão da seguinte string após a url: + "?faces-redirect=true"
ficando:
public String listar() {
return "/pages/list.xhtml" + "?faces-redirect=true";
}
Fazendo isso, a URL sempre vai mudar. ;-)
domingo, 15 de abril de 2012
JSF 2.0 + Spring - Injeção de Dependência (DI)
Estou desenvolvendo uma aplicação utilizando JSF 2.0, Hibernate, Spring 3, etc...
No caso, procurei utilizar anotações e acabei cometendo um equívoco na escolha das anotações que a principio, não gerou problema, porém, quando testei multiplos acessos à aplicação, os problemas começaram a aparecer, como por exemplo, um usuário invalidando a sessão do outro.
O ponto é que eu estava usando a anotação @Component("nomeBean") nos beans gerenciados e @Autowired para fazer o trabalho de DI (anotações do Spring).
Pesquisando para resolver o problema, cheguei ao seguinte resultado:
- Ao invés de:
- Use:
- e ao invés de:
- Use:
Utilizarei como exemplo uma classe usuário recebendo a injeção de um UsuarioDAO.
- Implentação do UsuarioDAO que deverá ser injetado no objeto usuarioController, que é meu managed bean:
- Classe que receberá a injeção:
Note que na abordagem acima estou usando anotações do JSF (@ManagedBean e @ManagedProperty) e anotações do Spring.
A ideia é a seguinte:
- Criamos os objetos que serão reutilizados mais adiante sendo injetados em nossos managed beans, esses objetos devem ser marcados como componentes e nesse momento, devemos dar um nome a ele, nesse processo, o Spring vai criar este objeto em memória e deixá-lo pronto para ser injetado quando for chamado;
- O segundo passo é no nosso managed bean que devemos identificar a propriedade com a anotação @ManagedProperty e informar qual será o objeto que deverá ser injetado usando o mesmo nome dado anteriormente;
Bom, seguindo o padrão de posts rápidos e dirétos, basicamente foi isso que me ajudou bastante.
OBS.:
1. Quando utilizada a anotação @ManagedProperty, o atributo deve possuir um setter associado a ele, como no exemplo acima;
2. Quando ainda não tinha notado que o erro era este, procurei coisas estáticas na aplicação e por ai vai, então, fica a dica;
Espero ter ajudado e até a próxima.
No caso, procurei utilizar anotações e acabei cometendo um equívoco na escolha das anotações que a principio, não gerou problema, porém, quando testei multiplos acessos à aplicação, os problemas começaram a aparecer, como por exemplo, um usuário invalidando a sessão do outro.
O ponto é que eu estava usando a anotação @Component("nomeBean") nos beans gerenciados e @Autowired para fazer o trabalho de DI (anotações do Spring).
Pesquisando para resolver o problema, cheguei ao seguinte resultado:
- Ao invés de:
@Component("nomeBean")
- Use:
@ManagedBean(name="nomeBean")
- e ao invés de:
@Autowired
- Use:
@ManagedProperty(value="#{nomeBeanInjetar}")
Utilizarei como exemplo uma classe usuário recebendo a injeção de um UsuarioDAO.
- Implentação do UsuarioDAO que deverá ser injetado no objeto usuarioController, que é meu managed bean:
@Component("usuarioDAO")
public class UsuarioDAO implements IUsuarioDAO {
...
- Classe que receberá a injeção:
@ManagedBean(name="usuarioController")
@SessionScoped
public class UsuarioController {
@ManagedProperty(value="#{usuarioDAO}")
private IUsuarioDAO usuarioDao;
public void setUsuarioDAO(IUsuarioDAO usuarioDAO) {
this.usuarioDAO = usuarioDAO;
}
...
Note que na abordagem acima estou usando anotações do JSF (@ManagedBean e @ManagedProperty) e anotações do Spring.
A ideia é a seguinte:
- Criamos os objetos que serão reutilizados mais adiante sendo injetados em nossos managed beans, esses objetos devem ser marcados como componentes e nesse momento, devemos dar um nome a ele, nesse processo, o Spring vai criar este objeto em memória e deixá-lo pronto para ser injetado quando for chamado;
- O segundo passo é no nosso managed bean que devemos identificar a propriedade com a anotação @ManagedProperty e informar qual será o objeto que deverá ser injetado usando o mesmo nome dado anteriormente;
Bom, seguindo o padrão de posts rápidos e dirétos, basicamente foi isso que me ajudou bastante.
OBS.:
1. Quando utilizada a anotação @ManagedProperty, o atributo deve possuir um setter associado a ele, como no exemplo acima;
2. Quando ainda não tinha notado que o erro era este, procurei coisas estáticas na aplicação e por ai vai, então, fica a dica;
Espero ter ajudado e até a próxima.
Marcadores:
annotation,
anotação,
component,
dependency injection,
injeção de dependencia,
java,
jsf,
managed bean,
managed property,
spring
sexta-feira, 30 de março de 2012
Alguns comandos úteis para utilizar MAVEN
Abaixo vou listar algumas linhas de comando que podem ajudar no desenvolvimento de aplicações que usam MAVEN:
- Criar uma aplicação:
Na primeira vez que este processo é executado, as coisas demoram um pouco por que o maven vai baixar meia internet no repositório local que ele cria na máquina.
Terminado o processo, você verá que o maven criou uma pasta com o nome que foi utilizado no artifactId, no nosso exemplo, "AppExemplo"
Depois disso, para que este projeto possa ser aberto no eclipse fácil, fácil, o comando é:
Na primeira vez deve demorar um pouco também.
Depois, basta importar o projeto no eclipse e seguir a vida.
Estou disponibilizando abaixo uma lista de comandos que normalmente uso.
Pretendo em uma hora com calma editar este post e incluir mais detalhes sobre cada operação descrita e incluir mais algumas que costumo usar.
- Criar uma aplicação:
$ mvn archetype:generate -DgroupId=br.com.meusistema -DartifactId=AppExemplo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Na primeira vez que este processo é executado, as coisas demoram um pouco por que o maven vai baixar meia internet no repositório local que ele cria na máquina.
Terminado o processo, você verá que o maven criou uma pasta com o nome que foi utilizado no artifactId, no nosso exemplo, "AppExemplo"
Depois disso, para que este projeto possa ser aberto no eclipse fácil, fácil, o comando é:
E dentro do diretório da aplicação:$ cd AppExemplo
$ mvn eclipse:clean
ou$ mvn eclipse:eclipse
$ mvn eclipse:m2eclipse
Na primeira vez deve demorar um pouco também.
Depois, basta importar o projeto no eclipse e seguir a vida.
Estou disponibilizando abaixo uma lista de comandos que normalmente uso.
$ mvn clean
$ mvn compile
$ mvn install
Pretendo em uma hora com calma editar este post e incluir mais detalhes sobre cada operação descrita e incluir mais algumas que costumo usar.
terça-feira, 28 de fevereiro de 2012
Motorola defy rooting android 2.2.1
Eu estava pesquisando na net formas de obter acesso root no meu defy com android 2.2.1 e achei o seguinte post:
- [Rom] Cyanogenmod 7 – 2.3.7 Defy
Este foi o post mais completo, fácil e seguro que achei de realizar o processo, inclusive, para quem quiser fazer a atualização para o android 2.3.7 custom ROM cm7, pra mim funcionou muito bem e o aparelho fica muito, mas muito melhor mesmo.
Para evitar o risco dos links do post do amigo quebrarem, eu baixei aqui os arquivos necessários para fazer o root e o boot de configuração:
- GingerBreak
- SndInitDefy-1.4.2
Obs.:
- Para baixar os arquivos, clique com o botão direito no link e em seguida, “Salvar link Como”;
- Retire a extenção GIF antes de utilizar os arquivos e conserve a extenção apk;
- Para o rooting, use apenas o GingerBreak, o outro link será necessário apenas para iniciar o processo de troca de ROM;
Para fazer o rooting é muito simples:
1. Copie os arquivos acima para seu SDCard (na raiz pra ficar mais fácil);
2. Vá em configurações, Aplicativos, Desenvolvimento e habilite a opção Depuração USB;
3. Com algum programa de exploração de pastas, como o ASTRO, por exemplo, localize o GingerBreak e execute-o;
4. Após a instalação, abra o programa e clique no primeiro botão (Root Device);
Pronto, o processo de rooting vai se conduzir sozinho e reiniciará o aparelho.
Eu aconselho que o vídeo do post mencionado acima seja visto, o artigo do camaradinha é muito bom e completo.
OBS.: Para quem quiser instalar o CM7 seguindo o tutorial acima, após a instalação, use a banda da Claro mencionada no tutorial, eu sou usuário VIVO e pra mim funcionou perfeitamente com aquela opção. A banda “Viva” não funcionou muito bem.
Espero ter ajudado e fiquem a vontade pra comentar o post.
- [Rom] Cyanogenmod 7 – 2.3.7 Defy
Este foi o post mais completo, fácil e seguro que achei de realizar o processo, inclusive, para quem quiser fazer a atualização para o android 2.3.7 custom ROM cm7, pra mim funcionou muito bem e o aparelho fica muito, mas muito melhor mesmo.
Para evitar o risco dos links do post do amigo quebrarem, eu baixei aqui os arquivos necessários para fazer o root e o boot de configuração:
- GingerBreak
- SndInitDefy-1.4.2
Obs.:
- Para baixar os arquivos, clique com o botão direito no link e em seguida, “Salvar link Como”;
- Retire a extenção GIF antes de utilizar os arquivos e conserve a extenção apk;
- Para o rooting, use apenas o GingerBreak, o outro link será necessário apenas para iniciar o processo de troca de ROM;
Para fazer o rooting é muito simples:
1. Copie os arquivos acima para seu SDCard (na raiz pra ficar mais fácil);
2. Vá em configurações, Aplicativos, Desenvolvimento e habilite a opção Depuração USB;
3. Com algum programa de exploração de pastas, como o ASTRO, por exemplo, localize o GingerBreak e execute-o;
4. Após a instalação, abra o programa e clique no primeiro botão (Root Device);
Pronto, o processo de rooting vai se conduzir sozinho e reiniciará o aparelho.
Eu aconselho que o vídeo do post mencionado acima seja visto, o artigo do camaradinha é muito bom e completo.
OBS.: Para quem quiser instalar o CM7 seguindo o tutorial acima, após a instalação, use a banda da Claro mencionada no tutorial, eu sou usuário VIVO e pra mim funcionou perfeitamente com aquela opção. A banda “Viva” não funcionou muito bem.
Espero ter ajudado e fiquem a vontade pra comentar o post.
CSS media type
Ao criar uma página HTML, é possível fazer com que o visual da página
seja diferente para diversos tipos de dispositivos de apresentação.
Uma forma bem simples de fazer isso é usando o parâmetro media ao criar o CSS na própria página ou no import de um arquivo CSS.
Abaixo dois exemplos básicos:
Quando não incluímos a opção media na criação do CSS, por padrão, seria como se tivessemos atribuido o valor “all” para esta propriedade.
Para importar um arquivo de estilos, o padrão é o mesmo:
Este terceiro ponto pode ser um problema.
Navegando por sites a procura de coisas sobre o assunto encontrei o seguinte link que descreve um pouco a compatibilidade de cada programa de email com folhas de estilos:
Guide to CSS support in email
Para alguns pode ser bastante desanimador ao ver isso, e uma solução simples de implementar que achei de fato é descepcionante, mas, funcionou no caso de páginas JSP.
No meu caso, criei uma página JSP que recebe um parâmetro informando se ela será usada em um email ou não e ai, quando ela deverá ser utilizada no email ao invés de importar uma folha de estilos eu incluo o estilo diretamente no objeto, conforme exemplo abaixo:
Uma forma bem simples de fazer isso é usando o parâmetro media ao criar o CSS na própria página ou no import de um arquivo CSS.
Abaixo dois exemplos básicos:
Isso fará com que o fundo da página seja branca na página de impressa (OBS.: Os browsers costumam vir por padrão com a opção de impressão de imagens e cores de fundo desabilitada, ou seja, se outra cor fosse colocada, com essa configuração padrão, o fundo permaneceria branco) e na tela o fundo será um tom de cinza.<style type="text/css" media="print">
body {
Background-color: #FFFFFF;
}
</style>
<style type="text/css" media="screen">
body {
Background-color: #CCCCCC;
}
</style>
Quando não incluímos a opção media na criação do CSS, por padrão, seria como se tivessemos atribuido o valor “all” para esta propriedade.
Para importar um arquivo de estilos, o padrão é o mesmo:
Essa é a parte tranquila e básica da história, agora pode ocorrer a necessidade de fazer com que um HTML tenha que aparecer na tela de um jeito, ser impresso de outro e ainda ser enviado por email de outro jeito.<link rel="stylesheet" href="css/impressao.css" media="print" />
<link rel="stylesheet" href="css/tela.css" media="screen" />
Este terceiro ponto pode ser um problema.
Navegando por sites a procura de coisas sobre o assunto encontrei o seguinte link que descreve um pouco a compatibilidade de cada programa de email com folhas de estilos:
Guide to CSS support in email
Para alguns pode ser bastante desanimador ao ver isso, e uma solução simples de implementar que achei de fato é descepcionante, mas, funcionou no caso de páginas JSP.
No meu caso, criei uma página JSP que recebe um parâmetro informando se ela será usada em um email ou não e ai, quando ela deverá ser utilizada no email ao invés de importar uma folha de estilos eu incluo o estilo diretamente no objeto, conforme exemplo abaixo:
É uma forma bem chata de tratar isso, mas no meu caso foi eficiênte, caso alguém tenha mais sugestões, eu agradeço o envio.... Código
<td <%= email ? "style='text-align: left;'" : "class='tdDiferente'"%> >
... Código
Assinando um JAR (JAVA WEB START)
Toda vez que criamos uma aplicação Java Web Start e precisamos que
esta aplicação tenha alguns acessos a máquina cliente, é necessário
incluir no arquivo JNLP a seguinte instrução:
- Primeiro – no diretório onde estão os jars, digite a linha de comando que segue:
Dúvidas/Sugestões, por favor, comente este post.
O problema é que feito isso, é necessário assinar os jars que estão na lista que deve ser entregue a máquina cliente, abaixo criei um tutorial bem simples de como fazer isso.<security>
<all-permissions/>
</security>
- Primeiro – no diretório onde estão os jars, digite a linha de comando que segue:
- Escolha a senha (minimo de 6 caracteres):keytool -genkey -alias macielbombonato -keystore macielbombonato.cert
- Responda o questionário:Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: XXX
What is the name of your organizational unit?
[Unknown]: XXX
What is the name of your organization?
[Unknown]: XXX
What is the name of your City or Locality?
[Unknown]: XXX
What is the name of your State or Province?
[Unknown]: XX
What is the two-letter country code for this unit?
[Unknown]: XX
Esses passos acima vão criar um certificado na pasta onde os jars estão, agora é necessário assinar cada um dos jars com esse certificado, para isso, basta utilizar a linha de comando abaixo:Is CN=XXX, OU=XXX, O=XXX, L=XXX, ST=XX, C=XX correct?
[no]: yes
Caso não queira incluir as senhas nas linhas de comando para assinar os jars, basta não utilizar os parâmetrosjarsigner -verbose -keystore macielbombonato.cert -storepass 123456 -keypass 123456
MeuJarAssinadoWebStart.jar macielbombonato
-storepass
e -keypass
, com isso, a senha será solicitada antes do jar ser assinado.Dúvidas/Sugestões, por favor, comente este post.
Configure Proxy para subversion
Essa dica vale pra quem precisa configurar proxy para utilização do
subversion no sistema operacional como um todo ou para a utilização do
plugin do eclipse o subclipse.
Para quem estiver utilizando o sistema operacional Windows, um amigo achou na net a seguinte referencia: http://ykyuen.wordpress.com/2010/03/09/eclipse-configure-proxy-for-subclipse/
Abaixo irei colocar o texto retirado deste site para o caso do post algum dia sair do ar.
Agora a pergunta, porque estou reescrevendo este post?
Para dar a dica para quem usa mac (ou linux).
No caso, basta realizar basicamente os mesmos passos que o autor do post original comentou, porém, usuários de mac devem usar o seguinte endereço:
Agora só preciso arrumar um tempo pra montar uns scripts pra ativar e desativar o proxy para quem é consultor e vai e vem para clientes.
Espero que este post ajude mais alguém.
Para quem estiver utilizando o sistema operacional Windows, um amigo achou na net a seguinte referencia: http://ykyuen.wordpress.com/2010/03/09/eclipse-configure-proxy-for-subclipse/
Abaixo irei colocar o texto retirado deste site para o caso do post algum dia sair do ar.
The Eclipse proxy setting does not apply on subclipse. So you cannot connect to a SVN repostory outside your firewall even you have set the proxy in Eclipse.
Luckily, i found the solution in MKVille Blog – Using Subclipse Behind a Proxy Server.
For Windows XP user
Open the C:\Documents and Settings\\Application Data\Subversion\servers
Configure the http-proxy-host and http-proxy-port settings under the [global] tag
For Windows 7 user
Open the C:\Users\\AppData\Roaming\Subversion\servers
Configure the http-proxy-host and http-proxy-port settings under the [global] tag
Done =)
Agora a pergunta, porque estou reescrevendo este post?
Para dar a dica para quem usa mac (ou linux).
No caso, basta realizar basicamente os mesmos passos que o autor do post original comentou, porém, usuários de mac devem usar o seguinte endereço:
/Users/[nome_do_usuario]/.subversion
Agora só preciso arrumar um tempo pra montar uns scripts pra ativar e desativar o proxy para quem é consultor e vai e vem para clientes.
Espero que este post ajude mais alguém.
Utilizando Git (Versionador) local
Versionando um diretório com git.
Dentro do diretório executar o comando:
– [nome do arquivo] adiciona um arquivo específico
– Para "pegar" as alterações do branch master para outro branch qualquer:
– Para atualizar seu master local:
Editado (25/04/2012) - Inclusão de repositório remoto.
Os passos acima foram seguidos e o projeto está sendo versionado localmente apenas, porém, em dado momento eis que surge um servidor git para que o projeto seja versionado, neste caso, o git oferece recursos bem simples de alteração do repositório que o projeto deve apontar, para isso basta:
Dentro do diretório executar o comando:
E depois:$ git init
– Status do branch selecionado$ git status
– Exibe todos os branchs e marca com um asterisco o que está selecionado.$ git branch
– . (ponto) adiciona todos arquivos que estão pendentes$ git add .
– [nome do arquivo] adiciona um arquivo específico
– Criar um branch$ git checkout -b [nome do branch]
– Commit das alterações$ git commit -am “[mensagem]“
- Altera do branch atual para o branch mencionado$ git checkout [nome do branch]
– Para "pegar" as alterações do branch master para outro branch qualquer:
– Para "mandar" as informações de um branch qualquer para o master:$ git checkout [nome do branch]
$ git rebase master
+ No caso do branch master ser remoto:$ git checkout master
$ git merge [nome do branch]
– Para atualizar seu master local:
– Para atualizar o branch master remoto com suas alterações locais:$ git checkout master
$ git pull origin master
$ git checkout master
$ git push origin master
Editado (25/04/2012) - Inclusão de repositório remoto.
Os passos acima foram seguidos e o projeto está sendo versionado localmente apenas, porém, em dado momento eis que surge um servidor git para que o projeto seja versionado, neste caso, o git oferece recursos bem simples de alteração do repositório que o projeto deve apontar, para isso basta:
$ git remote add origin https://enderecodoseuservidor/aplicacao.git # Faz com que o host remoto git do seu projeto passe a ser este indicado na url
$ git push -u origin master # Para enviar os fontes para o branch master remoto pela primeira vez
Instalação/Preparação do Diaspora para desenvolvimento
Primeiros passos, preparando a casa:
Instalação do rvm:
Tire a palavra exemplo do nome do arquivo app_config.yml.
No terminal execute o comando:
Agora é só personalizar a aplicação.
Instalação do rvm:
bash < .rvmrcConfirme as mensagens que aparecem.
cd .
rvm gemset create ‘diaspora’
cd ..
cd diaspora
bundle installTire a palavra exemplo do nome do arquivo database.yml, certifique-se de que as configurações de banco de dados que estão no arquivo conferem com as da sua máquina.
Tire a palavra exemplo do nome do arquivo app_config.yml.
No terminal execute o comando:
rake db:create db:migratePronto!
Agora é só personalizar a aplicação.
Instalação Redis MacOS X e Linux em 30s
Acesse: http://redis.io/
Baixe o último release em algum local da sua máquina.
Descompacte e via terminal execute o seguite comando na pasta do redis.
Pré requisitos:
Baixe o último release em algum local da sua máquina.
Descompacte e via terminal execute o seguite comando na pasta do redis.
sudo make installApós a conclusão da instalação, basta executar o comando:
redis-serverPronto!
Pré requisitos:
MacOS X: Xcode
Debian/Ubuntu: Pacote build-essential (sudo apt-get install build-essential).
Assinar:
Postagens (Atom)