segunda-feira, 15 de junho de 2015

O usuário está bêbado #01

Fala pessoal, finalmente fiz o primeiro vídeo do "O usuário está bêbado".

Se você ainda não conhece o projeto acesse: http://www.localhost8080.com.br/o-usuario-esta-bebado

Mas basicamente bebo muita cerveja e testo sites, apps ou sistemas em uma perspectiva de Usabilidade/UX e depois faço um vídeo e um relatório do que pode ser melhorado.

Segue abaixo o vídeo e o relatório:



Relatório - O usuário está bêbado - #01 - Site bebidaboa.com.br


O site testado foi o www.bebidaboa.com.br que de um modo geral apresenta uma boa usabilidade, inclusive mobile, e como qualquer site ou pessoa, tem pontos a melhorar. São eles:

Homepage

A sua homepage deve dar foco para explicar o que seu site é, o que ele oferece e quais são seus diferenciais.

Uma pessoa ao acessar o seu site, deve nos primeiros segundos identificar que é um site para bar tenders com receitas oficiais e dicas sobre drinks, etc.

Referências:
http://www.nngroup.com/articles/most-violated-homepage-guidelines/

Otimizar imagens

Percebi uma leve demora para a exibição das imagens no site, como o site tem muitas imagens é interessante utilizar uma ferramenta como o www.jpegmini.com para reduzir o tamanho (bytes) das imagens sem perder a qualidade.
Em imagens que sempre terão o mesmo tamanho (que não mudam de tamanho na exibição do celular e de um PC por exemplo) é interessante colocar fixo a largura e altura das imagens.

Referências:
http://browserdiet.com/pt/

Carrossel

Carrossel é um assunto que pode gerar muita discussão, existem vários artigos interessantes sobre isso, mas vou dar duas recomendações simples:
- Deixe o carrossel estático, ele deve ir para o lado apenas se o usuário clicar no botão para trocar de slide.
- Diminua os textos de cada slide do carrossel, seja mais sucinto, talvez apenas o título e imagem.

Motivos:
- O movimento do carrossel sem o comando do usuário pode irritá-lo;
- O usuário não tem tempo suficiente para ler toda a informação antes do carrossel se movimentar;
- Mesmo se for pouca informação, existem pessoas que leem mais devagar, que podem não entender uma palavra, ou por exemplo uma pessoa que não seja brasileira e demore mais tempo para ler um texto simples;
- Prejudica a acessibilidade pois usuários com determinadas deficiências podem ter dificuldade para conseguir pausar o carrossel ou clicar no “Leia Mais”;
- Usuários podem ignorar o carrossel por imaginarem que não conseguirão lê-lo a tempo.

No celular o carrossel não funcionou muito bem, as imagens estão muito grandes, os textos também e a navegação está um pouco confusa.

Referências:
http://www.nngroup.com/articles/auto-forwarding/
http://www.smashingmagazine.com/2015/02/09/carousel-usage-exploration-on-mobile-e-commerce-websites/

Esses dois artigos são bem interessantes, o primeiro não fala muito bem de carrossel e o segundo mostra um bom uso dele. A partir deles você obterá outras referências de artigos também.

Analisando o carrossel da amazon.com percebe-se que o carrossel se move automaticamente, porém, duas coisas são interessantes:
- O carrossel passa por todos os slides apenas uma vez, depois ele para no primeiro. Ele não fica se movendo eternamente.
- Os textos em cada slide são bem curtos.

Público alvo

Se o público alvo são apenas bar tenders profissionais, é preciso deixar claro isso logo ao entrar no site, pois um bar tender ao entrar no site pode achar que é só mais um site qualquer de receitas de bebidas, ele precisa perceber nos primeiros segundos ao entrar no site que pode encontrar muito conteúdo interessante ali.

Mas se também tem o interesse em focar em qualquer pessoa que esteja em casa e queira fazer uma bebida diferente, pessoas como:
- Universitários numa festa com amigos;
- Um divorciado de 30 anos que quer beber algo diferente com sua namorada;
- Uma mulher querendo servir uma bebida para as amigas;

Então você tem que pensar que essas pessoas não conhecem de bebida, então elas tem poucos ingredientes em casa por exemplo e não conhecem determinados termos.
É necessário melhorar os filtros e menus (isso até para bar tenders profissionais vai ajudar).
Outra coisa: Eu não encontrei o campo "Tipo de Medida" no meu primeiro teste para poder trocar para "Caseira". E mesmo na medida caseira, eu não sei quanto é 30 ml, talvez pensar em uma forma de facilitar isso.

