Por dentro da cabeça de um mestre em procrastinação

A procrastinação é a principal causa da falta de produtividade de qualquer um. Ela acontece nas mais variadas áreas da vida da pessoa.

Nesse TED talk Tim Urban explica de forma descontraída o que acontece dentro da cabeça de um bom “procrastinador”.

Installing V8 JavaScript Engine and V8js PECL extension on Ubuntu 14

This is much more like a note to self than an instructional guide. If you need to install the latest version V8 JavaScript Engine and V8JS lib for php, you’ll need to compile them from source. (If you’re using Ubuntu 14, the APT repositories have a very old version of those libraries. If those versions are ok for you, just use apt-get to install libv8 and pecl to install the v8js lib for PHP.)

First download, compile and “install” V8 from Google


svn checkout http://v8.googlecode.com/svn/trunk/ ./v8
 cd v8
 make builddeps
 make native library=shared

sudo mkdir -p /usr/lib /usr/include
 sudo cp out/native/lib.target/lib*.so /usr/lib/
 sudo cp -R include/* /usr/include
sudo cp out/native/lib.target/lib*.so /usr/lib/x86_64-linux-gnu/
 echo -e "create /usr/lib/libv8_libplatform.a\naddlib out/native/obj.target/tools/gyp/libv8_libplatform.a\nsave\nend" | sudo ar -M

Then install v8js via pecl


sudo pecl install v8js-0.4.0 # The latest stable version for PHP 5+ at the time of this writing

Now add extension=v8js.so to your php.ini.

6 erros óbvios ao conduzir um projeto de software

Existem certas posturas inadequadas na execução de um projeto que são obviamente erradas, mas que muitos profissionais (especialmente freelancers iniciantes) cometem com muita frequência. Alguns desses itens foram listados por Thomas Carney sobre projetos com WordPress, outros eu adicionei por experiência própria. Apesar do foco aqui ser projetos de software os itens aplicam-se tranquilamente a qualquer outro projeto de áreas diversas.

Read More

Atualizando o node através do NPM

Para atualizar o Node na sua máquina você pode baixar a versão mais recente de Nodejs.org ou pode fazer do jeito mais fácil: usando o NPM.

Para isso basta executar os comandos abaixo:


sudo npm cache clean -f
sudo npm install -g n
sudo n stable

O pacote n é um helper do Node, e o último comando atualiza sua instalação para a versão estável mais recente. Caso você queira instalar uma outra versão substitua o stable pelo número da versão desejada:


sudo n 0.8.21

Para confirmar a versão que você está usando, use


node -v

Thanks to David Walsh!

Aprendizado de máquina no reconhecimento contextual de imagens

No vídeo a seguir, Fei Fei Li explica como está usando Machine Learning e redes neurais para aprimorar a visão computacional, permitindo que o computador identifique não apenas objetos mas também o contexto de uma imagem.

Para esse projeto foi criado o ImageNet, base de dados de imagens classificadas para servir de treinamento para seus algoritmos. Essas imagens e suas classificações estão disponíveis gratuitamente em image-net.org.

Seja pago por tudo o que você faz

Uma característica marcante do brasileiro é querer pechinchar, sempre. Sempre! Não importa se o preço está alto ou baixo. E quando você é especialista em alguma área, prestador de serviços ou comerciante, alguém sempre vem querendo diminuir seu preço ou querendo que você faça algo de graça. Às vezes até oferecem benefícios futuros, mas nada concreto. O Thiago Concer fala um pouco sobre isso neste vídeo:

O fato é que quando você presta algum serviço “de graça”, ou aguardando algum incerto benefício futuro, o seu serviço passa a ser menos valorizado do que deveria. Existe uma máxima que diz que “nada vale o que nada custa”. Ou seja, você diminui sua percepção de valor ao diminuir o custo final do que você faz, o que é péssimo.

Quando o escambo se faz necessário -substituindo a remuneração-, procure deixar muito claro o valor que você está agregando -apesar de abrir mão do custo. Quando seu produto ou serviço tem valor, o consumidor vai entender a definição do seu custo. Caso essa percepção não seja clara para seu potencial cliente, talvez ele não mereça ser atendido por você.

Nessa mesma linha de raciocínio o John Jantsch sugere algumas opções para oferecer seu produto sem um custo direto, mas sem diminuir o valor do que você faz.

Introdução ao Python

O Python é uma linguagem de programação interpretada que tem como principais características:

  • Código legível
  • Tem um garbage collector autônomo
  • Tem tipagem dinâmica – você não precisa definir o tipo da variável antes de utilizá-la

Se você iniciar o interpretador de comandos (comando python) você pode executar os comandos diretamente no shell, como por exemplo:

# "Jogo da velha" (ou sustenido, como preferem alguns) serve para comentar o que vem adiante
"Fulano" + "da" + "Silva"       # Imprime 'Fulano da Silva' na tela
1 + 2             # Imprime 3 na tela

Outros comandos e estruturas:

Não poderia faltar o Hello World!

# Comando utilizado para exibir um texto na tela fora do interpretador de comandos
print("Hello, " + "world");

Listas

# Listas, que em outras linguagens são chamadas de arrays ou vetores
# Repare que isso se parece muito com JSON
['maçã', 'banana', 'macaco']

# Atribuindo a lista acima a uma variável
a = ['maçã', 'banana', 'macaco']

# List slices
a = [10, 11, 12, 13, 14, 15]
print( a[1] ) # Imprime 11, que é o elemento de índice número 1
print( a[0:2] ) #imprime [10, 11], que são os elementos de 0 a 2, sem incluir o item de índice 2
print( a[3:] ) #imprime [13, 14, 15], que são todos os elementos a partir do de índice 3, inclusive

# Verificando se um item está presente em uma lista
a = [1, 2, 3, 4]
1 in a # Retorna True
10 in a # Retorna False

# Essa verificação pode ser usado em condicionais
if 1 in a:
   print("O número 1 está presente na lista a") # Essa linha será mostrada na tela

Dicionários

# Dicionários - também parece-se muito com objetos JSON. A sequência das chaves não é fixa no Python
pessoa = { 'nome' = "Elvis", 'idade' = 18 }
n = pessoa['nome'] # Atribui o texto "Elvis" à variável n
pessoa['nome'] = "José" # Substitui o valor presente em pessoa['nome']
pessoa.keys() # Retorna ['nome', 'idade']
'nome' in pessoa # Retorna True. Quando o operador in é usado em um dicionário, o Python procura o valor nas chaves, não no conteúdo
del(a['nome']) # Elimina o item do dicionário

#Dicionários e listas
# Combinados, eles funcionam de forma muito similar a documentos JSON
things = { 'animals': ['dog', 'cat', 'zebra'] }   # Uma lista dentro de um dicionário em Python
things['animals'][0]   # Retorna 'dog'
things['animals'].append('bird')
things # Exibe {'animals': ['dog', 'cat', 'zebra', 'bird']}

Estruturas de controle

# For loop com listas
sum = 0
numbers = [1,2,3,5,8]
for i in numbers:
  sum = sum + i     # A indentação é o que define os blocos no Python
print i

# For loop com dicionários
people = {'name':'Bob', 'hometown': "Palo Alto", 'favorite_color': 'red'}
for item in people:
  if (item == 'favorite_color'):
     print  people[item]


# While loops
fruits = ['orange', 'apple', 'banana']

i = 0
while ( i < len(fruits) ):
  print fruits[i]
  i = i + 1    # i++ é um operador inválido no Python!

Funções

# Definição de funções
fruits = ['orange', 'apple', 'orange']

# Essa função vai contar quantas ocorrências existem para cada elemento da lista da variável fruits
def funcao(arg):
    count = {}
    
    for item in fruits:
        if item in count:
            count[item] = count[item] + 1
        else:
            count[item] = 1

    return count

ret = funcao(fruits)
print(ret)   # Exibe {'orange': 2, 'apple': 1}

Exceções

# Exceções - usa-se o bloco try..except
import sys     # Necessário para invocar o método de sys logo abaixo

try:
    print 5 / 0
except:
    print "Exceção: ", sys.exc_info()[0]

print("E a vida continua...")

O resultado da execução deste programa é:

Excecao:
E a vida continua...

Introdução ao MongoDB

logo-mongodb-onwhite

Se você sabe o que é JSON, banco de dados relacional, tem pelo menos uma vaga ideia do que vem a ser NoSQL e quer saber o que é o MongoDB, este post vai te ajudar a saber por onde começar.

O MongoDB é um banco de dados não relacional (também conhecido como NoSQL) para armazenamento de documentos no formato JSON. Isso significa que no Mongo os dados não são armazenados em tabelas (linhas e colunas), mas em um formato mais livre e o baixo nível de normalização é tolerado e em certos casos até incentivado.

Este é um exemplo de um documento em JSON:

{"nome" : "Elvis" }

Este é outro exemplo de um documento JSON:

{ "a" : 5,
"b" : 7,
"lista" : ['abc', 1, 'maçã'] }

Qualquer um desses dois exemplos de um documento JSON podem ser armazenados em um banco de dados do Mongo. Isso porque o Mongo é schemaless, ou seja, não tem um padrão definido para armazenamento dos dados.

MongoDB não tem suporte a joins (relacionamento entre coleções), nem tem suporte a transações, uma vez que todas as operações são atômicas, exatamente por não suportar relacionamento entre suas coleções. Todos os comandos dentro do servidor são executados em JavaScript.
Read More

Faça tudo de forma simples, mas não de forma simplista

As palestras do TED são sempre curtas, objetivas e, na maioria das vezes, matadoras. Como essa logo aí abaixo.

Nessa palestra uma professora de comunicação compartilha sua experiência sobre ensinar comunicação para uma turma de engenheiros. O argumento é bastante simples: se não sabemos comunicar o que estamos fazendo, todo o nosso esforço pode parecer vão para quem nos ouve.

“Faça tudo da forma mais simples possível, mas não de forma simplista” – Albert Einstein

A palestra é curta (pouco mais de 4 minutos) e vale a pena.