Rolagem/Scrolling de tela com teclado no Atom

Olá.

Atom é um editor de texto bem legal feito com Electron, porém até a versão 1.12.2 ainda não conta com um recurso bem básico, presente na maioria dos editores: a rolagem de tela com teclado, onde o cursor fica parado e somente a tela rola. Normalmente isso é feito com Ctrl+Cima / Ctrl+Baixo.

Alternativa

Por enquanto uma alternativa é instalar este pacote: https://atom.io/packages/ctrl-dir-scroll. Basta acessar o menu “Edit > Preferences”, e então na aba Packages, buscar por ctrl-dir-scroll, postado por callum-ramage.

Este pacote irá disponibilizar dois novos comandos para vincular a hotkeys, são eles: ctrl-dir-scroll:scroll-down e ctrl-dir-scroll:scroll-up.Para configurá-los acesse “Edit > Keymap” para abrir o arquivo de mapeamento de hotkeys. Nele, basta adicionar a seguinte configuração lá no final:

'atom-workspace atom-text-editor:not([mini])':
  'ctrl-down': 'ctrl-dir-scroll:scroll-down'
  'ctrl-up': 'ctrl-dir-scroll:scroll-up'

Por padrão Ctrl+Cima e Ctrl+Baixo são configurados para mover linha. Se você não quiser perder este recurso, pode configurar tal como no Eclipse, com Alt+Cima e Alt+Baixo. O resultado é:

'atom-workspace atom-text-editor:not([mini])':
  'alt-down': 'editor:move-line-down'
  'alt-up': 'editor:move-line-up'
  'ctrl-down': 'ctrl-dir-scroll:scroll-down'
  'ctrl-up': 'ctrl-dir-scroll:scroll-up'

Configurando outras hotkeys

Para configurar outras hotkeys, acesse o menu “Edit > Preferences”, aba Keybindings. Lá você pode buscar por hotkey (Ctrl+Down na imagem abaixo) ou pelo nome do comando. Então basta clicar no ícone de prancheta para copiar o comando e finalmente colá-lo no arquivo de configurações para alteração.

keybindings

Até.

Publicado em Legais, Sem categoria, Text Editor, Tools, Web | Com a tag , , , , , | Deixar um comentário

Configurando o push/pull simultâneo/paralelo no Docker

Olá.

O push/pull de imagens em versões recentes do Docker conta com a transferência de vários layers em paralelo, o que costuma acelerar bastante o processo. Contudo, em conexões mais restritas a situação pode ser outra, se transformando num transtorno. Isso principalmente na hora de fazer o upload de imagens.

Como há divisão da banda dentre as várias transmissões, a taxa individual de cada transmissão cai, resultando em um maior tempo para a conclusão de qualquer envio. Estando em uma conexão mais instável, isso normalmente resulta em grande frustração, pois o Docker acaba desistindo do envio após várias falhas e nenhum arquivo transmitido.

No meu caso, usando ADSL de 2Mbit e com a transferência simultânea ativa, sempre obtenho sucesso no pull e no push. Já com uma conexão Cable de 15Mbit, o Docker falha sistematicamente em realizar o push.

Solução

A solução para este problema está em definir o número máximo de downloads/uploads simultâneos que o Docker deve fazer.
Pelo que pude entender, esta configuração entrou em disponibilidade em alguma versão próxima ou a partir da 1.12.0. O que posso garantir é que na 1.12.1 funciona.

Como configurar

Isso é feito no arquivo de configurações do Docker daemon (o serviço que fica ativo no seu sistema). No Linux o local padrão deste arquivo é o seguinte:

/etc/docker/daemon.json

Se você nunca mexeu neste arquivo, provavelmente ele não existe, então basta criá-lo. Segue exemplo:

{
    "max-concurrent-downloads": 3,
    "max-concurrent-uploads": 1
}

Bom, o JSON é bem simples, basta alterar o valor da respectiva propriedade e na sequência reiniciar o serviço do Docker:

sudo service docker restart

Se você quiser uma referência completa sobre este arquivo de configuração, basta acessar neste link:
https://docs.docker.com/engine/reference/commandline/dockerd/#/linux-configuration-file

É isso.
Até.