No início do site poderia aparecer uma pergunta como "Quem é você?"
-Trabalho como bar tender ou estou estudando isso
-Quero aprender como fazer uma bebida legal em casa
E com base nessa pergunta você poderia alterar o site oferecendo uma experiência diferente para cada perfil.

Mas talvez você veja que não valeria o esforço, que o seu foco é bar tender e quem está estudando isso.
Às vezes uma pequena seção para quem não sabe nada poder estudar um pouco e ter o conhecimento base para navegar no site chamaria bastante atenção, talvez até mais do que preparar todo o site para quem não conhece muito do assunto.

Notícias

Colocar um link para algo relacionado dentro do site logo nos primeiros parágrafos da notícia funciona muito bem.

Seção “Destaque”

Retirar a seção de "destaque", pois:
-Parece que você está vendendo algo
-Parece spam, se você tiver como analisar, perceberá que quase ninguém clica
-Quanto mais informação na tela, maior a carga de trabalho

Referências:
www.nngroup.com/articles/banner-blindness-old-and-new-findings
Para um melhor entendimento, recomendo a leitura do artigo do Jacob Nielsen sobre “Banner Blindness” onde ele fala que usuários quase nunca olham para qualquer coisa que pareça um anúncio. Nessa imagem também mostrada no vídeo mostra que os usuários raramente olham para os anúncios:


Formulário de cadastro

O formulário está muito grande e isso dificulta que as pessoas cheguem até o fim, elas pode desistir de continuar o cadastro ao ver que o formulário é extenso ou desistir no meio caso qualquer coisa a distraia.

Campos como "Apelido", "Sexo", "Data de nascimento", "foto", todos os campos de endereço e números de telefone talvez não sejam necessários no primeiro cadastro. Possibilite o preenchimento desses dados em um outro momento.
Talvez retirar o campo "Profissão" e seguir a ideia do "Sou Bartender Profissional" e exibir 3 campos para seleção:
- Sou bartender profissional
- Quero ser um bartender
- Gosto de apreciar boas bebidas

Retire a seção de "Bebidas mais acessadas" do lado do formulário, isso pode distrair o usuário, além de que se o usuário clicar ali, ele sairá do cadastro sem finalizar o preenchimento.

Mobile

Não fiz uma análise muito aprofundada do mobile, apesar de ser muito importante, mas posso dar três dicas:
- Imagem do logo ocupa boa parte da tela, diminuir imagem ou talvez retirar;
- Carrossel dificultou a navegação, talvez para mobile exibir as notícias de outra forma, ou simplificar o carrossel.
- O menu é um pouco difícil de clicar, principalmente para quem tem o dedo mais gordinho como o Homer Simpson


Conclusão

Foi um prazer testar esse site e mais legal ainda ver que essas dicas estão sendo colocadas em prática.
O site oferece uma boa usabilidade, mas como qualquer site tem pontos a serem melhorados.
Eu recomendaria esse site a um amigo bartender e também para amigos que queiram fazer alguma bebida especial. Eu mesmo me tornarei usuário assíduo deste site.

Um grande abraço ao meu amigo Marcelo, o primeiro cliente do "O usuário está bêbado", todo sucesso do mundo e muitos usuários satisfeitos na sua vida!

Valeu galera!
Adriano Schmidt

terça-feira, 9 de junho de 2015

O usuário está bêbado

Fala pessoal,



Se um bêbado conseguir, a chance de outras pessoas conseguirem também é alta!

Eu e um monte de cervejas vamos testar isso pra você e dar inúmeras dicas de como melhorar a UX e a Usabilidade do seu site, app ou sistema.

Esse é meu novo projeto.

Deem uma olhada: www.localhost8080.com.br/o-usuario-esta-bebado/
Essa é página no face: https://www.facebook.com/ousuarioestabebado

Vídeo:



Vaaaleu!!!
Adriano Schmidt

sexta-feira, 22 de maio de 2015

Como dividir um commit do git em dois

Fala galera, segue o passo-a-passo para você pegar um commit e dividi-lo em dois.

Dê esse comando para permitir alterar o último commit:
git rebase -i HEAD~

