Peguei um projeto com backend em phyton... e quando rodei o comando "pip install" deu o erro:
Collecting psycopg2 (from django-toolbelt==0.0.1->-r requirements.txt (line 7))
Downloading psycopg2-2.6.1.tar.gz (371kB)
100% |################################| 372kB 652kB/s
Complete output from command python setup.py egg_info:
running egg_info
creating pip-egg-info\psycopg2.egg-info
writing pip-egg-info\psycopg2.egg-info\PKG-INFO
writing top-level names to pip-egg-info\psycopg2.egg-info\top_level.txt
writing dependency_links to pip-egg-info\psycopg2.egg-info\dependency_links.txt
writing manifest file 'pip-egg-info\psycopg2.egg-info\SOURCES.txt'
warning: manifest_maker: standard file '-c' not found
Error: pg_config executable not found.
Please add the directory containing pg_config to the PATH
or specify the full executable path with the option:
python setup.py build_ext --pg-config /path/to/pg_config build ...
or with the pg_config option in 'setup.cfg'.
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Adriano\AppData\Local\Temp\pip-build-ihjedt2y\psycopg2
Eu já tinha o PostgreSQL instalado, caso você não tenha, instale-o.
Depois adicione no PATH (variável de ambiente) a pasta bin que fica dentro da pasta de instalação do PostgreSQL
1) Sua Activity deve implementar as classes GoogleApiClient.ConnectionCallbacks e GoogleApiClient.OnConnectionFailedListener
public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
2) Criar um atributo do tipo GoogleApiClient
private GoogleApiClient googleApiClient;
3) No onCreate ou na chamada de um botão você deve verificar se está tudo certo com a API que pega a localização e se estiver construir a API e se conectar nela.
if (this.checkIfGooglePlayServicesAreAvailable()) {
this.buildGoogleApiClient();
this.mGoogleApiClient.connect();
}
Eu uso o Eclipse desde sempre... então quando fui usar o IntelliJ IDEA para desenvolver para Android (Android Studio) eu me perdia nos atalhos... então fiz essa tabelinha com os principais atalhos para não me perder :D
O quê
Eclipse
IntelliJ
Deleta a linha
Ctrl+D
Ctrl+Y
Procura por arquivo
Ctrl+shift+R
Ctrl+shift+N
Troca linha de lugar
Shift+Up/Down
Alt+shift+Up/Down
Duplica a linha
Ctrl+shift+Down
Ctrl+D
Navegar entre abas
Ctrl+PgUp/PgDn
Alt+Left/Right
Organizeimports
Ctrl+Shift+O
Ctrl+alt+O
Format
Ctrl+sfhit+F
Ctrl+alt+L
Tem algum atalho que você acha que devia estar nessa lista? Comenta aí :)
Caso você não queira fazer isso programaticamente pode usar o ADB Shellhttps://developer.android.com/tools/help/shell.html
É bem simples, basta acessar o terminal e ir até a pasta plataform-tools dentro da pasta do SDK do Android "cd <sdk_folder>\platform-tools"
Digite "adb devices" e tendo um dispositivo na lista basta digitar "adb shell" e você já pode digitar os comandos linux.
Para quem é do mundo JavaScript isso que vou mostrar é básico, mas quem é programador Java e precisou fazer isso em JavaScript com certeza tentou fazer um for... Vamos lá:
----------------
Imagine que você tenha uma lista de objetos... e cada objeto tenha um atributo chamado id... como você faria para obter uma nova lista com apenas com os ids?
Assim:
var idList = list.map(function(entity) {
return entity.id;
});
----------------
Imagine que você tenha uma lista de objetos... e cada objeto tenha um atributo chamado value... como você faria para obter a soma de todos os atributos value?
Imagine que você tenha uma lista de objetos, e queira que excluir dessa lista todos os itens com id < 10 (ou qualquer outra condição). Só usar o filter:
var filteredList = list.filter(function(entity) {
return entity.id > 10;
});
Fala galera... fiz uns exemplos aqui pra testar a nova funcionalidade do WildFly 10 que permite que a gente escreva código JavaScript no Server Side \o) Criei alguns RESTs, um deles inclusive acessa um banco de dados e retorna o JSON....
Segue abaixo o código (github) e o passo-a-passo pra rodar aí na sua máquina.
Siga esses passos:
- Baixar e descompactar o WildFly 10
- Ir na pasta bin do WildFly e rodar o standalone.bat (no Windows) ou standalone.sh (no linux)
- Baixar esse projeto do github: https://github.com/adrianoschmidt/wildfly-js
- Abrir a pasta do projeto e rodar um "mvn clean install"
- Copiar o war gerado na pasta target do projeto e colar no <WildFly>/standalone/deployments
- Acessar via browser as seguintes URLs:
Você pode usar isso caso precise mesmo acessar um JMX ou caso queira testar se ele está aberto ou não, esse foi meu caso. Em ambientes de produção é sempre interessante que ele não esteja visível.
Para usar a classe é só rodar ela normalmente pela IDE ou por linha de comando.
Com localhost, ao rodar na máquina onde está o WildFly deveria funcionar, pelo IP não deveria funcionar, pois por segurança não deveria estar disponível para acesso externo.
Para bloquear o acesso você pode fazer isso na sua infraestrutura ou no WildFly no stanalone.xml na seção interfaces.
Hoje tentei deletar uma pasta no Windows e aconteceu esse erro:
"Os nomes dos arquivos de origem são maiores do que o tamanho máximo permitido pelo sistema de arquivos."
Esse erro é causado pois o nome do caminho completo do arquivo é muito grande, mais do que o Windows suporta. No meu caso o npm criou umas pastas muito loucas no node_modules e aí gerou esse problema.
Para resolver faça o seguinte:
Alternativa 1) Renomear diretorios
Renomeie alguns diretorios, por exemplo:
Dê:
c:\work\projeto\node_modules\alguma coisa\outra coisa\diretorio com nome grande\mais uns 4 diretorios\arquivo.txt
Para:
c:\work\projeto\n\a\o\d\m\arquivo.txt
Assim o caminho do arquivo fica menor e tá tudo certo.
Alternativa 2) Mapear como unidade de rede
a) Faça uma pasta compartilhada
Você vai na pasta, talvez não na pasta mais interna, mas em alguma no meio do caminho e compartilha ela na rede (Botão direito na pasta > Compartilhar com)
b) Mapeie uma unidade de rede
Depois você tem que mapear essa pasta compartilhada como uma unidade de rede (Botão direito em Meu computador > Mapear unidade de rede > Escolhe a pasta compartilhada)
c) Exclua o arquivo
Ao acessar essa nova unidade (unidade "Z:" por exemplo) você vai conseguir excluir ou mover os arquivos pois agora o caminho completo do arquivo ficou menor.
Hoje precisei rodar o Grunt com HTTPS para fazer uns testes aqui. Segue o passo-a-passo:
Primeiro crie o certificado. Aqui estou usando o openssl no ubuntu. Se você usa Windows pesquise sobre como criar certificado no windows ( https://www.openssl.org/related/binaries.html )
openssl genrsa -out livereload.key 1024
openssl req -new -key livereload.key -out livereload.csr
(esse comando vai pedir alguns dados... vai preenchendo... Só em "Common Name" coloque "localhost" sem aspas)
Agora você tem 3 arquivos, copie os livereload.key e livereload.crt para dentro do seu projeto, na mesma pasta do Gruntfile por exemplo.
Eu criei uma pasta chamada ssl dentro da pasta onde está o Gruntfile.
----------------------
No seu Gruntfile no "watch: {" você tem colocar esse options em todos os lugares que você quer que rode com https (no js, css e no livereload) por exemplo:
Agora no seu index.html, uma linha antes de fechar o body (</body>) cole isso:
<script>document.write('<script src="https://' + (location.host || 'localhost').split(':')[0] + ':9000/livereload.js"></' + 'script>')</script>
Pronto, ao rodar o "grunt serve --force" tudo estará rodando em HTTPS :)
Seguindo nessa linha instalei extensões no google chrome. Pesquisei por "cross domain" e achei várias. Mas não resolveu meu problema.
Iniciei o google chrome passando parâmetros para desabilitar a segurança. No Ubuntu fiz dessa forma:
google-chrome --disable-web-security --allow-file-access-from-files --allow-file-access --allow-cross-origin-auth-prompt
Mas não resolveu meu problema.
Achei que o erro estava acontecendo pois eu estava rodando em localhost ou 0.0.0.0 (estou usando grunt no meu projeto). Então tentei utilizar um DNS. Mas não resolveu meu problema.
Por fim, identifiquei, que minha empresa tinha um servidor de proxy, e por mais que minha máquina estivesse liberada e eu pudesse acessar tudo (pelo menos era o que parecia) verifiquei no network do chrome que o meu OAUTH Client acessava em algum momento a URL http://static.ak.facebook.com e o response vinha com uma página do google, e isso que gerava o erro.
Solução: Desligamos a máquina do proxy, não faz sentido hoje em dia usar isso :D E tudo funcionou perfeitamente \o)
Obrigado ao Herbert Smith e ao Alfredo Zipperer pela força!
Segue passo-a-passo para instalar o MongoDB no Linux
Onde estiver escrito (root) você deve utilizar um usuário com permissão de root
Apenas para informacao: O mongo rodara em localhost:27017 e tambem sera startado automaticamente na proxima inicializacao da maquina.
########### Para RedHat/CentOS ###########
# crie o diretorio /data/db (root)
mkdir -p /data/db
# Garanta que o dono da pasta seja o usuario correto. (Altere <nome do usuario> para o usuario que iniciara o mongo) (root)
chown -R <nome do usuario> /data/db/
# crie o arquivo do repositorio yum (root)
vi /etc/yum.repos.d/mongodb-org-3.0.repo
# aperte i para entrar no modo "INSERT" e depois cole as seguintes linhas:
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1
# aperte "ESC" e depois digite ":wq" para salvar e fechar o arquivo
# agora instale o mongo (root)
yum install -y mongodb-org
# rode o comando abaixo e verifique se a instalação aconteceu com sucesso
mongo --version
# inicie o mongo
service mongod start
# teste
mongo
#apert ctrl c para sair
########### Para Ubuntu/Debian ###########
# crie o diretorio /data/db (root)
mkdir -p /data/db
# Garanta que o dono da pasta seja o usuario correto. (Altere <nome do usuario> para o usuario que iniciara o mongo) (root)
chown -R <nome do usuario> /data/db/
# agora instale o mongo (root)
apt-get install mongodb
# rode o comando abaixo e verifique se a instalação aconteceu com sucesso
mongo --version
No terminal, rode o comando "java -version" para ver a versão atual utilizada na sua máquina:
Rode o "sudo update-alternatives --config java" para ver as versões instaladas na sua máquina.
Como você usou o "sudo" talvez seja solicitado a senha do seu usuário.
Depois digite o número da coluna "Selection" de acordo com a versão que você que utilizar.
Depois rode o "java -version" de novo para verificar se funcionou:
Queria que antes e depois da execução de determinados métodos fosse chamado um Rest.
Também queria que se o método lançasse uma exception, chamasse outro Rest.
Pensei em annotation processor... orientação a aspectos com o aspectj... no fim resolvi com o Spring AOP.
Resumindo, você precisa:
Criar uma annotation para anotar no método que você quer interceptar.
Criar um Advisor para ler os métodos que tem a annotation.
Criar o interceptador para inserir o comportamento que você quer.
Alterar o applicationContext.xml e colocar o component-scan com o pacote onde está seu Advisor e adicionar o bean DefaultAdvisorAutoProxyCreator.
Com isso você consegue apenas colocando uma anotação no seu método fazer algo antes dele ser chamado, depois, ou tratar exceptions por exemplo.
Para fazer seu projeto fazer deploy no nexus você precisa:
Criar repositórios no nexus:
Acesse o nexus como admin e crie dois repositórios do tipo "Hosted Repository"
Configure o "Repository Policy" do primeiro como "Release" e dê o nome de nome-do-projeto-releases
Configure o "Repository Policy" do segundo como "Snapshot" e dê o nome de nome-do-projeto-snapshots
Adicionar no seu pom: (altere a URL e o nome-do-projeto) <distributionManagement> <repository> <id>nome-do-projeto-releases</id> <url>http://nexus.localhost8080.com.br/nexus/content/repositories/nome-do-projeto-releases</url> </repository> <snapshotRepository> <id>nome-do-projeto-snapshots</id> <url>http://nexus.localhost8080.com.br/nexus/content/repositories/nome-do-projeto-snapshots</url> </snapshotRepository> </distributionManagement>
Configurar settings.xml
Configure o setting.xml (seja no maven da sua máquina ou no Jenkins (no jenkins você pode configurar pelo managed files também))
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.
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.
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.
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!
Sou consultor em UX, e como tenho um MBA em Marketing Digital, venho trabalhando muito com startups e e-commerces fazendo de tudo um pouco :)
Mas comecei minha carreira como desenvolvedor Java :) E sempre segui firme na área de desenvolvimento fazendo freelascom front-end e mobile (Ionic ou Android nativo)
Atualmente estou no projeto O usuário está bêbado onde eu bebo muita cerveja e testo sites, apps ou sistemas em uma perspectiva de UX. Dê uma olhadas nos vídeos do youtube
Precisa de consultoria em UX ou de um desenvolvedor freelancer? Só chamar!