Publicado em Cloud, Linux, Servidores | Com a tag , , | Deixar um comentário

Novidades

Olá.

Parece que o blog precisa de mais movimento, não é mesmo? Afinal já se passou quase um ano desde a última postagem, feita em 18/12/2015.

Então vale citar uma das últimas novidades, que foi a conquista da minha segunda certificação Oracle no dia 17/10/16. Desta vez foi a Oracle Certified Expert, Java EE 6 Web Component Developer, a qual é voltada ao domínio das aplicações web Java, baseadas no modelo Servlet 3.0.

A Oracle agora publica badges para quem alcança alguma de suas certificações, o que parecem fazer de forma retroativa, visto que a minha anterior, de programador Java 6, também foi publicada. Ambas podem ser conferidas no meu perfil, na Acclaim (não, não é aquela do Mortal Kombat). Segue o link: https://www.youracclaim.com/user/hudson-magalhaes

Até.

Publicado em Sem categoria | Deixar um comentário

JPA – EntityManager x EntityManagerFactory x Multithreading

Opa!

Neste post vou falar um pouco sobre EntityManager e EntityManagerFactory em relação a ambiente multithread.

EntityManager não é thread-safe

Diferente do EntityManagerFactory, o EntityManager não é thread-safe. É importante relevar isso principalmente em aplicações web, onde cada requisição do cliente é tratada por um thread diferente.

Neste cenário normalmente são utilizados singletons para prover os serviços, onde pode ser um problema usar injeção de dependência (DI) para injetar um EntityManager como membro de instância dos singletons.

Por isso, o mais indicado é injetar o EntityManagerFactory. Exemplo:

public class UserDAO {
    @PersistenceUnit
    private EntityManagerFactory emf;

    public void persist(User user) {
        EntityManager em = null;
        try {
            em = emf.createEntityManager();
            return em.persist(user);
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }
}

Usando a injeção de dependências do Spring

Com o Spring a situação é diferente…

O seguinte post é bem interessante, onde o autor explica o mecanismo de controle de transação do Spring para métodos anotados com @Transactional do Spring:

http://blog.jhades.org/how-does-spring-transactional-really-work/

A parte em que ele fala do EntityManager vem bem a calhar. No caso, ele explica que o Spring não injeta o EntityManager diretamente, invés disso é injetado um proxy. Este proxy, com ajuda de um ThreadLocal, sempre resolve um EntityManager por thread, eliminando o problema do multithreading.

Antes que o leitor possa pensar em ignorar a ideia do proxy e injetar sempre o EntityManagerFactory, quando usando o Spring, o melhor mesmo é injetar direto o EntityManager.

Dentro de um escopo transacional do Spring, a abertura e commit/rollback são controlados pelo container, o que é feito em cima do EntityManager controlado pelo Spring (vinculado ao thread atual).

Se injetamos o EntityManagerFactory e criamos o EntityManager manualmente, o Spring não irá realizar o controle da transação no EntityManager que criamos, mas em algum outro controlado por ele. Neste caso você poderá notar que suas alterações não serão persistidas no banco.

Então o correto, que é até mais simples, é usar direto o EntityManager. Segue exemplo:

public class MyComponent {
    @PersistenceContext
    private EntityManager entityManager;