Dê esse comando para colocar todos os arquivos na cor vermelha, assim eles estarão disponíveis para você fazer o que quiser:
git reset HEAD~

Agora dê um add em cada arquivo que você quer que fique no seu primeiro commit
git add src/main/java/br/com/localhost8080/teste/Arquivo01.java
git add src/main/java/br/com/localhost8080/teste/Arquivo02.java
git add src/main/java/br/com/localhost8080/teste/Arquivo03.java

Faça um commit dos arquivos adicionados:
git commit -m "mensagem do commit 01"

Agora faça commit do restante dos arquivos:
git add .

Faça o segundo commit:
git commit -m "mensagem do commit 02"

Finalize o rebase:
git rebase --continue

Pronto. Agora você já pode fazer um push ou o que desejar.

Fonte: http://stackoverflow.com/questions/6217156/break-a-previous-commit-into-multiple-commits

Abraçooo!
Adriano Schmidt

domingo, 17 de maio de 2015

Montando um cluster de WildFly em 5 minutos

Olá pessoal, segue meu tutorial para você montar um cluster de WildFly em 5 minutos.

Abaixo está o vídeo e o passo-a-passo detalhado.



Lembrando que como pré-requisito você precisa ter o JDK instalado na máquina (execute "java -version" para validar)

Vamos lá:

- Baixe o WildFly
- Descompacte o zip

- Entre em <Pasta do WildFly>/domain/configuration

- Abra o domain.xml e no final dele na dentro da tag <server-groups> adicione esse código:
 <server-group name="cluster-group" profile="ha">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="ha-sockets"/>
        </server-group>

- Abra o host.xml e dentro da tag <servers> no server-two edite o auto-start="true" para auto-start="false"
- Ainda no host.xml e dentro da tag <servers> adicione esses servers:
 <server name="cluste-one" group="cluster-group" auto-start="true">
            <socket-bindings port-offset="200"/>
        </server>
 <server name="cluste-two" group="cluster-group" auto-start="true">
            <socket-bindings port-offset="300"/>
        </server>

- Pelo terminal/cmd entre em: <Pasta do WildFly>/bin
- Se estiver no windows: Execute o add-user.bat
- Se estiver no linux/mac: Execute o add-user.sh

- Siga o passo-a-passo do add-user
1) aperte enter
2) digite wadmin
3) digite mortadela@1
4) digite mortadela@1
5) aperte enter
6) digite yes
7) digite no
8) aperte enter

- Se estiver no windows: Execute o domain.bat
- Se estiver no linux/mac: Execute o domain.sh

- Agora o ambiente está configurado, você subiu 3 JBoss na sua máquina. Teste pelo browser:
1) Master: http://localhost:8080
2) Slave1: http://localhost:8280
3) Slave2: http://localhost:8380

- Para testar se o cluster está funcionando:
1) Baixe o war: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/cluster-example.war
2) Entre via browser no console admin do WildFly master: http://localhost:9990/
3) Digite usuário wadmin e a senha mortadela@1
4) Acesse o menu Deployments
5) Clique em Add
6) Selecione o cluster-example.war
7) Clique em Next
8) Clique em Save
9) Clique em Assign
10) Selecione cluster-group
11) Clique em Save

- Teste a aplicação
1) Acesse via browser http://localhost:8280/cluster
2) Veja uma contagem acontecendo, esse valor está num EJB Stateful
3) Na mesma aba/janela do browser acesse a URL: http://localhost:8380/cluster
4) A contagem deve continuar, ou seja, o cluster está funcionando pois mesmo acessando em outro JBoss a informação da sessão foi replicada.

É isso aí pessoal, qualquer dúvida é só fazer um post no JBUG Brasil

Abraço!
Adriano Schmidt

sábado, 16 de maio de 2015

TDC Floripa - Palestra WildFly Avançado

Fala galera, ontem apresentei uma palestra sobre WildFly no TDC Floripa. Foi muito bacana, fiquei bem feliz com o resultado!

Assuntos abordados: Introdução; Novidades no WildFly 8; Por dentro; Apache HTTP Server; Cluster; Inimigos do cluster; Mãos na massa; Um pouquinho de tuning; WildFly 9; OpenShift;


O ambiente apresentado de load balancer e cluster está detalhado neste post: Como criar um Load Balancer e Cluster com WildFly 8

O ambiente de cluster local é mais simples e está esse post: Montando um cluster de WildFly em 5 minutos

