O valor gerado pelas entregas incrementais em um produto Scrum

Este texto busca versar sobre Scrum, mais especificamente acerca de dois gráficos encontrados no capítulo VIII da obra de Jeff Sutherland, Scrum: A arte de fazer o dobro do trabalho na metade do tempo (SUTHERLAND, 2014). Relacionadas estão as temáticas de MVP (Minimum Viable Product – Produto Viável Mínimo) e o Princípio de Pareto (regra 80/20).

Continue lendo

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

Usando grunt-connect-proxy com HTTPS

Olá, está tendo problemas com o grunt-connect-proxy para destino HTTPS?

No seu Gruntfile, na configuração do proxy, tente adicionar a opção protocol como está no exemplo a seguir. Atente-se aos dois-pontos que seguem o https, eles fazem a diferença.

{
  context: '/api',
  host: 'mybackend.com',
  port: 443,
  https: true,
  rewrite: {
    '^/api': '/backend/api'
  },
  protocol: 'https:'
}

Este macete funciona pelo menos no grunt-connect-proxy versão 0.2.0, e  no http-proxy versão 1.11.3 — responsável pela implementação do proxy.

A questão é que internamente, o http-proxy utiliza esta opção para definir em qual protocolo deve se comunicar. Isso pode ser constatado no seguinte arquivo do módulo: lib/http-proxy/passes/web-incomming.js. Segue recorte iniciado na linha 108:

var proxyReq = (options.target.protocol === 'https:' ? https : http).request(
    common.setupOutgoing(options.ssl || {}, options, req)
);

Assim, o problema não está na URL e/ou porta utilizada na chamada, mas sim no protocolo. Para debugar melhor o problema, e checar se o request está sendo feito sem criptografia, o interessado pode utilizar o Wireshark.

Até.

Publicado em Bugs, NodeJS | Com a tag , , , | Deixar um comentário

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. Continue lendo

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