    @Transactional
    public void doStuff() {
        Animal animal = new Animal("Fish");
        Toy toy = new Toy("Ball");

        entityManager.persist(animal);
        entityManager.persist(toy);
    }
}

Como já citado lá naquele post, o mais legal é que se o método inicial da transação chamar outro componente, e este componente também injetar o EntityManager, novamente estaremos trabalhando com o proxy que irá resolver o mesmo EntityManager, possibilitando continuar na mesma transação.

Outras referências:
Tutorial JEE 6 (EntityManager em ambiente gerenciado):
http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html#indexterm-1674

Publicado em Java, JPA, Spring | 1 comentário

A trava de tela não funciona no Xubuntu?

No Xubuntu 14.04, o recurso de “lock screen” (CTRL+ALT+DEL) é acionado pelo script xflock4, que chama um dos “lockers” instalados no sistema. O problema ocorre quando nenhum “locker” é encontrado.

No meu caso, o problema foi que desativei o ligh-locker, que por padrão fica responsável por travar a tela. Para resolver o problema basta reativá-lo, ou então instalar outro locker.

Eu optei por deixar o light-locker desativado, pois ele não estava respeitando as configurações e travando a tela automaticamente enquanto eu assistia filmes… Instalei então o gnome-screensaver:
sudo apt-get install gnome-screensaver

Vasculhando o xflock4, nota-se que podem ser usados os seguintes lockers: light-locker, gnome-screensaver, xcreensaver, xlock e slock.

Referências:
http://unix.stackexchange.com/questions/101806/why-doesnt-my-screen-lock-in-xfce#comment155208_101813
https://wiki.archlinux.org/index.php/Xfce#Lock_the_screen

Publicado em Sem categoria | Deixar um comentário

Content assist do Eclipse não funcionando no KDE

Depois de instalar o KDE em um ambiente Ubuntu 14.04 LTS, através do pacote kubuntu-desktop v1.308.1, tive problemas com o recurso de content assist no Eclipse, o qual é acionado por CTRL+SPACE. Acredito que o mesmo problema ocorrerá também no Netbeans, que utiliza a mesma hotkey.

No meu caso o problema foi um conflito com o IBus (Intelligent Input Bus), que é um framework para possibilitar a utilização de vários idiomas para entrada de texto, possibilitando a rápida troca de idioma através de uma hotkey, que por padrão é justamente o CTRL+SPACE.

Para resolver o problema basta desabilitar a hotkey, ou mudá-la para outra combinação, caso queira utilizar o recurso. Para isso abra o IBus pelo menu de aplicações do KDE ou, se estiver disponível, pelo ícone na “system tray”, que normalmente se apresenta como um teclado:

Ícone do IBus na System Tray

Acionando a tela de preferências, o CTRL+SPACE aparece logo de cara. Acione então o botão de configurações…

Tela de preferências do IBus

Comigo, a tela de configuração das hotkeys ficou “bugada” e não exibiu corretamente a lista de hotkeys, mas como o item já vem selecionado, bastou acionar o delete e confirmar.

Tela de configuração da tecla de atalho do IBus

Referências:
Homepage do IBus: https://code.google.com/p/ibus/

Publicado em Bugs, Linux | Com a tag , , , , , , , | 3 comentários

Livros e apostilas gratuitos sobre programação

No repositório a seguir (Github) é mantida uma lista com alguns livros e apostilas gratuitos sobre programação e tópicos afins, incluindo linguagens e metodologias de desenvolvimento. Segue o link:
https://github.com/vhf/free-programming-books

Você pode ainda contribuir com a lista, basta seguir as instruções contidas na própria página inicial do repositório.

Existe material em vários idiomas, por exemplo em pt-BR, que está em:
https://github.com/vhf/free-programming-books/blob/master/free-programming-books-pt_BR.md

Publicado em Sem categoria | Deixar um comentário

Exemplo Spring + Hibernate + Tiles

Postei no Github um exemplo de aplicação web internacionalizada baseada nas seguintes tecnologias:

  • Spring Framework (web mvc)
  • Hibernate
  • Apache Tiles
  • Maven
  • EasyMock

Link para o repositório: https://github.com/hmagalhaes/exemplo-rh

Publicado em Sem categoria | Deixar um comentário

Arquivo da Internet: Wayback Machine

Muito legal este site. Ele tira “foto” do estado atual das páginas pela Internet a fora, permitindo a navegação pelas páginas em diversas épocas. Há também a opção de requisitar manualmente uma nova foto de algum site qualquer.

Vale a pena conferir.

http://archive.org/web/

Publicado em Legais, Web | Com a tag , | Deixar um comentário

GoodUI – Ideias para uma boa UI

No projeto GoodUI, o autor compartilha diversas ideias para criar uma boa interface de usuário (User Interface), visando a maior usabilidade e ainda uma melhora na taxa de conversão (vendas, captação de cadastro, etc).

No momento desta postagem, são 38 ideias, vale a pena conferir.

Ref.:
GoodUI, disponível em <http://www.goodui.org>.

Publicado em Design, UI, UX, Web | Deixar um comentário