Muito obrigado a todos do JBUG Brasil!

sexta-feira, 15 de maio de 2015

Como criar um Load Balancer e Cluster com WildFly 8

UPDATE: Fiz um novo tutorial para o WildFly 10: http://localhost8080.blogspot.com.br/2016/09/load-balancer-com-wildfly-10.html


Olá galera!

Esse post mostra como montar um ambiente com um Apache HTTP Server como loadbalancer e vários WildFly 8 em Cluster utilizando o modo domain para facilitar a gestão do ambiente.



Esse ambiente foi apresentado em uma palestra no TDC Floripa 2015. Para ver os slides: TDC Floripa - Palestra WildFly Avançado

Utilizei como base para montar esse ambiente os posts do Mauricio Magnani e ajuda do pessoal do JBUG Brasil.

Todas as máquinas utilizadas para montar esse ambiente utilizam CentOs 7. Você pode utilizar o S.O. que desejar, caso tenha alguma dificuldade é só entrar em contato.

Você precisará de 4 máquinas:
- maq01: Apache HTTP Server
- maq02: WildFly Master
- maq03: WildFly Server1
- maq04: WildFly Server2

Em todas as máquinas

- Configure a rede conforme desejado:
/etc/init.d/network stop
vi /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/sysconfig/network
vi /etc/resolv.conf
/etc/init.d/network start

- Teste se a rede está OK
ping www.google.com
ifconfig

Maq01 - Apache HTTP Server
yum install httpd httpd-devel apr-devel openssl-devel mod_ssl -y

sudo service httpd start

- Acesse no browser de sua máquina se o Apache HTTP Server está no ar, só acessar pelo ip: http://<ip_da_maquina>

- Baixe o mod_cluster
wget http://downloads.jboss.org/mod_cluster//1.3.1.Final/linux-x86_64/mod_cluster-1.3.1.Final-linux2-x64-so.tar.gz
tar -zxvf mod_cluster-1.3.1.Final-linux2-x64-so.tar.gz
cp mod_advertise.so /etc/httpd/modules/
cp mod_manager.so /etc/httpd/modules/
cp mod_proxy_cluster.so /etc/httpd/modules/
cp mod_cluster_slotmem.so /etc/httpd/modules/

- Comente a linha do mod_proxy_balancer pois será usado o mod_cluster
cd /etc/httpd/conf.modules.d
vi 00-proxy.conf

- A linha deve ficar assim:
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so


- Crie e adicione o conteúdo do arquivo mod_cluster.conf
cd /etc/httpd/conf.d/
touch mod_cluster.conf
vi mod_cluster.conf

LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

MemManagerFile /var/cache/mod_cluster

Maxcontext 100
Maxnode 100
Maxhost 100

<VirtualHost *:80>

<Directory />
Order deny,allow
Allow from all
</Directory>

<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
#Order deny,allow
#Deny from all
#Allow from all
AuthType Basic
AuthName "MCM"
AuthUserFile /etc/modclusterpassword
Require user admin
</Location>

KeepAliveTimeout 60
MaxKeepAliveRequests 0
ServerAdvertise Off
EnableMCPMReceive Off

</VirtualHost>

- Crie um usuário e senha
htpasswd -c /etc/modclusterpassword admin

- Reinicie o Apache:
sudo service httpd stop
sudo service httpd start

- Teste novamente no browser: http://<ip_da_maquina>

- Teste no browser o mod_cluster: http://<ip_da_maquina>/mod_cluster_manager



Maq02, Maq03, Maq04

- Instale e configure o Java
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm

rpm -Uvh jdk-7u79-linux-x64.rpm

alternatives --install /usr/bin/java java /usr/java/latest/jre/bin/java 200000
alternatives --install /usr/bin/javaws javaws /usr/java/latest/jre/bin/javaws 200000
alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000
alternatives --install /usr/bin/jar jar /usr/java/latest/bin/jar 200000

- Instale o WildFly 8:
wget http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.2.0.Final.zip

yum install unzip

unzip wildfly-8.2.0.Final.zip  -d /opt/
ln -s /opt/wildfly-8.2.0.Final /opt/wildfly


- Configure um usuário no linux:
groupadd wildfly
useradd -s /bin/bash -d /home/wildfly -m -g wildfly wildfly
chown -R wildfly:wildfly /opt/wildfly-8.2.0.Final
chown -h wildfly:wildfly /opt/wildfly

