quarta-feira, 28 de setembro de 2016

Criando "Pendrives" de boot no windows sem "programinha"

Por vários motivos, uma das coisas que eu não gosto é ficar instalando "programinhas" no Windows pra fazer as coisas. 

Se o software não for Livre ou Open Source, às vezes por mais que você preste atenção e desmarque 10 opções na instalação sempre vem um software adware ou outros verdadeiros vírus semelhantes junto com o app que você está instalando.

Muita gente não sabe, mas não precisa de programinha pra criar pendrive de boot.

Um pendrive configurado para boot via porta USB geralmente é usado quando você quer formatar o PC ou rodar um sistema operacional "Live", ou seja, um S.O que não precisa ser instalado na máquina para você eventualmente dar manutenção no Windows (por exemplo com o https://partedmagic.com)

Pra criar um pendrive de boot você pode usar um utilitário do Windows chamado diskpart.

Basta abrir o terminal e executar-lo:


Irá aparecer:


A seguir você deve selecionar o disco. Se tiver aquivos que você ainda vai usar nele faça backup (será FORMATADO):


Então selecione o disco (cuidado pra não selecionar o disco errado). Pelo tamanho do disco você consegue ver qual é o pendrive:


Limpe o disco:


Crie uma nova partição primária o formate com os comandos abaixo:

create partition primary
select partition 1
active
format fs=ntfs quick
assign
exit



O pendrive está pronto!
Se você vai gravar uma imagem ISO, do Windows 8 em diante você consegue "montar" o arquivo clicando com o botão direito. Daí ele irá aparecer no "meu computador" como se você um CD/DVD inserido no PC. 
Em versões antigas do Windows: descompacte com o 7zip (ou winrar pra quem gosta):



Depois é só copiar e colar os arquivos no pendrive.

Para você dar boot no pendrive, talvez só isso não baste, principalmente se você nunca fez isso nesse PC.
Então você deve dar uma olhada nas configurações da BIOS do seu PC (ou UEFI nos PCs mais modernos):

Terminal "Linux like" no Windows

Parece uma coisa boba mas sofri um pouco antes de achar isso.

Trata-se de você não ter que ver isso quando abre o terminal no Windows.



Nosso velho "amigo" é um pouco feioso né? Quem já usou Linux sabe que os terminais do Linux são bonitos e cheios de funcionalidades, e muitas vezes é bem mais fácil (para alguns) digitar um comando no terminal que ficar clicando aqui e ali e lá. 
O pior é quando você se vê obrigado a usar o windows já tendo usado Linux.

Felizmente, existem alguns terminais bem legais pra windows que vão ajudar bastante. São chamados de "emuladores de terminal", porque na prática não substituem o terminal do windows, só estendem as funcionalidades e escondem a cara feia dele.

O que gostei mais foi o Cmder. Vejamos um trecho traduzido do site oficial (http://cmder.net):

"Cmder é um pacote de software criado pela pura frustração sobre a falta de bons emuladores de console no Windows. É baseado em softwares incríveis, e temperado com o esquema de cores Monokai e um layout personalizado, com visual sexy desde o início."



Ele já vem com alguns comandos do Linux que você pode usar à vontade, como por exemplo o superte ao git e o ssh/scp. A única coisa que achei chatinha é o que eu considero um BUG: o comando history -c parece que não está funcionando. Mas você pode apagar as linhas do arquivo .history que fica dentro da pasta cmder\config que tem o mesmo efeito.
E como no Cmder você pode definir seus próprios comandos, você pode definir um comando personalizado para apagar o histórico: abra o arquivo "user-alses.cmd" que fica na pasta "config" e inclua a seguinte linha:

hc.=echo clear > %CMDER_ROOT%\config\.history

Feche e abra o Cmder.

Assim quando você digitar "hc." e der enter, os únicos comandos que ficarão são os comandos que você digitou na ultima sessão, antecedidos de "clear".

LAMP no Debian e distribuições baseadas

Um assunto já exaustivamente documentado em vários sites da internet é como instalar a pilha LAMP no Debian (Linux + Apache + MySql + PHP).

Acontece que acabam viajando na maionese e complicando uma coisa que é simples, falando coisas desnecessárias e não explicando todo que tem que explicar.

Se você só quer o LAMP instalado de forma padrão, basta como root executar no terminal:

apt-get update && apt-get install apache2 mysql-server php5 php5-dev php5-mysql php-pear phpmyadmin

Será exibido a lista de pacotes que serão instalados, confira e pressione y, ou s se você estiver usando o Debian em português.

Em seguida será solicitado que você defina a senha do MySql.
Não é obrigatório, porque depois você pode defini-la conforme vou explicar abaixo, mas é bom já definir uma senha agora. Informe a senha e confirme:




CONFIGURAÇÃO DO PHPMYADMIN

Irá aparecer a tela abaixo, selecione a primeira opção:



A seguir, se você definiu uma senha para o MySql será solicitada. Isso é para que o phpmyadmin possa fazer algumas configurações automáticas. Depois será solicitado a senha de administração do phpmyadmin, note que são senhas distintas.

Depois disso você poderá acessar o phpmyadmin pelo navegador conforme abaixo:




LIBERANDO ACESSO REMOTO


Por padrão o acesso remoto no MySql é restrito ao servidor local. Se você quer liberar o acesso na rede, para poder por exemplo acessar de um programa cliente ou de uma IDE faça o seguinte logado como root:
nano /etc/mysql/my.cnf


Econtre a linha "bind-address  =  127.0.0.1" e coloque um # (sharp) na frente dela, assim:

#bind-address  =  127.0.0.1

Agora faça loguin no MySql:

mysql -u root -p 

Depois de logado execute:

GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'suasenha';
quit

Isso vai liberar direto ao MySql para todas a maquinas da rede. Você pode liberar o acesso por IP também colocando @'numero-do-ip', em vez de @'%', mas eu acho melhor você fazer esse controle de acesso via firewall, porque é mais fácil.
Mas enfim, reinicie o MySql e o acesso estará liberado:
invoke-rc.d mysql restart


COMO RESETAR/DEFINIR A SENHA DO MYSQL

Se por algum motivo você não informou na instalação a senha do ROOT do banco de dados MySql, ou esqueceu (acontece), até onde eu sei não é possível recuperar...Mas segue os passos para reseta-la, como root execute isso para PARAR o SGBD (testado no MySql 5):


sudo /etc/init.d/mysql stop

Agora inicie o MySql em modo de segurança:


sudo mysqld_safe --skip-grant-tables &

Depois faça loguin como root (como o MySql está executando em modo de segurança não será solicitado senha):


mysql -u root

 Agora basta resetar a senha:

use mysql;

update user set password=PASSWORD('a-nova-senha-vai-aqui') where User='root';

flush privileges;

quit

Agora reinicie o MySql e pronto:


sudo /etc/init.d/mysql stop 

sudo /etc/init.d/mysql start

Versões descontinuadas do Debain - apt

Uma dica rápida mas que pode ser útil se por algum motivo você precisar um dia instalar pacotes em uma versão descontinuada do Debian. Se você não sabe o que é Debian dê uma olhada aqui.

Considere por exemplo que você tem que instalar um pacote no Debian Squeeze (Debian versão 6).

Se você não sabe qual é a versão do seu Debian execute o comando "cat /etc/issue" ou "cat /etc/debian_version", deverá ver algo assim:

root@debian6:/home/oracle# cat /etc/issue
Debian GNU/Linux 6.0 \n \l

root@debian6:/home/oracle# cat /etc/debian_version 
6.0.10
root@debian6:/home/oracle# 

 
Mas voltando o assunto, se você está com o sources.list original e estiver com uma versão descontinuada do Debian, ao Executar:

apt-get update

Você receberá erros parecidos com esses no terminal:

Err http://ftp.br.debian.org squeeze/main Sources
  404  Not Found [IP: 200.236.31.3 80]
Err http://ftp.br.debian.org squeeze/main amd64 Packages
  404  Not Found [IP: 200.236.31.3 80]
W: Failed to fetch http://ftp.br.debian.org/debian/dists/squeeze/main/source/Sources.gz  404  Not Found [IP: 200.236.31.3 80]

W: Failed to fetch http://ftp.br.debian.org/debian/dists/squeeze/main/binary-amd64/Packages.gz  404  Not Found [IP: 200.236.31.3 80]

E: Some index files failed to download, they have been ignored, or old ones used instead.

Isso acontece porque a distribuição foi descontinuada e os pacotes foram movidos para outro lugar. Ao tentar atualizar a lista de pacotes o Debian não encontra os pacotes e mostra esses erros.

Para resolver isso altere seu arquivo sources.list que fica no diretório /etc/apt/ e deixe descomentadas apenas as seguintes linhas:

deb http://archive.debian.org/debian/ squeeze main non-free contrib
deb-src http://archive.debian.org/debian/ squeeze main non-free contrib

Salve o arquivo e como root execute novamente:

apt-get update

Se tudo deu certo a lista de pacotes foi atualizada com sucesso, e você deve ver uma saída +/- assim:


root@debian6:/home/oracle# apt-get update
Hit http://archive.debian.org squeeze Release.gpg
Ign http://archive.debian.org/debian/ squeeze/contrib Translation-en
Ign http://archive.debian.org/debian/ squeeze/contrib Translation-en_US
Ign http://archive.debian.org/debian/ squeeze/main Translation-en
Ign http://archive.debian.org/debian/ squeeze/main Translation-en_US
Ign http://archive.debian.org/debian/ squeeze/non-free Translation-en
Ign http://archive.debian.org/debian/ squeeze/non-free Translation-en_US
Hit http://archive.debian.org squeeze Release
Hit http://archive.debian.org squeeze/main Sources
Hit http://archive.debian.org squeeze/non-free Sources
Hit http://archive.debian.org squeeze/contrib Sources
Hit http://archive.debian.org squeeze/main amd64 Packages
Hit http://archive.debian.org squeeze/non-free amd64 Packages
Hit http://archive.debian.org squeeze/contrib amd64 Packages
Reading package lists... Done
root@debian6:/home/oracle# 

segunda-feira, 26 de setembro de 2016

LibreOfifce Calc como ferramenta de análise de cadência de vendas

Conforme já comentei em outros posts a maioria das pessoas ainda não gosta de usar o LibreOffice e preferem usar o Microsoft Office pirateado. Se você não sabe o que é LibreOffice dê uma olhada aqui.

Dependendo do uso que você faz do Office você não precisa dele, não precisa comprá-lo. 
É como usar um carro esportivo só para andar dentro da cidade sem nunca ir em uma pista de corrida. Além de gastar mais dinheiro você não usa nem metade do que o carro te oferece. Isso é desnecessário.

Hoje vamos resolver um problema moderado usando um aplicativo da suíte LibreOffice, o Calc, usando a formula de desvio padrão que ele oferece.

Imagine o seguinte cenário:

Você é o gerente de uma grande equipe de vendedores, e de repente você descobre que por algum motivo alguns vendedores não vendem durante alguns dias da semana, ou seja, estão concentrando o faturamento da empresa em apenas alguns dias sendo que poderiam "cadenciar" a venda, ou seja, buscar vender pelo menos um pouco todo dia.
Então você chama sua equipe de vendas e informa que devem vender todo dia.

No final da semana você pede que cada um informe a quantidade média de vendas por dia e obtêm os seguintes dados:



Aparentemente todos cumpriram com o combinado, mas intrigado você decide levantar os dados na contabilidade e descobre que na verdade as vendas ocorreram +/- dessa forma:



Olhando o relatório da contabilidade acima você percebe que em muitos dias não ouve vendas. Até parece que os vendedores mentiram, mas você faz uma conferência por amostragem das médias de vendas diárias e vê que elas "batem". Logo vê que não é possível determinar a cadência de vendas através da média.

Aqui temos apenas 6 vendedores só para não ficar uma imagem muito grande, mas imagine que sejam 200. Também note que no mundo real os vendedores irão vender quantidades de produtos diferentes entre si. Imagine também que alem dos dados da semana você gostaria também dos dados do mês inteiro.

E agora? Como descobrir rapidamente quais os vendedores não cumprem com o combinado? E até mesmo fazer um ranking dos melhores e dos piores com respeito à cadência de vendas? 
Simples: você pode calcular o desvio padrão do período por vendedor.

O QUE É DESVIO PADRÃO
Se já sabe o que é desvio padrão vá para a próxima parte.

Vejamos uma definição:

"Em Probabilidade e Estatística, o desvio padrão é a medida mais comum da dispersão estatística (representado pelo símbolo sigma, σ). Ele mostra o quanto de variação ou "dispersão" existe em relação à média (ou valor esperado). Um baixo desvio padrão indica que os dados tendem a estar próximos da média; um desvio padrão alto indica que os dados estão espalhados por uma gama de valores.

O desvio padrão define-se como a raiz quadrada da variância. É definido desta forma de maneira a dar-nos uma medida da dispersão que:

Seja um número não-negativo;
Use a mesma unidade de medida dos dados fornecidos inicialmente.

Faz-se uma distinção entre o desvio padrão σ (sigma) do total de uma população ou de uma variável aleatória, e o desvio padrão de um subconjunto em amostra." - fonte https://pt.wikipedia.org/wiki/Desvio_padr%C3%A3o

OK, li 2x e não entendi nada...

Rsrs, não se preocupe, vamos simplificar. 

Desconsidere a diferença entre "desvio padrão amostral x desvio padrão populacional", para esse exemplo os 2 servem, mesmo assim vamos usar o populacional. 

Se não entendeu nada até aqui, então entenda o seguinte:

Veja esse alvo de tiro usado por duas pessoas diferentes:


A que conclusão podemos chegar? - O cara da direita tem Mal de Parkinson e não mexa com o cara da esquerda! kkkk Sim, esta conclusão pode ser correta... mas o ponto não é esse!


Imagine que esse alvo é na verdade um plano cartesiano e a "mosca" do alvo representa uma média que estamos buscando atingir. No caso dos alvos seria a coordenada 0,0, e no caso das vendas que vimos acima seria 1 venda por dia, totalizando 6 vendas ao final da semana.

No alvo da esquerda os tiros mais próximos da média são como dados homogêneos, ou seja, a maioria tem valor bem próximo da coordenada 0,0 e portanto os valores são próximos entre si - homogêneos/próximos. Se calcularmos o desvio padrão disso ele será próximo de 0,0.

Já no alvo da direita, se os buracos de bala fossem coordenadas numéricas e calculássemos o desvio padrão, o número seria bem, mas bem maior mesmo que zero, mostrando que as coordenadas são como dados heterogêneos/dispersos em relação à média (lembre nesse exemplo a média é a mosca do alvo).


Então podemos dizer que: 

Dados homogêneos (dispersão menor) = desvio padrão menor.

Dados heterogêneos (dispersão maior) = desvio padrão maior.


Veja novamente:


Vejamos agora novamente a planilha de vendas, mas agora com uma coluna que calcula o desvio padrão das vendas de cada vendedor em relação aos dias úteis da semana:




Agora podemos ver claramente que o único vendedor do nosso exemplo que cumpriu a risca o combinado foi o "vendedor C", pois o cálculo do desvio padrão das vendas dele foi igual a zero - ele acertou na mosca!
E em contraste com ele o "vendedor Z" não fez caso do combinado, ele ficou 4 dias da semana sem vender nada e só fez vendas Sexta e sábado, podemos ver que o desvio padrão dele é o maior de todos!
Nessa planilha também podemos aplicar filtros e classificar os dados pela coluna do desvio padrão do menor para a maior, para facilitar a análise dos dados:


Conforme eu disse no início do post, muitas funções de cálculo que estão disponíveis no M$ Office, também estão no LibreOffice, e o uso delas é simples em ambos, com pequenas diferenças entre si, mas basta se acostumar com o funcionamento do LibreOffice.

Monitorando produtos no ML com Python 3 via BeautifulSoup

Hoje vamos fazer uma coisa relativamente simples mas bem legal.
Vamos criar um BOT que irá se conectar com um anúncio do Mercado Livre e irá dizer pra nós qual é a quantidade disponível desse produto no estoque do vendedor. 

Por motivos variados talvez você precise fazer isso um dia, talvez não com o ML, mas com outro site.
Vamos fazer algo específico: monitorar apenas a quantidade do produto no ML. Mas o exemplo de código que vamos criar serve para monitorar qualquer informação de qualquer site! Basta você saber um pouco de HTML e criar a lógica certa. Para este exemplo vamos usar Python 3.4.

Um pouco sobre BeautifulSoup extraído e traduzido da documentação oficial:

"Beautiful Soup é uma biblioteca Python para extrair dados de arquivos HTML e XML. Ele funciona com o seu analisador favorito para fornecer maneiras idiomáticas de navegar, pesquisar e modificar a árvore convertida (DOM). Ele comumente salva programadores horas ou dias de trabalho."

Palavras bonitas não concorda? Vamos ver na prática então:

Primeiro passo: como e onde olhar para saber a quantidade disponível de um produto no ML. Futuramente isso pode mudar, mas hoje é assim:

Considere esse anúncio que estava ativo na data de hoje: http://produto.mercadolivre.com.br/MLB-713818524-mouse-logitech-g602-wireless-2500dpi-11-botoes-gar-3-anos-_JM
É um G602 (eu tenho hihi).
Ostentações a parte vamos ao que interessa, no navegador Chrome ou Firefox, entre no anúncio e clique com o botão direito em cima do preço e selecione "exibir código fonte". 
Aperte ctrl + F e busque pela palavra "Quantidade". 
Você vai ver uma coisa +/- assim:



Não precisa pensar muito pra ver que o input "productStockQuantity" tem os atributos "min" e "max" setados. E o atributo "max" está com o valor 2:




Significa que mesmo que você queira comprar mais de 2 unidades, não vai poder. Por quê? Porque só tem 2 no estoque.

Podemos ver também que junto com esse input tem mais 2 outros e os 3 inputs estão dentro de uma tag div, que por sua vez está dentro de um form (id="productInfo"). 
Mas não é necessário acessar o form pra pegar o input de quantidade do produto, podemos acessar diretamente o input, vajamos o código necessário pra fazer tudo isso:


from bs4 import BeautifulSoup
from urllib.request import urlopen

url = 'http://produto.mercadolivre.com.br/MLB-713818524-mouse-logitech-g602-wireless-2500dpi-11-botoes-gar-3-anos-_JM'
html = urlopen(url).read()
soup = BeautifulSoup(html, 'html.parser')
quntidadeMaxima = soup.find(id="productStockQuantity")["max"]
print(quntidadeMaxima) 

 Você vai ver isso:



Sempre quis dizer isso: Mais fácil que isso é difícil! rsrs.

Se você nunca desenvolveu em Python, para executar o código abaixo basta abrir um editor de texto colar o código, ir até o diretório onde está o script e dar o comando: "python3 nomeDoScript.py".

Agora vamos entender o que foi feito.

Aqui importamos a biblioteca BeautifulSoup e urlopen para poder se conctar com o site e ler as tags html dele.

from bs4 import BeautifulSoup
from urllib.request import urlopen

Em seguida lemos todo o texto HTML do link abaixo e jogamos dentro de uma variável.

url = 'http://produto.mercadolivre.com.br/MLB-713818524-mouse-logitech-g602-wireless-2500dpi-11-botoes-gar-3-anos-_JM'
html = urlopen(url).read()

Aqui pegamos o texto html e passamos para o BeautifulSoup transformar em um objeto Python que podemos ler facilmente com a sintaxe Python.
soup = BeautifulSoup(html, 'html.parser')

Então pedimos ao BeautifulSoup buscar na tag de quantidade do produto (productStockQuantity) o valor do atributo "max", daí criamos uma variável e jogamos esse conteúdo dentro dela, depois mandamos imprimir o valor na tela.
quntidadeMaxima = soup.find(id="productStockQuantity")["max"]
print(quntidadeMaxima) 

Desculpe possivelmente ofender sua inteligência, mas talvez você pense: "ué! ele fez um script que lê uma quantidade de um produto anunciado? É melhor eu entrar no site e olhar ué...".
Na verdade eu demonstrei como ler 1 produto a título de exemplo...

Imagine agora que por um motivo qualquer você têm 1000 anúncios cadastrados em um banco de dados e você precise monitorar esses anúncios a cada meia hora. Não vai dar pra você "entrar no site e olhar".

Mas você pode fazer uma função Python que retorna a quantidade disponível com base em uma url passada como parâmetro. Por Exemplo:
from bs4 import BeautifulSoup
from urllib.request import urlopen

def quantidadeDisponivelML(urlProduto):
 html = urlopen(urlProduto).read()
 soup = BeautifulSoup(html, 'html.parser')
 quntidadeMaxima = soup.find(id="productStockQuantity")["max"]
 return quntidadeMaxima

if __name__ == '__main__': 
 url = 'http://produto.mercadolivre.com.br/MLB-713818524-mouse-logitech-g602-wireless-2500dpi-11-botoes-gar-3-anos-_JM'
 quantidadeDisponivel = quantidadeDisponivelML(url)
 print(quantidadeDisponivel) 

E imagine que você poderia chamar essa função de uma outra função que pega cada link e passa para essa retornar a quantidade, etc. 

domingo, 25 de setembro de 2016

Detalhes sobre a instalação do Python no Windows

Se você usa MAC ou Linux você provavelmente não vai aproveitar nada desse artigo.
No Windows, a instalação do Python é relativamente simples se você só vai usar uma versão do Python.
Isso porque você pode usar várias versões do Python ao mesmo tempo, 
se você quiser.
Você pode usar a versão 2 e aversão 3 ao mesmo tempo por exemplo.

Por esse motivo ao instalar o Python no Windows com o instalador estilo "next next finish" em um determinado momento você vai receber uma tela parecida com essa:



Note que a última opção está com um X vermelho, representando que ela não será executada. 
Isso é pra evitar problemas se você já tem ou teve instalações do Python no seu windows.
Para saber se o Python já está instalado abra o terminal e digite "py". Se você receber algo como isso:



Aqui mostra que eu tenho a versão 3.4 instalada e ela está setada no PATH do sistema, ou seja na variável de ambiente PATH.
Nessa variável de ambiente você só deve deixar a versão do Python que você usa por padrão.
Se em vez dessa tela você recebeu uma tela de erro, provavelmente o Python não está instalado no seu sistema. Mesmo assim você pode ver o conteúdo da variável de ambiente PATH: ainda no terminal digite "echo %PATH%".



Veja que eu tenho 2 referencias ao Python 3.4 na minha variável de ambiente PATH porque eu selecionei como a ativa a última opção de instalação acima. Então no meu caso se eu quiser instalar uma versão diferente do Python, é bom que apagar essas referências, embora se não forem apagadas e a versão 3.4 tiver sido desinstalada, dificilmente terá algum problema. Apagar elas é uma questão de organização e limpeza.

Então resumindo: se na instalação do Python se você modificar a opção de adicionar o Python ao PATH, certifique-se de que não existe outra referencia no PATH apontando para uma outra instalação ativa, ou você pode ter problemas.
É importante enfatizar que se você não modificar a ultima opção da tela acima para o Python inserir as referencia no PATH durante a instalação, vai ter que fazer isso manualmente mais tarde.

Como traduzir sites inteiros de Inglês para Português

Já pesquisou um assunto no Google em português e não conseguiu encontrar nenhum conteúdo relacionado ao que você queria saber?

Tem casos em que nosso inglês pode "engasgar" também.
Esses dias encontrei facilmente essa ferramenta que traduz sites INTEIROS:

http://itools.com/tool/google-translate-web-page-translator

O uso é simples: cole o site que você quer traduzir conforme abaixo:



Em "To", selecione "Portuguese" e clique em "Translate". 
Algumas coisas não são traduzidas certo, mas se você souber pelo menos um pouco de inglês vai conseguir entender sem maiores problemas.

Porque usar o Microsoft Excel

Se você trabalha com finanças, análise de resultados, contabilidade e áreas correlatas, você usa uma ferramenta de trabalho importantíssima, e na minha opinião, uma verdadeira obra de arte: o Excel.

Daí você pode pensar: "Oh! Então você vai fazer um artigo sobre como o Excel é maravilhoso e indispensável !? Pra mim o Excel é fácil!"
Então o que eu tenho pra te dizer é: NÃO USE O EXCEL!

Parece um paradoxo dizer isso, mas a não ser que você seja um programador VBA, entendo que se você só usa o Excel para visualizar relatórios e fazer cálculos com fórmulas básicas e planilhas simples e gráficos, você não está usando nem metade do Excel. Veja meu post LibreOfifce Calc como ferramenta de análise de cadência de vendas.

Existem softwares GRATUITOS que atendem essas necessidade, como por exemplo o Calc da suíte LibreOffice. Existe também o OpenOffice mas particularmente não recomendo o uso dele pelos motivos expostos aqui http://www.howtogeek.com/187663/openoffice-vs.-libreoffice-whats-the-difference-and-which-should-you-use/
Se você não sabe inglês muito bem veja Como traduzir sites inteiros de Inglês para Português.

Na verdade minha relação com o Excel é de amor e ódio, porque eu não gosto de software proprietário, mas não tem como ficar sem o Excel e eu admito que ele é uma ferramenta excepcional. 
Por quê? Porque uso Excel com VBA. Se você não sabe o que é VBA dê uma olhada aqui: http://www.excel-easy.com/vba.html
Mas em outras palavras VBA é VBScript embarcado dentro do Excel e outros aplicativos da suíte Microsoft Office.
Usando VBA você consegue extrair o pleno potencial não só do Excel, mas também de todos os programas do Microsoft Office (Word, PowerPoint, Access, etc.), você consegue criar aplicativos poderosos.
Mas não faça "uso bombril" do Excel. Uso bombril é usar uma única coisa pra fazer tudo, a longo prazo, isso gera problemas difíceis de resolver. Não dá pra usar Excel pra tudo! Cada problema tem uma solução e cada doença tem um remédio específico pra ela. Veja Porque aprendi Python.
Mas VBA ainda não é o limite do que o Excel pode fazer! A coisa mais fascinante que eu vi no Excel é poder ser manipulado via Component Object Model (COM).

Em Python isso é relativamente simples se você tiver instalado em su máquina a extensão win32com do Python (a instalação é ridiculamente simples).
Feito isso e com o Python instalado(veja em Detalhes sobre a instalação do Python no Windows para ver se você instalou corretamente), abara o bloco de notas e digite:


import win32com.client 

excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True
book = excel.Workbooks.Add()
sheet = book.Worksheets(1)
sheet.Range("A2").Value = "Hello world Excel COM stuf."
sheet.Range("A2").Font.Size = 50
sheet.Range("A2:Q2").Select() 

Salve com a extensão .py e dê um duplo clique. O resultado será +/- esse:




Ou seja, o que acabamos de fazer?: abrimos o Excel de dentro do Python e manípulamos o conteúdo de uma planilha com apenas 8 linhas de código, sem nenhuma linha de código VBA! Sem nenhuma linha de código proprietário da plataforma Windows. 
Esse mesmo efeito também pode ser feito com VBScript, mas se você não gosta de programar em VBScript pode perfeitamente fazer com Python! 
Parabéns às duas tecnologias: Python e Excel.

Existe também um projeto interessantíssimo de Python para Excel feito por um bancário disponível aqui:  http://opentradingsystem.com/PythonForExcel/main.html

sábado, 24 de setembro de 2016

Porque aprendi Python

Aprendi Python por 2 motivos principais:
Sempre usei sistemas Linux, e na comunidade Linux se fala muito de Phython, por motivos simples: No Linux e no MAC o Python já vem instalado. No Windows é fácil instalar, tem um instalador estilo "Next next finish". Cross-platform baby!
- "Ha! Mas tem o Node JS que é melhor!". Ele não é melhor. Ele tem uma abordagem diferente, e é legal também. Use os 2.

Voltando: Python é software livre e não depende muito de uma única corporação como outras linguagens de programação dependem.
Particularmente não gosto muito de tecnologias dessas empresas, pelo efeito monopolizador que elas têm. Acho a filosofia do Software livre bem mais atraente e benéfica para as pessoas em geral.

Além disso um colega de trabalho me disse que era uma boa aprender Python.

Resultado:

Por exemplo veja como é simples fazer o tradicional programinha "Aló mundo" em Python. Seja qual for o sistema operacional que você estiver usando no PC (Windows/MAC/Linux). Se você tiver o Python instalado, basta abrir o editor de texto (bloco de notas) e digitar:


print ('hello world!')


Salve o arquivo com a extensão .py, abra o terminal, vá até a pasta onde o arquivo está e digite "py nome-do-arquivo.py". 
Pronto! você fez seu primeiro app em Python!
Estima-se que um programa escrito em Python tem bem menos da metade de linhas que um programa escrito em Java/C/C++, etc.

Veja em Java como é necessário bem mais código pra fazer exatamente a mesma coisa:


public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}

E no Java você vai precisar compilar seu código para bytecode Java, se não seu código não vai executar. Além disso, é claro, você precisa ter o Java instalado no seu PC.

Em Python se você não quiser que a sua aplicação seja um txt com a extensão .py, você também pode compilar ela, mas não é obrigatório.

Mas a diferença entre as duas linguagens não para por aí.
Python é bonito e prioriza o esforço do desenvolvedor sobre a sintaxe e a velocidade de execução do programa. Python também têm recursos modernos que muitas linguagens de programação não têm. Como por exemplo retorno e atribuição múltipla de variáveis.
O código Python também é bem mais fácil de dar manutenção.

Programei em Java por alguns anos, mas depois de aprender Python descobri que praticamente não preciso usar Java.

Se você vai fazer um programa extraordinariamente grande e complexo com centenas talvez milhares de telas/páginas, Java/C++/Delphi talvez façam sentido. Mas se você precisa criar um sistema médio ou pequeno talvez Python seja a melhor escolha. O Node JS também.

Lendo alguns fóruns e sites de programação vejo que são recorrentes as perguntas "qual é a melhor linguagem de programação?" e "qual linguem aprender?".

Não existe melhor linguagem. Tem pessoas que só sabem Delphi e não precisam de outra coisa, porque é o melhor pra elas. 
Tem pessoas que só trabalham com desenvolvimento web, talvez para esses baste saber CSS, HTML e Javascript.

Se você pretende trabalhar com bancos de dados, aprenda SQL.
Cada tecnologia têm sua aplicação.
Se uma tecnologia existe, têm um motivo pra isso. Aprenda o que precisar aprender. Não dá pra fazer tudo com uma tecnologia só.
Existem tecnologias que rodam em várias plataformas e podem ser usadas em diferentes ambientes (Web, Mobile, Desktop), mas não resolvem tudo. Ou talvez você não precise delas.
 - "Ah! mas Python é lento! Vou pro Node JS que é mais eficiente!". ()=> Sim e não: 
Python tem balas de prata pra lidar com os problemas de velocidade: 
Você pode usar CPython com Flask no Apache, ou você pode usar PyPy com Bottle e CFFI e libs escritas em C no Nginx. o Node JS nunca vai ser mais rápido que isso. 
- "A mas meu site vai receber milhões de visitas!". Beleza: você ainda pode usar Twisted Python!

Ainda sobre pré-conceitos sobre velocidade, veja esse benchmark: https://www.techempower.com/benchmarks/#section=data-r14&hw=ph&test=plaintext.

Tudo vai da aplicação e necessidade/tipo de problema, tempo de desenvolvimento, etc.

Mais algumas leituras interessantes sobre Python:
https://ericstk.wordpress.com/2014/09/30/python-powered-coisas-que-python-pode-fazer-e-voce-nao-sabia

"E as pessoas não aprendem Python, porque ele vai levá-los um emprego; eles aprendem porque eles realmente gostam de programar e não estão satisfeitos com as línguas que já conhecem. " mais em: 

htttp://paulgraham.com/pypar.html

Criando uma API em C para usar com CFFI - PostgreSQL

Uma lib bem legal do Postgres é a libpq . Instalação no Debian 7, 8 e 9: sudo apt update && sudo apt install libpq-dev Ela po...