sudo vi /etc/sudoers
wildfly ALL=(ALL) NOPASSWD:ALL

passwd wildfly
su wildfly

- Configure o WildFly
cd /etc/default
vi wildfly.conf
descomentar JBOSS_USER

- Inicie o WildFly
sudo service wildfly start

- Veja no log se não deu erros
vi /opt/wildfly/standalone/log/server.log

- Pare o WildFly
sudo service wildfly stop


Maq02 - WildFly Master

- Configure o WildFly
sudo vi /etc/default/wildfly.conf

JBOSS_MODE=domain
JBOSS_DOMAIN_CONFIG=domain.xml
JBOSS_HOST_CONFIG=host-master.xml
STARTUP_WAIT=30
SHUTDOWN_WAIT=30
JBOSS_CONSOLE_LOG=/var/log/wildfly/console.log

- Faça login com o usuário wildlfy
su wildfly

- Adicione a linha para setar o parametro jboss.bind.address.management, adicione junto com as outras linhas de JAVA_OPTS
vi /opt/wildfly/bin/domain.conf
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address.management=<IP_DA_MAQUINA>"

- Configure o domain.xml
vi /opt/wildfly/domain/configuration/domain.xml

de:
 <server-groups>
[...]
 </server-groups>

para:
<server-groups>
   <server-group name="arquitetura-grupo-1" profile="full-ha">
    <jvm name="default">
      <heap size="512m" max-size="512m"/>
      <permgen max-size="256m"/>
    </jvm>
    <socket-binding-group ref="full-ha-sockets"/>
   </server-group>
</server-groups>

- Crie um usuário dentro do WildFly para comunicação no modo domain, usaremos mais para frente
sh /opt/wildfly/bin/add-user.sh
[enter]
wuser
mortadela@1
mortadela@1
[enter]
yes
yes

- Anote o secret gerado após criar o usuáro pois usaremos adiante:
 <secret value="bW9ydGFkZWxhQDE=" />

- Crie um usuário para acessar o webconsole
sh /opt/wildfly/bin/add-user.sh
[enter]
domainadmin
mortadela@1
mortadela@1
[enter]
yes
no


Maq03 e Maq04

- Configure o WildFly:
sudo vi /etc/default/wildfly.conf

JBOSS_USER=wildfly
JBOSS_MODE=domain
JBOSS_HOST_CONFIG=host-slave.xml
STARTUP_WAIT=30
SHUTDOWN_WAIT=30
JBOSS_CONSOLE_LOG=/var/log/wildfly/console.log


- Adicione as linhas de JAVA_OPTS:
vi /opt/wildfly/bin/domain.conf

JAVA_OPTS="$JAVA_OPTS -Djboss.domain.master.address=<IP MASTER>"
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=<IP MAQUINA>"

- Configure o slave:
vi /opt/wildfly/domain/configuration/host-slave.xml

- adicione name no <host (na maq03 adicione host1, na maq04 adicione host2)
<host name="server-host1-widfly"

- altere o <secret> para o secret gerado no master

- Adicione o username:
<domain-controller>
   <remote host="${jboss.domain.master.address}" username="wuser" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
</domain-controller>

- Altere o servers para: (na maq03 adicione arquitetura-1, na maq04 adicione arquitetura-2)
<servers>
   <server name="arquitetura-1" group="arquitetura-grupo-1"/>
</servers>


Maq02, Maq03, Maq04

- Inicie o WildFly
sudo service wildfly start

Maq02
- Faça deploy de uma aplicação de testes
1) Entre via browser no console admin do WildFly master: http://<ip_wildfly_master>:9990/
2) Digite usuário domainadmin e a senha mortadela@1
3) Acesse a parte de deployments
4) Faça o deploy da aplicação systemprops: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/systemprops.war
5) Clique em Assign e associe ao grupo grupo-arquitetura-1

- Teste o load balancer
1) Acesse via broser a aplicação pelo apache http server: http://<ip_do_apache>/systemprops
2) A aplicação mostrará em qual host você vai estar: arquitetura-1 ou arquitetura-2. Vai depender de onde o loadbalancer te direcionou
3) Vá até a máquina que você foi direcionado (arquitetura-1 por exemplo) e pare o WildFly: sudo service wildfly stop
4) Acesse a mesma URL e veja que você foi redirecionado para o arquitetura-2, ou seja, o loadbalancer está funcinando
5) Suba novamente o wildfly: sudo service wildfly start

- Teste o cluster:
1) Faça deploy da aplicação de teste do cluster: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/cluster-example.war
2) Acesse http://<ip_do_apache>/cluster
3) Veja uma contagem acontecendo, esse valor está num EJB Stateful
4) Pare um wildfly
5) A contagem deve continuar
6) Suba a máquina que parou e pare a outra
7) A contagem deve continuar, ou seja, o cluster está funcionando.

Mais detalhes:
- Esse tutorial foi baseado neste:
https://jbossdivers.wordpress.com/2014/03/23/configurando-um-ambiente-wildfly-8-profissional/
https://jbossdivers.wordpress.com/2014/03/23/configurando-um-ambiente-wildfly-8-profissional-parte-2/

- Para mais informações sobre mod_cluster
http://mod-cluster.jboss.org/

- Dúvidas podem ser tiradas no JBUG Brasil:
https://developer.jboss.org/groups/jbug-brasil

Vaaaaleu!!
Adriano Schmidt

segunda-feira, 11 de maio de 2015

Git - reset/revert arquivo

Fala galera,

Hoje fiz um commit e coloquei nele um arquivo q não deveria ter colocado.

Então para voltar o para uma versão antiga rodei o comando:
git checkout origin/master src/main/java/br/com/localhost8080/test01/MinhaClasse.java

Explicando o comando:
git checkout <branch ou commit onde está a versão que você quer restaurar> <caminho do arquivo>

Como eu quis alterar um commit, depois eu dei um "git commit --amend" e fiz o push novamente.

Mais detalhes em:
http://schacon.github.io/git/git-checkout.html

Abraço!
Adriano Schmidt

sexta-feira, 8 de maio de 2015

Selenium Scrool

Olá pessoal,

Estou trabalhando com Selenium e precisei faz um scrool na página para ir para o fim dela.

Fiz da seguinte forma:

/**
* Faz scrool para o fim da pagina 
*/
public void scroolToBottom() {
    String command = "scrollTo(0,3000)";

    JavascriptExecutor javascriptExecutor = (JavascriptExecutor) webDriver;
    javascriptExecutor.executeScript(command);

    try {
        Thread.sleep(5000L);
    } catch (InterruptedException e) {
        logger.error(e);
    }
}

Não sei se é a melhor forma, mas funcionou, vou avaliar outras possibilidade aqui e qualquer coisa atualizo esse post.

Abraço!
Adriano Schmidt

quarta-feira, 15 de abril de 2015

Usuário somente leitura no PostgreSQL

Olá pessoal,

Hoje tive que criar um usuário somente leitura (read-only) no PostgreSQL, ao fazer login com o usuário que tem poder de tudo executei os seguintes comandos:

CREATE USER nomedousuario PASSWORD 'teste';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO nomedousuario;
revoke create on schema public from public;

Você pode rodar a segunda linha (GRANT SELECT) dando outros privilégios como UPDATE, INSERT, DELETE entre outros.
A terceira linha (revoke create) é necessária para tirar a perimissão de criar novas tabelas, mas tira a permissão de todo mundo, provavelmente tem como fazer algo mais específico.

Abraço!!
Adriano Schmidt

quinta-feira, 9 de abril de 2015

ctrl alt down no ubuntu

No eclipse é muito comum utilizar os atalhos "ctrl alt baixo" e "ctrl alt cima" para copiar linhas, certo?

Mas esses atalhos podem ser usados pelo sistema operacional também e acaba não sendo possível utilizá-los no eclipse.

No windows eu tive esse problema e desabilitei algo de atalhos dando um botão direito na área de trabalho e foi bem simples.

No ubuntu foi mais difícil, fui em "Keyboards > Shortcuts > Navigation" e mudei mas não adiantou, continuava trocando a workspace com "ctrl alt baixo". Até que meu amigo Phelipe Winter me deu a solução, que é a seguinte:

* No terminal digite dconf-editor
* Procure (ctrl f) por keybindings ou vá em "org > gnome > desktop > wm > keybindings"
* Edite o switch-to-workspace-down e switch-to-workspace-up tirando o maldito 'Down' e 'Up'

Pronto, use o eclipse feliz da vida :D

Abraço!
Adriano Schmidt